If Abfrage für Ampel

Hallo liebes Forum,
ich will eine ampelschaltung mit knopf und fußgänger ampel machen, dies habe ich bereits ohne knopf hinbekommen allerdings bekomme ich es nicht mit knopf hin.

void setup() {
  int knopf = 13;
  pinMode(8, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
}


void loop() {
  digitalWrite(2, LOW)
  int knopf = digitalRead(8);
  if (knopf == 1)
  {
  digitalWrite(2, HIGH);
  delay(1000);
  }

}

Compilation error: expected ';' before 'int'

danke schon im voraus!

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

oh enschuldigung wie tue ich die nachricht den in das de forum
tut mir leid bin neu :slight_smile:

Nach mal hinter LOW) ein ;

Und mit delay und Tasterabfrage wirst du nicht weiterkommen. Google mal noch millis und statemaschine

danke.
Ich wollte erstmal für die ampel nur das mit dem schalter probiren. Wie es weitergeht weiß ich noch nicht da ich "millis" nicht verstehe

Vielleicht hilft Dir ja folgendes weiter, um einen Überblick zu bekommen:

Google kann sehr nützlich sein.

gennerell ist die syntax komisch für mich da ich aus Python komme

Wenn du mit millis nicht klar kommst, dann versuche es doch mit dem combietimer
Damit kannst du auch individuelle Zeiten einstellen.

void setup()
{
  // Fahrbahnampel
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

  // Fußgängerampel
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT); 
 
  // Taster
  pinMode(8, INPUT_PULLUP);
}
void loop()
{
  
  // Ampel grün/Fußgängerampel rot
  digitalWrite(3, HIGH);
  digitalWrite(13, HIGH);
  
  // Zustand des Tasters lesen 
  int TasterLesen = digitalRead(8);
  delay(200);
 
  // PULLUP-Widerstand eingeschaltet-> LOW = Taster gedrückt
  if (TasterLesen == 1)
  {
    // 1 s Pause
    delay(1000);

    // Fahrbahnampel grün aus
    digitalWrite(13, LOW);

    // Fahrbahnampel gelb an 
    digitalWrite(12, HIGH);
    delay(1000);
    digitalWrite(12, LOW);

    // Fahrbahnampel rot an
    digitalWrite(11, HIGH); 

    // 1 s Sicherheitszeit 
    delay(1000); 

    // Fußgängerampel auf grün schalten 
    digitalWrite(3, LOW);
    digitalWrite(2, HIGH);
    delay(5000); 

    // Fußgängerampel auf rot schalten
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    
    // 1 s Pause
    delay(1000);

    // Fahrbahnampel auf gelb und dann auf rot schalten
    digitalWrite(12, HIGH);
    delay(1000);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    
  }
}

ich verzweifle ich hbe den code aus dem internet es geht nicht ich scmeis gleich den pc aus dem fenster :upside_down_face:

Zwei Anmerkungen:

  1. du definierst einmal "knopf" als Pinnummer 13 und in der Loop noch einmal "knopf" als Statusmerker für den Zustand von Pin 8 ... Das wird dir später um die Ohren fliegen :wink:
    Edit: obwohl, das erste Mal ist er ja nur lokal im Setup deklariert. Macht also kein Problem. Aber würde "knopf" trotzdem nicht doppelt für zwei verschiedene Zwecke verwenden.
    Edit2: Ah.. du hast während ich das geschrieben habe, schon deinen Sketch aktualisert. Dann ist das hier alles obsolet.
  2. du liest deinen Taster als gedrückt == HIGH ein... Ist das so richtig? Hast du den Taster auch mit einem PullDown-Widerstand angeschlossen und schaltest ihn gegen +5V?

Mit den delays im Code wird das def. nicht richtig funktionieren.
Also nimm millis oder intervall.

Delay blockiert deinen Sketch.

sry 2 verstehe ich nd bin ein anfänger

TasterPin-Pullup ist eingeschaltet, er schaltet, wenn LOW (also gegen GND geschaltet). Tasterlesen muss also == 0 sein. (0 = LOW, 1 = HIGH)

aber dann funktionirt das mit dem schalter doch nich mehr

ich habe 5v an den schalter und dann an pin 8

Was funktioniert dann warum nicht ?

es wird wenn ich auf den schalter drücke strom durchgelassen der geht in pin 8
wenn ich jetzt frage ob 8 aus ist(0) dann leuft die ampel ja durch

Dann musst du den Taster auf GND legen und auf LOW abfragen.
Durch den Pullup hat der Eingang schon ständig HIGH.

Aber nochmals, mit den ganzen delays wirst du nicht glücklich. Wenn das delay aktiv ist, funktioniert die Tasterabfrage nicht.

Danke ich Versuch das mit den delays zu ändern Der Code bleibt dann quasi hängen, oder?

richtig.
Delay heist "tu nix, bleib stehen und wenn die Zeit rum ist, dann mach weiter"

Aber es ist doch eig nd schlimm weil es wird ja abgefragt dann ausgeführt und wenn in der Ausführung ein Delay ist ist das doch nicht schlimm oder?