ich habe mal einen Sketch geschrieben, schau ihn dir mal an, ob er das macht was du möchtest.
/*
*© Ardubu Mai 2018
*Led blinkt so oft wie ein Taster gedrückt wurde und macht dann 1 sek. Pause
*Taster wird zwischen GND und pin_x angeschlossen
*interner Pullup Widerstand aktiviert
*der counter zählt von 0 bis 255 jeden Tastendruck
*am seriellen Monitor sieht man wie oft der Taster gedrückt wurde
*/
#define DEBUG //Nur zur Fehlersuche aktivieren
#define tasterPin 2//Taster an D2 und GND
const uint8_t ledPin = 13; // LED an D13
uint8_t counter; //Zählt wie oft die Taste gedrückt wurde
void setup() {
#ifdef DEBUG
Serial.begin(115200);
Serial.println("Setup");
#endif
pinMode(tasterPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
tasterAbfrage();
if(counter) blink_anz(counter,ledPin);
}//Ende loop
void tasterAbfrage()
{
const uint8_t debounce_delay = 10; //Entprellzeit für den Taster in ms
static bool tasterState, tasterState_alt;// Variablendeklaration (lokal)
static uint32_t debounce_time;
if (millis()-debounce_time>debounce_delay)tasterState = digitalRead(tasterPin); //einlesen des Tasters
if (tasterState != tasterState_alt) // bei Pegelwechsel
{
debounce_time=millis();
#ifdef DEBUG
Serial.println(counter);
#endif
if(!tasterState)//wenn Taster gedrückt
counter++;
tasterState_alt = tasterState; // state aktualisieren
}
}
void blink_anz(const uint8_t anz,const uint8_t ledPin)
{
static uint32_t previousMillis_led;
static uint32_t millisalt_led;
static bool ledState;
static uint8_t count;
const uint16_t interval = 300;
if(millis()-millisalt_led>1000)
{
if(millis() - previousMillis_led > interval)
{
previousMillis_led = millis();
if (!ledState) ledState = HIGH;
else{
ledState = LOW;
count++;
if(count>=anz){count=0;millisalt_led=millis();}
}
digitalWrite(ledPin, ledState);
}
}
}