farmaceuta Marzec 23, 2024 Udostępnij Marzec 23, 2024 @Farmer poprawione Link do komentarza Share on other sites More sharing options...
Farmer Marzec 24, 2024 Autor tematu Udostępnij Marzec 24, 2024 Szczerze to nawet nie wiem co źle, ale dalej jest jakiś problem. Link do komentarza Share on other sites More sharing options...
AntekBezak Marzec 24, 2024 Udostępnij Marzec 24, 2024 W poniższym kodzie zadeklarowałem zmienną data jako globalną, a jej początkową wartość ustawiłem na 5 co nie odpowiada żadnej komendzie więc na starcie robot nie powinien nic robić. Teraz się kompiluje, zobacz czy działa na robocie. char data='5'; void setup() { //Poczatek funkcji inicjalizującej pinMode(2,OUTPUT); //Określenie pinów 2-5 jako wyjścia pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } void loop() { if (Serial.available() > 0) { data=Serial.read(); Serial.println(data); } if(data== '1'){ //Jazda do przodu. digitalWrite(3,LOW); //Ustawienie stanu niskiego na pin 3 digitalWrite(2,HIGH); //Ustawienie stanu wysokiego na pin 2 digitalWrite(4,LOW); digitalWrite(5,HIGH); } //Stop else if(data== '4'){ //Lewo digitalWrite(3,HIGH); digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH); //Lewy silnik jest zatrzymany, prawy silnik się obraca } else if(data== '3'){ //Prawo digitalWrite(3,LOW); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); //Prawy silnik jest zatrzymany, lewy silnik się obraca } else if(data== '2'){ //Jazda do tyłu digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); } } Link do komentarza Share on other sites More sharing options...
Farmer Marzec 24, 2024 Autor tematu Udostępnij Marzec 24, 2024 Teraz robot nie robi nic, nawet jak wyślę mu odpowiednie zmienne. 40 minut temu, AntekBezak napisał: W poniższym kodzie zadeklarowałem zmienną data jako globalną, a jej początkową wartość ustawiłem na 5 co nie odpowiada żadnej komendzie więc na starcie robot nie powinien nic robić. Teraz się kompiluje, zobacz czy działa na robocie. char data='5'; void setup() { //Poczatek funkcji inicjalizującej pinMode(2,OUTPUT); //Określenie pinów 2-5 jako wyjścia pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } void loop() { if (Serial.available() > 0) { data=Serial.read(); Serial.println(data); } if(data== '1'){ //Jazda do przodu. digitalWrite(3,LOW); //Ustawienie stanu niskiego na pin 3 digitalWrite(2,HIGH); //Ustawienie stanu wysokiego na pin 2 digitalWrite(4,LOW); digitalWrite(5,HIGH); } //Stop else if(data== '4'){ //Lewo digitalWrite(3,HIGH); digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH); //Lewy silnik jest zatrzymany, prawy silnik się obraca } else if(data== '3'){ //Prawo digitalWrite(3,LOW); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); //Prawy silnik jest zatrzymany, lewy silnik się obraca } else if(data== '2'){ //Jazda do tyłu digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); } } Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
AntekBezak Marzec 24, 2024 Udostępnij Marzec 24, 2024 A dostajesz dane zwrotne w serial monitorze? Możesz jeszcze spróbować tak: void setup() { //Poczatek funkcji inicjalizującej pinMode(2,OUTPUT); //Określenie pinów 2-5 jako wyjścia pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } void loop() { char data='5'; if (Serial.available() > 0) { data=Serial.read(); Serial.println(data); } if(data== '1'){ //Jazda do przodu. digitalWrite(3,LOW); //Ustawienie stanu niskiego na pin 3 digitalWrite(2,HIGH); //Ustawienie stanu wysokiego na pin 2 digitalWrite(4,LOW); digitalWrite(5,HIGH); } //Stop else if(data== '4'){ //Lewo digitalWrite(3,HIGH); digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH); //Lewy silnik jest zatrzymany, prawy silnik się obraca } else if(data== '3'){ //Prawo digitalWrite(3,LOW); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); //Prawy silnik jest zatrzymany, lewy silnik się obraca } else if(data== '2'){ //Jazda do tyłu digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); } } Link do komentarza Share on other sites More sharing options...
Farmer Marzec 25, 2024 Autor tematu Udostępnij Marzec 25, 2024 Robot nie robi nic, ani nie dostaję informacji zwrotnych. Dnia 24.03.2024 o 10:16, AntekBezak napisał: A dostajesz dane zwrotne w serial monitorze? Możesz jeszcze spróbować tak: void setup() { //Poczatek funkcji inicjalizującej pinMode(2,OUTPUT); //Określenie pinów 2-5 jako wyjścia pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); } void loop() { char data='5'; if (Serial.available() > 0) { data=Serial.read(); Serial.println(data); } if(data== '1'){ //Jazda do przodu. digitalWrite(3,LOW); //Ustawienie stanu niskiego na pin 3 digitalWrite(2,HIGH); //Ustawienie stanu wysokiego na pin 2 digitalWrite(4,LOW); digitalWrite(5,HIGH); } //Stop else if(data== '4'){ //Lewo digitalWrite(3,HIGH); digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(5,HIGH); //Lewy silnik jest zatrzymany, prawy silnik się obraca } else if(data== '3'){ //Prawo digitalWrite(3,LOW); digitalWrite(2,HIGH); digitalWrite(4,HIGH); digitalWrite(5,HIGH); //Prawy silnik jest zatrzymany, lewy silnik się obraca } else if(data== '2'){ //Jazda do tyłu digitalWrite(2,LOW); digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(4,HIGH); } } Link do komentarza Share on other sites More sharing options...
jand Marzec 25, 2024 Udostępnij Marzec 25, 2024 W setup() przydałaby się linijka: Serial.begin(9600); Link do komentarza Share on other sites More sharing options...
Santiago Marzec 26, 2024 Udostępnij Marzec 26, 2024 (edytowany) Zmieńtą drabinkę if i else na coś bardziej przejrzystego. Edytowano Marzec 26, 2024 przez Santiago Link do komentarza Share on other sites More sharing options...
AntekBezak Marzec 26, 2024 Udostępnij Marzec 26, 2024 @jand ma rację, serial begin na pewno pomoże 😅 Link do komentarza Share on other sites More sharing options...
anonimowy Marzec 29, 2024 Udostępnij Marzec 29, 2024 (edytowany) Przyślij która linijka podświetla się na czerwono. Funkcja void loop jeśli ciało pierwszego warunku if (Serial.available() > 0) { char data=Serial.read(); Serial.println(data); } Wygląda tak to po znaku "{" powinieneś linijki zaczynać od tabulatora. Użyj zmiennej char data = 0; I zapisz w void loop data=Serial.read(); oraz pozostałe warunki np. if(data== '1'){ digitalWrite(3, LOW); digitalWrite(2, HIGH); digitalWrite(4, LOW); digitalWrite(5,HIGH); } Także spróbuj z tabulatorami i wstaw odstęp pomiędzy data a (pierwsze) =. Czyli tak: if (data == '1') { } Edytowano Marzec 29, 2024 przez anonimowy Link do komentarza Share on other sites More sharing options...
jand Marzec 29, 2024 Udostępnij Marzec 29, 2024 31 minut temu, anonimowy napisał: spróbuj z tabulatorami i wstaw odstęp To są zabiegi magiczne i nie zastąpią prawidłowego programowania. Link do komentarza Share on other sites More sharing options...
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ę »