Code funktioniert NICH! SOLVED

Hallo,

ich habe heute mein erstes Arduino erhalten und auch gleich los gelegt.

Um rein zukommen habe ich mich eine Ampel gebastelt. Als Dauerschleife hatte alles wunderbar funktioniert.

Dann hatte ich mir gedacht ich könnte die Ampel von Rot über Gelb nach Grün wechseln lassen wenn ich einen Taster betätige.

Leider funkioniert es nicht. Statt dessen bekomme ich ein Error das ich nicht verstehe. (siehe unten)

int redled =3;    // initialize digital pin. 
int yellowled =5; 
int greenled =7; 
int taster = 8;
int level=12;

void setup()
{
pinMode(redled, OUTPUT); 
pinMode(yellowled, OUTPUT); 
pinMode(greenled, OUTPUT);
pinMode (taster, INPUT);
digitalWrite(level, HIGH);
digitalWrite(taster, LOW);
}
void loop()
{
   // digitalWrite(redled, HIGH);

   if (taster == LOW)
    {
     digitalWrite(redled, HIGH);
    }
  
   else (taster == HIGH) // nur wenn taster betaetigt wir
  {                        
    for(int i=0;i<3;i++)      // blinks for 3 times
    {
  delay(500);// wait 0.5 second 
  digitalWrite(yellowled, HIGH); // turn on yellow LED 
  delay(500);         // wait 0.5 second 
  digitalWrite(yellowled, LOW); // turn off yellow LED
    }

  digitalWrite(redled, LOW); // turn off red LED
  delay(500);// wait 0.5 second 
  digitalWrite(greenled, HIGH); // turn on green LED 
  delay(5000);       // wait 5 seconds 
  digitalWrite(greenled, LOW); // turn off green LED
  
  }
}

Das folgede Error gilt wür die Zeile nach dem "else":

exit status 1
expected ';' before '{' token

Weiß einer was ich falsch mache?
Bin der Meinung nach "else" kommt kein ";".
Wenn ich es dennoch einfüge leuchtet nie die rote LED und der Taster ist auch nich in funktion.

EDIT:

Hallo,

das mit dem Error hat sich erledigt.

Aber meine gewünschte funktion habe ich immer noch nicht.

Weis jemand eine Lösung?

Viele Güße

Willkommen im Forum.

Schau dir mal dieses "else" an:

else (taster == HIGH) // nur wenn taster betaetigt wir

Du meinst vermutlich else if anstatt else.

Viel Erfolg beim lernen, du bist auf dem richtigen Weg :slight_smile:

EDIT:
PS: Versuch nicht mit Edits zu arbeiten, außer du weißt was du machst. Die Änderungen bekommt sonst niemand mit.

digitalWrite(level, HIGH);

Ist nicht als Ausgang definiert.

Ein weiterer Punkt:
Da du mit einem internen Pullup arbeitest, ist dein Schalter hoffentlich mit einem Anschluss auf GND und mit dem anderen am Arduino. Ansonsten wird das nicht funktionieren, da der Taster immer HIGH ist.

// Hier aktivierst du den Pullup
pinMode (taster, INPUT);  
  digitalWrite(taster, LOW);

EDIT2:

Es bringt nichts wenn du versuchst den [ .. ] Code im Title anzuwenden. Wie kommt man eigentlich auf so eine Idee ?

Danke schonmal für die Tipps.

int redled =3;    // initialize digital pin. 
int yellowled =5; 
int greenled =7; 
int taster = 8;
int level=12;

void setup()
{
pinMode(redled, OUTPUT); 
pinMode(yellowled, OUTPUT); 
pinMode(greenled, OUTPUT);
pinMode (taster, INPUT);
digitalWrite(level, OUTPUT);
digitalWrite(level, HIGH);
digitalWrite(taster, LOW);
}
void loop()
{

   if (taster == LOW)
    {
     digitalWrite(redled, HIGH);
    }
  
   else if (taster == HIGH) // nur wenn taster betaetigt wir
  {
    for(int i=0;i<3;i++)      // blinks for 3 times
    {
  delay(500);// wait 0.5 second 
  digitalWrite(yellowled, HIGH); // turn on yellow LED 
  delay(500);         // wait 0.5 second 
  digitalWrite(yellowled, LOW); // turn off yellow LED
    }

  digitalWrite(redled, LOW); // turn off red LED
  delay(500);// wait 0.5 second 
  digitalWrite(greenled, HIGH); // turn on green LED 
  delay(5000);       // wait 5 seconds 
  digitalWrite(greenled, LOW); // turn off green LED
  
  }
}

Hier noch einmal der aktuelle Code. Nun funktioniert keine LED mehr.

Das beim Schalter ein Kontakt auf GND sein muss verstehe ich nicht.

Für mein verständnis habe ich ein Kontakt an dem das level anliegt, in meinem Fall HIGH.
Dadurch dass der Taster in der in der Ausgangsposition offen ist, ist der andere Konakt mit dem PIN: "taster, INPUT" verbunden. Sobald ich den Taster betätige bekommt dann "taster, INPUT" das high signal.

Bin ich da ganz falsch?

Bezüglich Titel: Habe in der Liste der Themen gesehen dass mein Titel nicht FETT war und dachte das geht so :sweat_smile: :smiley:

Wenn Du auf einen Pin, der als Eingang definiert ist, ein HIGH ausgibst, schaltest Du den internen PullUp-Widerstand ein. Damit liegt der PIN auf HIGH und Du musst den Taster nach GND schalten und als LOW auswerten.

Gruß Tommy

Hi
In setup():
digitalWrite(level, OUTPUT);
digitalWrite(level, HIGH);
macht NICHT, was Du erwartest.
Denke, bei OUTPUT soll pinMode verwendet werden.

Nach der Abfrage taster==low kannst Du Dir die Abfrage im ELSE-Zweig sparen - der Taster kann nur HIGH oder LOW sein, wenn Er nicht LOW ist, greift der Else-Zweig 'so oder so', da die Abfrage dort ==high dann auf jeden Fall erfüllt ist.

Die Benutzung von delay() möchte auch überlegt sein, es gibt nur sehr wenige Situationen, wo ein delay() nicht stört.
Spätestens, wenn Du 'was nebenbei' machen willst, stolperst Du über die delay()-Aufrufe (dabei macht der µC NICHTS, außer auf das Ende der Wartezeit zu warten).
Dazu hat die IDE ein Beispiel 'blink_without_delay' - oder hier im Forum den immer wieder gerne genommenen Nachtwächter

MfG

int taster = 8;

Und später dann:

if (taster == HIGH)

Da du taster vorher auf 8 gesetzt hast, wird taster immer als HIGH ausgewertet.
Ohne jede Ausnahme.

Du möchtest an der Stelle sicherlich digitalRead() verwenden.