Arduino zähler Sketch mit leds?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Das ist jetzt mal das, was ich auf die Schnelle hin bekommen habe. Nicht besonders schön aber es tut erstmal seinen Job. Noch offen ist jetzt im Code, was passiert, wenn du öfter als 8 mal gedrückt hast. Außerdem sind die 100ms delay in Zeile 26 erst einmal provisorisch, da es beim Knop passieren kann, das bei einmal drücken, das ganze mehrmals registriert wird (bouncing). Wie du das beheben willst, hängt davon ab, was du mit dem Code machen willst.

Wenn du etwas nicht ganz verstehst oder noch Fragen hast, kannst du diese mir gerne stellen.

int leds[8] = {13, 12, 11, 10, 9, 8, 7, 6};
int button = 2;


bool oldButtonState = HIGH;
bool newButtonState;
int count =0;

void setup() {
  pinMode(button, INPUT_PULLUP);


  for (int i = 0; i < 8; i++) {
    pinMode(leds[i], OUTPUT);
  }
}


void loop() {
  newButtonState = digitalRead(button);
  if (oldButtonState == HIGH && newButtonState == LOW) {
    count++;
    oldButtonState = newButtonState;


    for (int i = 0; i < count; i++) {
      digitalWrite(leds[i], HIGH);
    }


    delay(100);
  } else if (oldButtonState == LOW && newButtonState == HIGH) {
    oldButtonState = newButtonState;
  }
}
Woher ich das weiß:Hobby – Weil ich mich schon seit Jahren mit solchen Dingen bafasse

simbi172 
Beitragsersteller
 15.01.2022, 23:16

ich hab noch eine frage :

wo wird die Anzahl an drücken ausgelesen ?

aber danke für den Sketch

0
MaxLeSchlau  15.01.2022, 23:18
@simbi172

Das ist kein Problem, die Frage beantworte ich dir gerne.

In der Variable "count" wird gespeichert, wie oft der Knopf gedrückt worden ist. Am Anfang ist diese auf 0, da logischer weise der Knopf noch nicht gedrückt worden ist. Sobald der Knopf runter gedrückt wird, wird die Variabel um 1 erhöt.

LG Max

0
simbi172 
Beitragsersteller
 15.01.2022, 23:30
@MaxLeSchlau

ich weiß das das jetzt zwar komplett fasch ist aber ich will das wen der Taster zwei mal gedrückt ist alle leds leuchten ich hab dann diese Zeilen hinein geschrieben :

if (count() == 2){

   digitalWrite ( leds [i],HIGH);

0
simbi172 
Beitragsersteller
 15.01.2022, 23:32
@simbi172

aber es zeigt als Fehler : count cannot be used as a function

0
MaxLeSchlau  15.01.2022, 23:39
@simbi172

Unten habe ich jetzt mal den neuen Loop. Der Rest vom Code bleibt gleich, du musst also den Loop ersetzen.

Nach Variablen, wie zum Beispiel count, dürfen nie Klammern kommen. Diese kommen nur nach Funktionen (wie z.B. setup() oder loop()).

Du brauchst auch noch eine for-Schleife, die alle LEDs in dem Array "leds" durchgeht und so jede an schaltet.

Wenn du etwas im Code nicht verstehst oder auch sonst noch andere Fragen hast, helfe ich dir gerne, sei nicht schüchtern mich zu fragen ;)

void loop() {
  newButtonState = digitalRead(button);
  if (oldButtonState == HIGH && newButtonState == LOW) {
    count++;
    oldButtonState = newButtonState;


    // das hier streiche ich mal raus
    // damit funktioniert das "zählen" von den LEDs nicht mehr
    // for (int i = 0; i < count; i++) {
    //   digitalWrite(leds[i], HIGH);
    // }


    // das hier ist neu
    if (count == 2) {
      for (int i = 0; i < 8; i++) {
        digitalWrite(leds[i], HIGH);
      }
    }


    delay(100);
  } else if (oldButtonState == LOW && newButtonState == HIGH) {
    oldButtonState = newButtonState;
  }
}
0
simbi172 
Beitragsersteller
 15.01.2022, 23:58
@MaxLeSchlau

int led1=13;

int button = 2;

bool oldButtonState = HIGH;

bool newButtonState;

int count =0;

void setup() {

 pinMode(button, INPUT_PULLUP);

 pinMode (led1,OUTPUT);

  pinMode(led1, OUTPUT);

  

}

void loop() {

 newButtonState = digitalRead(button);

 if (oldButtonState == HIGH && newButtonState == LOW) {

  count++;

  oldButtonState = newButtonState;

  // das hier streiche ich mal raus

  // damit funktioniert das "zählen" von den LEDs nicht mehr

  // for (int i = 0; i < count; i++) {

  //  digitalWrite(leds[i], HIGH);

  // }

  // das hier ist neu

  if (count == 2) {

   for (int i = 0; i < 8; i++) {

    digitalWrite(led1, HIGH);

   }

   if (count == 3) {

   for (int i = 0; i < 8; i++) {

    digitalWrite(led1, LOW);

   }

  }

  delay(100);

 } else if (oldButtonState == LOW && newButtonState == HIGH) {

  oldButtonState = newButtonState;

 }

}

}

0
simbi172 
Beitragsersteller
 15.01.2022, 23:59
@simbi172

ich hab den code jetzt mal umgeschrieben das man mit dem Taster die led an und Ausschalten kann

0
MaxLeSchlau  16.01.2022, 00:04
@simbi172

Dadurch, dass du nur mit einer LED arbeitest, fallen die for-Schleifen weg.

Außerdem hast du bei den Klammern etwas durcheinander gebracht. So passt es jetzt aber.

Und einen kleinen Tipp fürs nächste mal: Du kannst bei der Formatierung bei gutefrage.net auswählen, dass es sich um "Quelltext" handelt. Damit ist das ganz übersichtlicher.

LG Max

int led1 = 13;
int button = 2;

bool oldButtonState = HIGH;
bool newButtonState;
int count = 0;

void setup() {
  pinMode(button, INPUT_PULLUP);
  pinMode(led1, OUTPUT);
}

void loop() {
  newButtonState = digitalRead(button);
  if (oldButtonState == HIGH && newButtonState == LOW) {
    count++;
    oldButtonState = newButtonState;

    if (count == 2) {
      digitalWrite(led1, HIGH);
    }
    if (count == 3) {
      digitalWrite(led1, LOW);
    }

    delay(100);
  } else if (oldButtonState == LOW && newButtonState == HIGH) {
    oldButtonState = newButtonState;
  }
}
0