Skocz do zawartości

Pomocna odpowiedź

Napisano

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ę


 }
}

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 😉

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

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.

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

  • 2 tygodnie później...

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ę

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

Agara7, na przyszłość dobrze byłoby też deklarować stałe zawsze WIELKIMI literami - taka dobra praktyka. 😉

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