const int BUTTON = A0;
const int LED = 13;
boolean lastButton = LOW;
boolean currentButton = LOW;
boolean ledOn = false;
int pins[8] = {2,3,4,5,6,7,8,9};
int digs[10] = {B111111,B110,B1011011,B1001111,B1100110,
B1101101,B1111101,B111,B1111111,B1101111};
int seg = 0;
long lastTime = 0;
long onTime = 70;
int rollTime = onTime*6*3;
int rollCount = 18;
void setup() {
// put your setup code here, to run once:
pinMode (BUTTON, INPUT);
for(int i = 0; i < 8; i++) {
pinMode(pins[i], OUTPUT);
}
pinMode(LED, OUTPUT);
Serial.begin(9600);
//rollTime = onTime*6*3;
}
void loop() {
// put your main code here, to run repeatedly:
currentButton = debounce(lastButton); // Read debounced state
if (lastButton == LOW && currentButton == HIGH) // If it was pressed…
{
ledOn = HIGH; // Toggle the LED value
clear();
rollCount = 18;
//lastTime = millis();
randomSeed(millis());
}
lastButton = currentButton;
if(ledOn == HIGH) {
nextSeg();
rollCount--;
if (rollCount == 0) { // if (millis() - lastTime > rollTime) {
ledOn = LOW;
putDigit(random(1, 6));
}
}
digitalWrite(LED, ledOn);
}
void clear() {
for (int i = 0; i < 8; i++) {
digitalWrite(pins[i], LOW);
}
}
void putDigit(int digit) {
int mask = 1;
for (int i = 0; i < 7; i++) {
int state = digs[digit] & mask;
digitalWrite(pins[i], state);
mask <<= 1;
}
}
void nextSeg() {
digitalWrite(pins[seg], HIGH);
delay(onTime);
digitalWrite(pins[seg], LOW);
seg++;
seg %= 6;
}
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTTON); // Read the button state
if (last != current) // If it's different…
{
delay(5); // Wait 5ms
current = digitalRead(BUTTON); // Read it again
}
return current; // Return the current value
}