Counter Sketch

Stehe wieder mal am Berg!

Hallo zusammen

Habe folgendes Sketch und verstehe nicht, warum das letzte "if" nicht greift.

if(buttonPresses >= 10)
{
digitalWrite(4, LOW);
buttonPresses = 0;

hier das ganze Sketch:

/*
 *  Counting presses
 */

int switchPin = 2;              // switch is connected to pin 2
int val;                        // variable for reading the pin status
int buttonState;                // variable to hold the button state
int buttonPresses = 0;          // how many times the button has been pressed

void setup() {
  pinMode(switchPin, INPUT);    // Set the switch pin as input
  Serial.begin(9600);           // Set up serial communication at 9600bps
  buttonState = digitalRead(switchPin);   // read the initial state
}

void loop(){
  val = digitalRead(switchPin);      // read input value and store it in val
  if (val != buttonState) {          // the button state has changed!
    if (val == LOW) {                // check if the button is pressed
      buttonPresses++;               // increment the buttonPresses variable
      Serial.print("Button has been pressed ");
      Serial.print(buttonPresses);
      Serial.println(" times");
      delay(500);

      if(buttonPresses <= 5)
        {
        digitalWrite(4, LOW);

      if(buttonPresses >= 5)
       {
        digitalWrite(4, HIGH);
       
          
       if(buttonPresses >= 10)
        {
          digitalWrite(4, LOW);
          buttonPresses = 0;
        }  
      }
     }
   }
}
  buttonState = val;                 // save the new state in our variable

}

Du must das umstellen, hier greift schon

if(buttonPresses >= 5)

Fang mit dem Größten an.

so?

if(buttonPresses >= 10)
{
digitalWrite(4, LOW);
buttonPresses = 0;

if(buttonPresses >= 5)
{
digitalWrite(4, HIGH);

if(buttonPresses <= 5)
{
digitalWrite(4, LOW);
}
}
}
}
}
buttonState = val; // save the new state in our variable

Bei der Umstellung oben geht nun das "if (buttonPresses >= 10)" Glied, dafür geht nun wieder das letzte if_Glied nicht.

Draht:
Bei der Umstellung oben geht nun das "(buttonPresses >= 10)" if-Glied, dafür geht nun wieder das letzte if_Glied nicht.

Ja, du musst auch die Klammern an der richtigen Stelle (nach der if-Abfrage) wieder schließen.
Du hast ja alle intern verschachtelt, das muss schief gehen.

Hatte ich mir auch gedacht, dass evtl. irgend etwas mit den Klammern nicht stimmt.

ich hab sie jetzt mal immer direkt nach der if Kondition wieder geschlossen. Ist aber offensichtlich immer noch nicht gut so:

/*
 *  Counting presses
 */

int switchPin = 2;              // switch is connected to pin 2
int val;                        // variable for reading the pin status
int buttonState;                // variable to hold the button state
int buttonPresses = 0;          // how many times the button has been pressed

void setup() {
  pinMode(switchPin, INPUT);    // Set the switch pin as input
  Serial.begin(9600);           // Set up serial communication at 9600bps
  buttonState = digitalRead(switchPin);   // read the initial state
}

void loop(){
  val = digitalRead(switchPin);      // read input value and store it in val
  if (val != buttonState) {          // the button state has changed!
    if (val == LOW) {                // check if the button is pressed
      buttonPresses++;               // increment the buttonPresses variable
      Serial.print("Button has been pressed ");
      Serial.print(buttonPresses);
      Serial.println(" times");
      delay(500);

      if(buttonPresses <= 5)
        {
        digitalWrite(4, LOW);
        }

      if(buttonPresses >= 5)
       {
        digitalWrite(4, HIGH);
       }
       
          
       if(buttonPresses >= 10)
        {
          digitalWrite(4, LOW);
          buttonPresses = 0;
        }
        }  
             
}
  buttonState = val;                 // save the new state in our variable

}

Ah, doch es geht jetzt :wink:

Danke für die Hilfe!

Draht:
Ah, doch es geht jetzt :wink:

Danke für die Hilfe!

Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)
      {
        digitalWrite(4, HIGH);
      }

      if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }

noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

Hi

Naja - nennen wir Es eine 'Unschönheit' - bei der 10 'biegt Er ja auch ab' - dann schaltet der Ausgang in schneller Folge halt wieder aus.
Ah-so ... getauscht ist der Wert dann ja wieder Null - auch ein Weg :slight_smile:

Nur Eine der Bedingungen greift so:

if (wert<=5){
//wert<=5
}else if (wert >=10){
//wert>=10
}else{
//wert 6...9
}

MfG

(deleted)

Das Ganze (dieser Thread) ist ein gutes Beispiel dafür, warum man sich if else Kaskaden einsparen sollte.

Und die Alternative liegt ja so nah!

Peter-CAD-HST:
Ich verwende zum Erstellen von Programmen den NotePad++ Editor.

Dieser zeigt die {} Abhängigkeiten an, wenn die { anklickt.

Das macht die IDE auch :wink: Man muss es nur auch nutzen und drauf achten.
Auch wenn man ctrl-T zum Formatieren einsetzt, merkt man, wenn da was nicht stimmt.

(deleted)

Hi

Gar nicht?
Die werden alle rechts angereiht - Die, Die aus dem Bild verschwunden sind. bekommst Du über den Pfeil-runter-Button rechts.

MfG

(deleted)

(deleted)

HotSystems:
Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)

{
        digitalWrite(4, HIGH);
      }

if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }




noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

HotSystems:
Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)

{
        digitalWrite(4, HIGH);
      }

if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }




noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

HotSystems:
Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)

{
        digitalWrite(4, HIGH);
      }

if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }




noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

HotSystems:
Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)

{
        digitalWrite(4, HIGH);
      }

if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }




noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

HotSystems:
Prima dass es jetzt funktioniert.

Allerdings sehe ich hier

     if (buttonPresses >= 5)

{
        digitalWrite(4, HIGH);
      }

if (buttonPresses >= 10)
      {
        digitalWrite(4, LOW);
        buttonPresses = 0;
      }




noch einen Fehler. Die beiden Abfragen solltest du besser tauschen.
Bei einem Wert größer 10 wird er immer schon in >=5 abbiegen.

Ok, habs getauscht. Funktioniert bestens :slight_smile:

postmaster-ino:
Hi

Naja - nennen wir Es eine 'Unschönheit' - bei der 10 'biegt Er ja auch ab' - dann schaltet der Ausgang in schneller Folge halt wieder aus.
Ah-so ... getauscht ist der Wert dann ja wieder Null - auch ein Weg :slight_smile:

Nur Eine der Bedingungen greift so:

if (wert<=5){

//wert<=5
}else if (wert >=10){
//wert>=10
}else{
//wert 6...9
}



MfG

Sorry, das verstehe ich nicht.

Peter-CAD-HST:
Moin

und ein Tip:

Ich verwende zum Erstellen von Programmen den NotePad++ Editor.

Dieser zeigt die {} Abhängigkeiten an, wenn die { anklickt.

Gruss Peter

und gesund bleiben...

Peter-CAD-HST:
Moin

und ein Tip:

Ich verwende zum Erstellen von Programmen den NotePad++ Editor.

Dieser zeigt die {} Abhängigkeiten an, wenn die { anklickt.

Gruss Peter

und gesund bleiben...

Ich bin ein MAC-er, für den gibt es meines Wissens NotePad++ nicht.