Skocz do zawartości

Problem z robotem bluetooth- jeździ tylko do przodu.


Farmer

Pomocna odpowiedź

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

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

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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

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

(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') {
  }

 

Screenshot_20240329-082302~2.png

Edytowano przez anonimowy
Link do komentarza
Share on other sites

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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.