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

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

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ę »
×
×
  • 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.