Skocz do zawartości

Kurs Arduino UART komunikacja zadanie 2.5 problem


Pomocna odpowiedź

komunikat błędu

expected primary-expression before '==' token

Co to dokładnie oznacza (w kontekście programu)

I Czy założenia programu są poprawne? Ograniczyłam się do jednej diody.

#define zielona 8


String odebraneDane = ""; //Pusty ciąg odebranych danych

void setup() {
 Serial.begin(9600); //Uruchomienie komunikacji
 pinMode(zielona, OUTPUT); //Konfiguracja wyjść

 digitalWrite(zielona, LOW); //Wyłączamy diodę
}

void loop() {
 if(Serial.available() > 0) { //Czy Arduino odebrało dane
   //Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
   odebraneDane = Serial.readStringUntil('\n'); 

   if (odebraneDane == "zielona"); { //Jeśli odebrano słowo "zielona
    if (digitalRead(zielona, == LOW));//jeśli dioda jest zgaszona
    digitalWrite(zielona, HIGH);//Włącz diodę

    if (digitalRead("zielona", == HIGH);//Jeśli dioda jest włączona
    digitalWrite(zielona, LOW);//Zgaś diodę


 }
}
Link do komentarza
Share on other sites

Mechano, Agara7, to chyba nie tylko kwestia przecinka... Po jego usunięciu otrzymujemy:

if (digitalRead("zielona" == HIGH);

A to nie ma większego sensu. Ni to warunek, ni to odczytania stanu wejścia. Co dokładnie ten fragment kodu ma robić? To chyba jakiś błąd na zasadzie CTR+C i wklejono coś w złe miejsce 😉

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

Hm, sprawdziłam raz jeszcze jak powinno zapisywać się warunki, a może coś takiego? Celem jest uzależnienie komendy od pojawienia się napięcia na pinie, zamieniam powyższy fragment kodu na następujący

if () { (digitalRead("zielona", == HIGH);
 digitalWrite(zielona, LOW);
} else {
 digitalWrite(zielona, LOW);

}

Niestety, nadal coś nie działa

Link do komentarza
Share on other sites

W niedzielę kąpała się w smole,
A w poniedziałek w rosole,
We wtorek - w czerwonym winie,
A znowu w środę - w czerninie,
A potem w czwartek - w bigosie,
A w piątek - w tatarskim sosie,
W sobotę - w soku z moreli…

Co miała z takich kąpieli?

Co miała? Zmartwienie miała,
Bo z brudu lepi się cała,
A na myśl jej nie przychodzi,
Żeby wykąpać się w wodzie.

Życzę powodzenia w programowaniu losowym.

Link do komentarza
Share on other sites

Agara7, niestety to wygląda jakbyś naprawdę próbowała wklejać te linie losowo. Żadna z tych konstrukcji nie jest poprawna. Ani ten zapis: " if () { (digitalRead("zielona", == HIGH); ", ani nawet ten fragment "(digitalRead("zielona", == HIGH);" nie mają absolutnie żadnego sensu i nie wierzę, że gdzieś znalazłaś taki zapis 🙂 W tym artykule: Kurs Arduino – #2 – podstawy programowania, porty I/O masz przykład bardzo prostego warunku, który jest poprawny. Zobacz jak zbudowany jest ten warunek i czym się różni od Twojego. Zwróć uwagę chociażby na lokalizację nawiasów:

void setup() {
 pinMode(8, OUTPUT); //Dioda jako wyjście
 pinMode(7, INPUT_PULLUP); //Przycisk jako wejście
 digitalWrite(8, LOW); //Wyłączenie diody
}

void loop()
{
 if (digitalRead(7) == LOW) { //Jeśli przycisk wciśnięty
   digitalWrite(8, HIGH); //Włącz diodę
 } else { //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
   digitalWrite(8, LOW); //Wyłącz diodę
 }
}

Jeśli sama napisałaś to "if () { (digitalRead("zielona", == HIGH); " to opisz proszę co dokładnie według Ciebie oznacza ten zapis (digitalRead("zielona", == HIGH) może uda nam się wtedy zrozumieć Twój tok rozumowania i znajdziemy problem. Ja mimo szczerych chęci nie potrafię zrozumieć co miałaby robić ta linijka (nawet jeśli byłaby napisana poprawnie składniowo).

Link do komentarza
Share on other sites

Przepraszam za brak odpowiedzi przez dłuższy czas, wiem że jest tu błąd i poniżej szukam go krok po kroku przez analogię do kodu przykładowego, niestety nie wypatrzyłam problemu z nawiasami 🙁

{
//Kod wykonywany przy każdym obiegu pętli

 if ( WARUNEK ) {
   /* Kod wykonywany tylko, gdy w danym
      obiegu pętli spełniony jest WARUNEK */
 }

WARUNEK to stan niski, czyli digitalRead(7) == LOW

kod wykonywany... to włączenie diody czyli digitalWrite(8, HIGH);

else, czyli w innym wypadku, czyli wtedy digitalRead(7) == HIGH (tego elementu nie ma w kodzie, ale jeśli dobrze rozumiem wynika to z else) gdy dioda jest włączona

digitalWrite(8, LOW); //Wyłącz diodę

Link do komentarza
Share on other sites

Agara7, no i to co tutaj piszesz się zgadza. To teraz spójrz na:

 if ( WARUNEK ) { 

oraz na:

if (digitalRead("zielona" == HIGH);

Twój warunek to 'digitalRead("zielona" == HIGH', co jest błędem składni, bo jak już to 'digitalRead("zielona") == HIGH', ale teraz czym jest to "zielona"? Tam nie można wpisywać czegoś takiego. Musisz tam wpisać nr pinu, do której podłączony jest jakiś przycisk, czyli tak jak sama wyżej napisałaś warunkiem powinno być np.: "digitalRead(7) == LOW" 😉

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.