BeeKeyPro Styczeń 22, 2025 Udostępnij Styczeń 22, 2025 57 minut temu, PanMajster napisał: Napisz program, który za pomocą 2 pętli for będzie płynnie rozpędzał oraz hamował silnik. Dobrze Ci idzie! Ale @ethanak już chyba pisał o tym: for (i; i <= 255; i++) I mała wskazówka: Zamiast pisać: zmienna = zmienna - 1 możesz napisać po prostu: zmienna-- lub przy większych liczbach: zmienna -= 25 Oczywiście nie trzeba tych zapisów używać, ale po prostu wyglądają czytelniej. 1
orb777 Styczeń 23, 2025 Udostępnij Styczeń 23, 2025 14 godzin temu, PanMajster napisał: Takie coś wyskrobałem . Dodałem nowa funkcje której jeszcze się nie uczyłem "is digit" wiec nie jestem pewien czy dobrze zrobione. W każdym razie działa. A wpisz "x0y9z". Czy tak ma działać? Znasz już pętlę for, czy nie dałoby się nią zastąpić switch()?
PanMajster Styczeń 23, 2025 Udostępnij Styczeń 23, 2025 @orb777 Hmm no tak wyskoczyło mi 9x* po wpisaniu x0y9z. Mała szansa ze ktoś akurat tak wpisze przez przypadek ale owszem jest to luka w programie. Program na pętli for String liczba = ""; // Bufor do przechowywania całej liczby boolean liczbawpisana = false; void wypiszGwiazdki(int liczbaGwiazdek) { // Zmieniona nazwa funkcji for (int i = 0; i < liczbaGwiazdek; i++) { Serial.print("*"); } //program wysyla gwiazdki w tej samej lini Serial.println(); } // pusta linia void setup() { Serial.begin(9600); Serial.println("Witaj w SYSTEMIE"); Serial.println("Wprowadź liczbę od 1-9"); } void loop() { if (Serial.available() > 0) { //sprawdzamy czy dane zostały wpisane char znak = Serial.read(); //odczytujemy 1 znak if (znak >= '0' && znak <= '9') { // jezeli znak to liczba od 0 do 9 liczba += znak; // Dodajemy cyfrę do bufora } else if (znak == '\n') { // Jeśli wprowadzono Enter liczbawpisana = true; }} if (liczbawpisana == true) { int liczba_calkowita = liczba.toInt(); if (liczba_calkowita >= 0 && liczba_calkowita <= 9) { // jezeli znak to liczba od 0 do 9 wypiszGwiazdki(liczba_calkowita); } else { Serial.println("KOD NIEZNANY"); } liczba = ""; // Czyscimy bufor liczbawpisana = false; } delay(300); } Niestety wpisując x0y9z tez program wysyła odpowiednią ilość gwiazdek .
orb777 Styczeń 23, 2025 Udostępnij Styczeń 23, 2025 (edytowany) @PanMajster, nie chodzi luki, nikt z tego programu korzystać na codzień nie będzie. Tu tylko chodzi o naukę, czy rozumiesz czemu tak jest, itd. Niektóre błędy wychodzą po czasie, nawet jak program na pierwszy rzut oka działa całkowicie w porządku. Twój kod wyłapuje tylko cyfry, a resztę znaków pomija (oprócz nowej linii). Może tak miało być, stąd pytanie. Żeby nie było, że tylko jęczę, wrzucam swój amatorski ulep. #include <Arduino.h> #define MAX_ZAKRES 9 String bufor = ""; void wypisz_znaki(); void setup(){ Serial.begin(9600); while(!Serial); } void loop(){ if(Serial.available() > 0){ char z = Serial.read(); switch(z){ // zamiast if-else, tylko dla czytelności case ' ': // case bez break przechodzi dalej; pomija wszystkie spacje case '\t': // pomija tabulatory case '\r': break; // pomija znaki karetki case '\n': wypisz_znaki(); bufor.clear(); break; default: bufor += z; break; // break na końcu być nie musi, ale pinkniej wygląda } } } void wypisz_znaki(){ if(!bufor.length()){ Serial.println("> ???: nie bądź bambik, wpisz coś!"); return; // wychodzi z funkcji, nic nie zwraca } for(int i = 0; i < bufor.length(); i++){ if(!isDigit(bufor[i])){ Serial.printf("> błąd: \"%s\" zawiera znaki inne niż cyfry\n", bufor.c_str()); return; } } int liczba = bufor.toInt(); if(!(liczba > 0 && liczba <= MAX_ZAKRES)){ Serial.printf("> błąd: liczba jest poza zakresem [1-%i]\n", MAX_ZAKRES); return; } if(bufor[0] == '0'){ Serial.println("> info: następnym razem podaj liczbę bez \"wiodących\" zer, ok?"); } for(int i = 0; i < liczba; i++) Serial.print('*'); Serial.println(); } Edytowano Styczeń 23, 2025 przez orb777 1
Santiago Marzec 16, 2025 Udostępnij Marzec 16, 2025 Ta treść została wynagrodzona przez moderatora! Santiago otrzymał odznakę: "Korektor (za znalezienie błędu w artykule)" @Treker Powinieneś zaobserwować, że jedna dioda zmienia wyraźnie swoją jasność - jednak robi to skowo! Skokowo :)- przez tyle czasu nikt tego nie zauważył 1
Treker (Damian Szymański) Marzec 26, 2025 Udostępnij Marzec 26, 2025 @Santiago gratuluję spostrzegawczości. Poprawione
orca_pet Sierpień 25, 2025 Udostępnij Sierpień 25, 2025 Pragnę przypomnieć iż kilka równoległych diod z jednym szeregowym rezystorem to trochę niedobry pomysł, iż przez jedną diodę może przepływać wyższy prąd niż przez drugą (żadna dioda nie jest w 100% taka sama), więc lepiej na każdą diodę podłączyć własny rezystor lub umieścić je szeregowo (jedynie ta pierwsza opcja się tu sprawdzi).
Igor308 3 czerwca Udostępnij 3 czerwca zrobilem bardzo fajny kod z uzyciem sterownika l293d #define MOTOR 75 void setup(){ pinMode(7, OUTPUT); pinMode(8, OUTPUT); } void loop(){ digitalWrite(7,LOW); digitalWrite(8,HIGH); for (int y = (0); y <= (MOTOR); y = y + (1)) { analogWrite(6,y); delay(250); } delay(3000); for (int i = (MOTOR); i >= (0); i = i + (-1)) { analogWrite(6,i); delay(250); } digitalWrite(7,LOW); digitalWrite(8,LOW); delay(5000); digitalWrite(7,HIGH); for (int s = (0); s <= (MOTOR); s = s + (1)) { analogWrite(6,s); delay(250); } delay(3000); for (int r = (MOTOR); r >= (0); r = r + (-1)) { analogWrite(6,r); delay(250); } delay(5000); } ps. uzywam 12 woltow dlatego zmniejszylem wartosc na 75
orb777 3 czerwca Udostępnij 3 czerwca 37 minut temu, Igor308 napisał: for (int y = (0); y <= (MOTOR); y = y + (1)) { Nie widziałem jeszcze takiego zapisu, do czego służą nawiasy przy stałych?
Treker (Damian Szymański) 4 czerwca Udostępnij 4 czerwca 17 godzin temu, orb777 napisał: Nie widziałem jeszcze takiego zapisu, do czego służą nawiasy przy stałych? Hmm, raczej nie mają tutaj żadnego zastosowania (nie zmieniają nic w działaniu).
ethanak 4 czerwca Udostępnij 4 czerwca Aj tam oj tam - nie znacie się na FORTRAN-ie, a tam chodziło o to żeby nie zmienić przypadkowo wartości stałej
Igor308 4 czerwca Udostępnij 4 czerwca (edytowany) 5 godzin temu, Treker napisał: Hmm, raczej nie mają tutaj żadnego zastosowania (nie zmieniają nic w działaniu). tak wogole u mnie nie wywala bledow kompilator wiec jest ok Edytowano 4 czerwca przez Igor308
jand 4 czerwca Udostępnij 4 czerwca Oczywiście kompilator akceptuje te nawiasy i błędów nie ma, ale to nie oznacza że są one do czegokolwiek potrzebne. A zaciemniają tylko obraz. Usuń je, a zobaczysz że wszystko działa.
Igor308 4 czerwca Udostępnij 4 czerwca 10 minut temu, jand napisał: Oczywiście kompilator akceptuje te nawiasy i błędów nie ma, ale to nie oznacza że są one do czegokolwiek potrzebne. A zaciemniają tylko obraz. Usuń je, a zobaczysz że wszystko działa. ok sprobuje
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »