De code van sparky zou daar mooi passen. Ik heb even de vrijheid genomen de code iets op te schonen:
Let op, dit is allemaal in kladblok, dus grote kans dat er nog ergens een foutje in staat.
#define PIN_LED_1 10
#define PIN_LED_2 9
#define PIN_LED_3 7
#define PIN_LED_4 8
#define BUTTON_PIN 6
const unsigned char LedLookup[7] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x0E};
void setup() {
pinMode(PIN_LED_1, OUTPUT);
pinMode(PIN_LED_2, OUTPUT);
pinMode(PIN_LED_3, OUTPUT);
pinMode(PIN_LED_4, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
randomSeed(analogRead(0));
}
void waitForRelease() {
int32_t buttonState = digitalRead(BUTTON_PIN);
while (buttonState) {
buttonState = digitalRead(BUTTON_PIN);
}
}
void loop() {
int32_t buttonState = digitalRead(BUTTON_PIN);
if (buttonState) {
rollDice();
waitForRelease();
delay(5000);
} else {
toggleLeds();
}
delay(100);
}
void toggleLeds() {
digitalWrite(PIN_LED_1, !digitalRead(PIN_LED_1));
digitalWrite(PIN_LED_2, !digitalRead(PIN_LED_2));
digitalWrite(PIN_LED_3, !digitalRead(PIN_LED_3));
digitalWrite(PIN_LED_4, !digitalRead(PIN_LED_4));
}
void displayNumber(unsigned char number) {
digitalWrite(PIN_LED_1, LedLookup[number] & 0x01); // center dot
digitalWrite(PIN_LED_2, LedLookup[number] & 0x02); // left top and right bottom
digitalWrite(PIN_LED_3, LedLookup[number] & 0x04); // left bottom and right top
digitalWrite(PIN_LED_4, LedLookup[number] & 0x08); // center left and right
}
void rollDice() {
uint8_t outcome = random(1, 7);
displayNumber(outcome);
}