diff --git a/arduino/msaqsg/ch03/DiceGame/DiceGame.ino b/arduino/msaqsg/ch03/DiceGame/DiceGame.ino new file mode 100644 index 0000000..e2ebcbe --- /dev/null +++ b/arduino/msaqsg/ch03/DiceGame/DiceGame.ino @@ -0,0 +1,88 @@ +// vim:filetype=arduino +#include + +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; +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 < 3; i++) { + outputResult(7); + delay(500); + outputResult(0); + delay(500); + } +} + +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(); +} diff --git a/arduino/msaqsg/ch03/DiceGame/Makefile b/arduino/msaqsg/ch03/DiceGame/Makefile new file mode 120000 index 0000000..bf3dbf5 --- /dev/null +++ b/arduino/msaqsg/ch03/DiceGame/Makefile @@ -0,0 +1 @@ +../../../arduino.mk \ No newline at end of file