#include <TimerOne.h>
#define BUTTON 2
#define RESET_BUTTON 3 // Neuer Pin für den Reset-Button
#define LED1 8
#define LED2 9
#define LED3 10
#define LED4 11
volatile bool updateLEDs = false;
int ButtonCounter = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON, INPUT_PULLUP);
pinMode(RESET_BUTTON, INPUT_PULLUP); // Initialisiere den Reset-Button
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
Timer1.initialize(20000);
Timer1.attachInterrupt(timerISR);
attachInterrupt(digitalPinToInterrupt(BUTTON), buttonISR, RISING);
attachInterrupt(digitalPinToInterrupt(RESET_BUTTON), resetISR, FALLING); // Interrupt für Reset-Button
}
void buttonISR() {
Timer1.start();
}
void resetISR() {
ButtonCounter = 0; // Setze den Zähler zurück
updateLEDs = true; // Aktualisiere die LED-Anzeige
}
void loop() {
if(updateLEDs){
updateLEDs = false;
updateBinaryDisplay(ButtonCounter);
}
}
void updateBinaryDisplay(int Count){
digitalWrite(LED1, Count & 0x01);
digitalWrite(LED2, Count & 0x02);
digitalWrite(LED3, Count & 0x04);
digitalWrite(LED4, Count & 0x08);
}
void timerISR(){
Timer1.stop();
if(digitalRead(BUTTON) == LOW){
ButtonCounter = (ButtonCounter + 1) % 16;
updateLEDs = true;
Serial.println(ButtonCounter, BIN);
}
}