95 lines
2.3 KiB
C++
95 lines
2.3 KiB
C++
// vim:filetype=arduino
|
|
#include <Bounce.h>
|
|
|
|
const unsigned int LED_BIT0 = 10;
|
|
const unsigned int LED_BIT1 = 11;
|
|
const unsigned int LED_BIT2 = 12;
|
|
const unsigned int START_BUTTON_PIN = 5;
|
|
const unsigned int GUESS_BUTTON_PIN = 7;
|
|
const unsigned int BAUD_RATE = 9600;
|
|
const unsigned int DEBOUNCE_DELAY = 20;
|
|
const unsigned int HOORAY_FLASHES = 10;
|
|
const unsigned int HOORAY_FLASH_BATCHES = 3;
|
|
const unsigned int HOORAY_FLASH_BATCH_PAUSE = 200;
|
|
const unsigned int HOORAY_FLASH_DURATION = 50;
|
|
Bounce startButton = Bounce();
|
|
Bounce guessButton = Bounce();
|
|
int guess = 0;
|
|
|
|
void outputResult(const long result) {
|
|
digitalWrite(LED_BIT0, result & B001);
|
|
digitalWrite(LED_BIT1, result & B010);
|
|
digitalWrite(LED_BIT2, result & B100);
|
|
}
|
|
|
|
void hooray() {
|
|
for (unsigned int i = 0; i < HOORAY_FLASH_BATCHES; i++) {
|
|
for (unsigned int i = 0; i < HOORAY_FLASHES; i++) {
|
|
outputResult(7);
|
|
delay(HOORAY_FLASH_DURATION);
|
|
outputResult(0);
|
|
delay(HOORAY_FLASH_DURATION);
|
|
}
|
|
delay(HOORAY_FLASH_BATCH_PAUSE);
|
|
}
|
|
}
|
|
|
|
void handleGuessButton() {
|
|
if (!guessButton.update()) {
|
|
return;
|
|
}
|
|
|
|
if (guessButton.read() == HIGH) {
|
|
guess = (guess % 6) + 1;
|
|
outputResult(guess);
|
|
Serial.print("Guess: ");
|
|
Serial.println(guess);
|
|
}
|
|
}
|
|
|
|
void handleStartButton() {
|
|
if (!startButton.update()) {
|
|
return;
|
|
}
|
|
|
|
if (startButton.read() == HIGH) {
|
|
const int result = random(1, 7);
|
|
outputResult(result);
|
|
Serial.print("Result: ");
|
|
Serial.println(result);
|
|
|
|
if (guess > 0) {
|
|
if (result == guess) {
|
|
Serial.println("You win!");
|
|
hooray();
|
|
} else {
|
|
Serial.println("You lose!");
|
|
}
|
|
}
|
|
|
|
delay(2000);
|
|
guess = 0;
|
|
}
|
|
}
|
|
|
|
void setup() {
|
|
pinMode(LED_BIT0, OUTPUT);
|
|
pinMode(LED_BIT1, OUTPUT);
|
|
pinMode(LED_BIT2, OUTPUT);
|
|
pinMode(START_BUTTON_PIN, INPUT);
|
|
pinMode(GUESS_BUTTON_PIN, INPUT);
|
|
randomSeed(analogRead(A0));
|
|
Serial.begin(BAUD_RATE);
|
|
|
|
startButton.attach(START_BUTTON_PIN);
|
|
startButton.interval(DEBOUNCE_DELAY);
|
|
|
|
guessButton.attach(GUESS_BUTTON_PIN);
|
|
guessButton.interval(DEBOUNCE_DELAY);
|
|
}
|
|
|
|
void loop() {
|
|
handleGuessButton();
|
|
handleStartButton();
|
|
}
|