Buton care incrementează un contor (Arduino, Arduino Uno)

Jon Goe a intrebat.
#include <Adafruit_RGBLCDShield.h>
#include <utility/Adafruit_MCP23017.h>
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0,0);

}

void loop() {
  uint8_t buttons = lcd.readButtons();
  int a;  
  if (buttons) {

    lcd.clear();
    lcd.setCursor(0,0);

    if (buttons & BUTTON_UP) {
      a+= 1;
      lcd.setCursor(0,0);
      lcd.print(a);
    }
  }

Încerc să fac un contor care se incrementează de fiecare dată când este apăsat butonul UP. În prezent, tot ce face este să tipărească 1 de fiecare dată când butonul este apăsat. Orice ajutor ar fi binevenit! Mulțumesc!

Comentarii

  • Încercați „static int a = 0;” –  > Por Mikael Patel.
  • Are legătură cu int a;. Nu există un „punct de pornire” a ceea ce a este. – user23244
2 răspunsuri
cjs

Codul tău, simplificat, este:

void loop()
    int a;
    a += 1;
}

Problema aici este că, punând declarația variabilei contor în interiorul variabilei loop() ați făcut-o locală pentru acea funcție. De fiecare dată când loop() este apelată, o nouă variabilă a este creată, inițializată la zero și apoi incrementată.

Doriți să mutați declarația în afara funcției loop()creând o variabilă globală care va continua să existe și își va menține valoarea după ce loop() astfel încât valoarea să fie încă prezentă atunci când loop() este apelată din nou:

int a = 0;
void loop() {
    a += 1;
}

(Acest lucru ar putea fi realizat și cu o variabilă statică, dar probabil că depășește scopul acestei întrebări).

dannyf

tot ceea ce face este să tipărească 1 de fiecare dată când butonul este apăsat.

faceți ca variabila să fie statică sau globală.

Comentarii

  • Cineva care pune o astfel de întrebare probabil că nu știe ce este o variabilă „statică” sau „globală”; explicarea acestui lucru și oferirea unui exemplu este probabil ceea ce are nevoie. –  > Por cjs.