Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Arduino Dice :)
- This example shows how to simulate throwing a dice with 6 LEDs.
- The circuit:
- * 6 LEDs attached to consecutive digital pins (with 220 Ohm resistors)
- * Button switch connected to digital pin (see circuit on https://www.arduino.cc/en/Tutorial/Button)
- Created 5 Jan 2017
- By Esther van der Stappen
- This example code is in the public domain. Credit: https://create.arduino.cc/projecthub/EvdS/led-dice-885cf1?ref=similar&ref_id=21382&offset=4
- */
- // set to 1 if we're debugging
- #define DEBUG 0
- // 6 consecutive digital pins for the LEDs
- int first = 2;
- int second = 3;
- int third = 4;
- int fourth = 5;
- int fifth = 6;
- int sixth = 7;
- // pin for the button switch
- int button = 12;
- // value to check state of button switch
- int pressed = 0;
- void setup() {
- // set all LED pins to OUTPUT
- for (int i=first; i<=sixth; i++) {
- pinMode(i, OUTPUT);
- }
- // set buttin pin to INPUT
- pinMode(button, INPUT);
- // initialize random seed by noise from analog pin 0 (should be unconnected)
- randomSeed(analogRead(0));
- // if we're debugging, connect to serial
- #ifdef DEBUG
- Serial.begin(9600);
- #endif
- }
- void buildUpTension() {
- // light LEDs from left to right and back to build up tension
- // while waiting for the dice to be thrown
- // left to right
- for (int i=first; i<=sixth; i++) {
- if (i!=first) {
- digitalWrite(i-1, LOW);
- }
- digitalWrite(i, HIGH);
- delay(100);
- }
- // right to left
- for (int i=sixth; i>=first; i--) {
- if (i!=sixth) {
- digitalWrite(i+1, LOW);
- }
- digitalWrite(i, HIGH);
- delay(100);
- }
- }
- void showNumber(int number) {
- digitalWrite(first, HIGH);
- if (number >= 2) {
- digitalWrite(second, HIGH);
- }
- if (number >= 3) {
- digitalWrite(third, HIGH);
- }
- if (number >= 4) {
- digitalWrite(fourth, HIGH);
- }
- if (number >= 5) {
- digitalWrite(fifth, HIGH);
- }
- if (number == 6) {
- digitalWrite(sixth, HIGH);
- }
- }
- int throwDice() {
- // get a random number in the range [1,6]
- int randNumber = random(1,7);
- #ifdef DEBUG
- Serial.println(randNumber);
- #endif
- return randNumber;
- }
- void setAllLEDs(int value) {
- for (int i=first; i<=sixth; i++) {
- digitalWrite(i, value);
- }
- }
- void loop() {
- // if button is pressed - throw the dice
- pressed = digitalRead(button);
- if (pressed == HIGH) {
- // remove previous number
- setAllLEDs(LOW);
- buildUpTension();
- int thrownNumber = throwDice();
- showNumber(thrownNumber);
- }
- }
Add Comment
Please, Sign In to add comment