typedef enum {
LED_DISPLAY = 500,
PUSH_BUTTON_DEBOUNCING = 50
} Delays;
typedef enum {
LED0 = 2,
LED1 = 3,
LED2 = 4,
LED3 = 5
} Leds;
const int LEDS_SIZE = 4;
const int LEDs[LEDS_SIZE] = { LED0, LED1, LED2, LED3 };
typedef enum {
COUNT_PB = 8,
FLASH_PB = 9
} Push_Buttons;
unsigned char counter = 0;
void initLeds() {
for (int i = 0; i < LEDS_SIZE; i++) {
pinMode(LEDs[i], OUTPUT);
}
}
void initPushButtons() {
pinMode(COUNT_PB, INPUT_PULLUP);
pinMode(FLASH_PB, INPUT_PULLUP);
}
void countLedsUp() {
/**
Use for-loop instead of:
digitalWrite(LED0, counter & 0b00000001);
digitalWrite(LED1, counter & 0b00000010);
digitalWrite(LED2, counter & 0b00000100);
digitalWrite(LED3, counter & 0b00001000);
*/
for (int i = 0; i < LEDS_SIZE; i++) {
digitalWrite(LEDs[i], counter & (1 << i));
}
delay(LED_DISPLAY);
counter++;
if (counter == 16)
counter = 0;
}
void flashLeds() {
int ledCurrentState;
for (int i = 0; i < LEDS_SIZE; i++) {
ledCurrentState = digitalRead(LEDs[i]);
digitalWrite(LEDs[i], !ledCurrentState);
}
delay(LED_DISPLAY);
for (int i = 0; i < LEDS_SIZE; i++) {
ledCurrentState = digitalRead(LEDs[i]);
digitalWrite(LEDs[i], !ledCurrentState);
}
delay(LED_DISPLAY);
}
void setup() {
initLeds();
initPushButtons();
Serial.begin(9600);
}
void loop() {
int countUpPushButtonStatus = digitalRead(COUNT_PB);
int flashPushButtonStatus = digitalRead(FLASH_PB);
if (countUpPushButtonStatus == LOW) {
Serial.println("Count push-button is pressed ...!");
countLedsUp();
} else if (flashPushButtonStatus == LOW) {
Serial.println("Flash push-button is pressed ...!");
flashLeds();
}
delay(PUSH_BUTTON_DEBOUNCING); // debouncing
}