Skocz do zawartości

Problem z programem z poradnika - zadanie 2.5


Pomocna odpowiedź

Napisano

Witam, niedawno zainteresowałem się programowaniem Arduino i zacząłem korzystać z poradnika z tej strony. Ogólnie wszystko idzie sprawnie ponieważ już kiedyś miałem styczność z programowaniem, ale do czasu gdy nie natknąłem się na zadnie 2.5:

Napisz program, który po wysłaniu koloru diody zmieni jej stan na przeciwny. Jeśli dioda jest włączona, to zostanie wyłączona i na odwrót. Podpowiedź: koniecznie użyj dodatkowych zmiennych typu bool, które będą pamiętały aktualny stan diod.

A to mój kod:

String odebraneDane = ""; 
   bool a=false;
  bool b=false;
void setup() {
  Serial.begin(9600); 
  pinMode(9, OUTPUT); 
  pinMode(8, OUTPUT);
  
  digitalWrite(9, LOW); 
  digitalWrite(8, LOW);

}
 
void loop() {

  if(Serial.available() > 0) { 
    odebraneDane = Serial.readStringUntil('\n'); 
    
    if ((odebraneDane == "n") && (a == false)) { 
      digitalWrite(9, HIGH); 
      a=true;
     
    }
    
    if ((odebraneDane == "c") && (b == false)) { 
      digitalWrite(8, HIGH); 
      b=true;

    }


        if ((odebraneDane == "n") && (a == true)){ 
      digitalWrite(9, LOW); 
      a=false;
    }
    
    if ((odebraneDane == "c") &&( b == true)) { 
      digitalWrite(8, LOW); 
      b=false;

   }


  }
  
}

 

Według mnie wszystko jest jasne i czytelne oraz powinno działać ale jednak coś jest nie tak. Program wgrywa się do arduino bez żadnego problemu do czasu jak przychodzi co do czego i testujemy nasz program. Nie wiem co jest źle więc proszę szybką pomoc!!

@kooval, witam na forum!

Pamiętaj na przyszłość, aby kody programów umieszczać korzystając z przycisku kod oznaczonego jako "<>". Wtedy składania programów jest kolorowana i wszystkim analizuje się wklejone programy znacznie łatwiej. Twój program nie ma żadnych komentarzy, a nazewnictwo zmiennych typu "a", "b" wiele nie pomaga. Możesz napisać krok po kroku, jak według Ciebie działa ten program? Jakiego efektu się spodziewałeś, a co dzieje się faktycznie w praktyce? Wskazanie przez nas od razu Twojego błędu wiele Cie nie nauczy - lepiej przeanalizować program wspólnymi siłami 😉 

@Treker, zapamiętam na przyszłość co i jak.

Jeśli chodzi o komentowanie i zmienne 'a' i 'b' to ja się w tym odnajduje. 

Program aktualnie według mnie wcale nie działa ponieważ nie ma żadnego odzewu gdy wpisze 'n' lub 'c'. Jak dodawałem else by wyświetlał wiadomość jak polecenie nie będzie się zgadzało to po wpisaniu 'c' nic się nie dzieje a gdy wpisze 'n' to uaktywnia się else.

Według mnie program powinien działać tak jak wskazuje polecenie, lecz jestem nowy w tym i może jest coś źle. Moje doświadczenie w programowaniu to jedynie kawałek c++.

 

@deshipu nie rozumiem co masz na myśli.

Właśnie zmiany wartości tych zmiennych odzwierciedlają to co się dzieje w twoim programie. Prześledź je sobie krok po kroku, to zrozumiesz czemu ci się wydaje, że nic się nie dzieje.

Proponuję sprawdzić kodowanie końca linii. Windows używa \r\n (nie \n\r jak niektóre błędne strony podają), w każdym razie jak czytasz linię do \n to na końcu masz jeszcze jeden znak, czyli \r. Możesz zmienić ustawienia programu do komunikacji i upewnić się, że wysyła tylko \n, albo do testów sprawdzić (odebraneDane =="c\r"), jaśli zadziała to chociaż będzie wiadomo gdzie jest problem.

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...