#include "SevSeg.h"#define D100 3#define D20 4#define D12 8#define D8 7#define D6 6#define D4 5#define LEDA 13#define LEDB 12#define LEDC 11#define LEDBIG 10#define LEDLITTLE 9void scramble();SevSeg sevseg;bool started;int counter;int pressed;
void setup() { pinMode(D100,INPUT_PULLUP); pinMode(D20,INPUT_PULLUP); pinMode(D12,INPUT_PULLUP); pinMode(D8,INPUT_PULLUP); pinMode(D6,INPUT_PULLUP); pinMode(D4,INPUT_PULLUP); pinMode(LEDA,OUTPUT); pinMode(LEDB,OUTPUT); pinMode(LEDC,OUTPUT); pinMode(LEDBIG,OUTPUT); pinMode(LEDLITTLE,OUTPUT); byte numDigits = 2; byte digitPins[] = {15 , 14}; byte segmentPins[] = {17, 16, 2, 1, 0, 18, 19}; bool resistorsOnSegments = false; // 'false' means resistors are on digit pins byte hardwareConfig = COMMON_ANODE; // See README.md for options bool updateWithDelays = false; // Default 'false' is Recommended bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros bool disableDecPoint = true; // Use 'true' if your decimal point doesn't exist or isn't connected sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint); sevseg.setBrightness(100);}
void loop() {
if(digitalRead(D100) == LOW){ started = true; digitalWrite(LEDA,HIGH); digitalWrite(LEDB,LOW); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,HIGH); scramble(); int roll = random(0,100); if(roll > 0) sevseg.setNumber(roll, 0); else sevseg.setNumber(roll, 1); //display '00' sevseg.refreshDisplay(); } else if(digitalRead(D20) == LOW){ started = true; digitalWrite(LEDA,LOW); digitalWrite(LEDB,HIGH); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,HIGH); scramble(); sevseg.setNumber(random(1,21), 0); sevseg.refreshDisplay(); } else if(digitalRead(D12) == LOW){ started = true; digitalWrite(LEDA,LOW); digitalWrite(LEDB,LOW); digitalWrite(LEDC,HIGH); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,HIGH); scramble(); sevseg.setNumber(random(1,13), 0); sevseg.refreshDisplay(); } else if(digitalRead(D8) == LOW){ started = true; digitalWrite(LEDA,HIGH); digitalWrite(LEDB,LOW); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,HIGH); digitalWrite(LEDLITTLE,LOW); scramble(); sevseg.setNumber(random(1,9), 0); sevseg.refreshDisplay(); } else if(digitalRead(D6) == LOW){ started = true; digitalWrite(LEDA,LOW); digitalWrite(LEDB,HIGH); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,HIGH); digitalWrite(LEDLITTLE,LOW); scramble(); sevseg.setNumber(random(1,7), 0); sevseg.refreshDisplay(); } else if(digitalRead(D4) == LOW){ started = true; digitalWrite(LEDA,LOW); digitalWrite(LEDB,LOW); digitalWrite(LEDC,HIGH); digitalWrite(LEDBIG,HIGH); digitalWrite(LEDLITTLE,LOW); scramble(); sevseg.setNumber(random(1,5), 0); sevseg.refreshDisplay(); } sevseg.refreshDisplay(); // Must run repeatedly
//turn on animation if(started == false){ if (counter < 5000){ digitalWrite(LEDA,HIGH); digitalWrite(LEDB,LOW); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,LOW); counter++; } if (counter > 4999 && counter < 10000){ digitalWrite(LEDA,LOW); digitalWrite(LEDB,HIGH); digitalWrite(LEDC,LOW); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,LOW); counter++; } if (counter > 9999 && counter < 15000){ digitalWrite(LEDA,LOW); digitalWrite(LEDB,LOW); digitalWrite(LEDC,HIGH); digitalWrite(LEDBIG,LOW); digitalWrite(LEDLITTLE,LOW); counter++; } if (counter > 14999) counter = 0; }}
void scramble(){ //scramble the 7 segments to animate dice roll randomSeed(micros()); int dice = random(-2000,4000) + 4000; for(int i=0;i<dice;i++){ sevseg.setNumber(random(0,100), 1); sevseg.refreshDisplay(); }// }}