2017-10-28 21:14:30 +02:00
|
|
|
// Conflicts with std c++ headers
|
|
|
|
#undef min
|
|
|
|
#undef max
|
|
|
|
|
|
|
|
#include "debounce.h"
|
|
|
|
#include "lcg_rng.h"
|
|
|
|
#include "segment.h"
|
|
|
|
#include "uniform_int_dist.h"
|
|
|
|
|
|
|
|
|
2017-11-17 17:48:26 +01:00
|
|
|
#define BUTTON_PIN 1
|
|
|
|
#define DISPLAY_ENABLE 3
|
2017-10-28 21:14:30 +02:00
|
|
|
|
|
|
|
lcg_rng rng;
|
|
|
|
std::uniform_int_distribution<uint8_t> distribution(1,16);
|
|
|
|
|
|
|
|
SegmentDisplay<4, 2, 0> display;
|
|
|
|
|
2017-11-17 17:48:26 +01:00
|
|
|
#define NUM_SLOWDOWN 12
|
|
|
|
const uint16_t PROGMEM SLOWDOWN[NUM_SLOWDOWN] = {
|
|
|
|
35, 32,
|
|
|
|
20, 64,
|
|
|
|
8, 125,
|
|
|
|
4, 250,
|
|
|
|
2, 500,
|
|
|
|
2, 1000
|
|
|
|
};
|
|
|
|
|
2017-10-28 21:14:30 +02:00
|
|
|
void setup() {
|
2017-11-17 17:48:26 +01:00
|
|
|
pinMode(BUTTON_PIN, INPUT_PULLUP);
|
|
|
|
|
|
|
|
pinMode(DISPLAY_ENABLE, OUTPUT);
|
|
|
|
digitalWrite(DISPLAY_ENABLE, 0);
|
|
|
|
|
|
|
|
display.setDash();
|
|
|
|
display.write();
|
2017-10-28 21:14:30 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void loop() {
|
2017-11-17 17:48:26 +01:00
|
|
|
if(digitalRead(PIN1)) {
|
|
|
|
rng();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t num;
|
|
|
|
|
|
|
|
for(size_t i = 0; i < NUM_SLOWDOWN; i += 2) {
|
|
|
|
for(size_t j = 0; j < pgm_read_word_near(SLOWDOWN + i); ++j) {
|
|
|
|
num = distribution(rng);
|
|
|
|
display.set(num);
|
|
|
|
display.write();
|
|
|
|
delay(pgm_read_word_near(SLOWDOWN + i + 1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for(uint8_t i = 0; i < 2; ++i) {
|
|
|
|
display.setOff();
|
|
|
|
display.write();
|
|
|
|
delay(250);
|
|
|
|
display.set(num);
|
2017-10-28 21:14:30 +02:00
|
|
|
display.write();
|
2017-11-17 17:48:26 +01:00
|
|
|
delay(250);
|
2017-10-28 21:14:30 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|