Skocz do zawartości

Problem z programem z poradnika - zadanie 2.5


kooval

Pomocna odpowiedź

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

Link do komentarza
Share on other sites

@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 😉 

Link do komentarza
Share on other sites

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

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

Mam na myśli to: https://www.arduino.cc/reference/en/language/functions/communication/serial/println/

Jeśli nie rozumiesz co się dzieje w twoim programie, to powstawiaj w strategicznych miejscach (na przykład po każdym if-ie) wypisywanie wartości wszystkich zmiennych. Wtedy masz szansę zobaczyć co się dzieje i domyślić się na czym polega twój błąd.

Link do komentarza
Share on other sites

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.

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!

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