If-Schaltung

Hallo, ich bins wieder. Mir fällt jetzt kein großer Text ein. Ziel ist: Wenn man den Knopf drückt, soll die eine LED angehen.. Ich weiß nur, dass es am Code liegt und nicht an der Schaltung.

int rot = 8;
int gelb = 9;
int gruen = 10;
int Knopf;
void setup() {
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(2,INPUT);
Serial.begin(9600);
}

void loop() {
Knopf=digitalRead(Knopf);
Knopf=Serial.println(Knopf);
if (Knopf == 1) {
digitalWrite(gruen,HIGH);
}
else {
digitalWrite(gruen,LOW);
}
}

  Knopf=Serial.println(Knopf);

falsch

Leicht abgeänderter Beispiel-Code aus der Arduino IDE (StateChangeDetection)

// this constant won't change:
const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT_PULLUP);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}


void loop() {
  // read the pushbutton input pin:
  buttonState = !digitalRead(buttonPin); // invert, because INPUT_PULLUP

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      Serial.println("on");
      digitalWrite(ledPin, HIGH);
    } else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
      digitalWrite(ledPin, HIGH);
    }
    // Delay a little bit to avoid bouncing
    delay(20);
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;
}

Du solltest schon schreiben, was du für ein Problem du hast.

Die Zeile "Knopf = serialPrintln(Knopf)" ist falsch. Entferne "Knopf =".

Taster müssen entprellt werden, weil die mechanischen Kontakte mehrmals über ein paar ms lang auslösen. Der Einfachheit halber kannst du das nehmen:

Allerdings ist bei diesem einfachen Sketch kein entprellen wirklich notwendig.
Sollte allerdings für zukünftige Sketche berücksichtigt werden.

HotSystems:
Allerdings ist bei diesem einfachen Sketch kein entprellen wirklich notwendig.
Sollte allerdings für zukünftige Sketche berücksichtigt werden.

Sehe ich anders, denn er fragt in der Loop den Schalter ab.
Durch das Prellen ist es nur ein Zufall welcher Zustand erkannt wird :o

Eine Hardwarelösung wäre ein 100nF parallel zum Pullup Widerstand, funktioniert gut.
In diesem Fall bevorzuge ich die Hardware Lösung.

rudirabbit:
Sehe ich anders, denn er fragt in der Loop den Schalter ab.
Durch das Prellen ist es nur ein Zufall welcher Zustand erkannt wird :o

Eine Hardwarelösung wäre ein 100nF parallel zum Pullup Widerstand, funktioniert gut.
In diesem Fall bevorzuge ich die Hardware Lösung.

Das ist klar, das es unterschiedliche Betrachtungsweisen gibt.
Hier gibt es aber nur Taster gedrückt ist Led ein, Taster nicht gedrückt ist Led aus.
Mehr nicht, ausser, die Led blinkt evtl. schnell beim Drücken, was ich aber nicht glaube.

Wie schon geschrieben, in anderen Fällen sieht das anders aus.

Mein Post aus #1 sollte für das einfache Entprellen bereits ausreichen. Ggf. die Zeit von 20 auf 50ms erhöhen. Ansonsten stimme ich den anderen Beiträgen zu. Auf Dauer sollte man sich einen anderen Weg zum Entprellen suchen.

Wobei ich die Variante mit dem Kondensator nur als Notlösung sehe. Sowas ist sehr gut in Software zu machen. Ein paar Zeilen im Sketch sind hier günstiger als für, evtl. sogar mehrere Taster mit den Kondensatoren auszustaten.

Wenn auch für die TE erst einmal etwas zu hoch, die schönste Lösung für mich bleibt immer Entprellung – Mikrocontroller.net

Mal eine dumme frage fehlt im Code nicht in der 4. Zeile nach "int Knopf;", noch "= 2" .

Das mit Knopf ist sowieso falsch. Man braucht einmal die Pin-Nummer und dann den Zustand. Das hier ist falsch:

Knopf=digitalRead(Knopf);

Das ist übrigens auch ein Grund Konstanten grundsätzlich als "const" zu deklarieren. Dann gibt es bei sowas einen Fehler.

Dracul:
Mal eine dumme frage fehlt im Code nicht in der 4. Zeile nach "int Knopf;", noch "= 2" .

Falls der Taster nicht an Pin 0 angeschlossen ist, fehlt diese Zuweisung auf jeden Fall. Das ist richtig