// Roulettewiel Europese indeling
// c(2017) Th.M. Hupkens. Getest met een Arduino nano
#define Knop 12 // De drukknop
#define Klik A5
#define NulLed 11
int kwart = A1; // houdt bij in welke helft het lampje brandt
int led; // Houdt bij welke led het laatst is aangegaan
bool linksOm = true;
void setup() {
for (int i = 2; i <= 11; i++) pinMode(i, OUTPUT);
pinMode(Knop, INPUT_PULLUP);
for (int a = A1; a <= A5; a++) pinMode(a, OUTPUT); // LOW = AAN
for (int Aantal = 1; Aantal < 4; Aantal++)
for (int i = 2; i <= 10; i++) { // Startup scherm EN test van de ledjes
digitalWrite(i, HIGH);
delay(200 - Aantal * 40 - (i - 2) * 5);
digitalWrite(i, LOW);
}
randomSeed(analogRead(A0)); // initialiseer de random number generator
led = random(2, 11); kwart = random(A1, A5); // led van 1 t/m 10; kwart van A1 t/m A4
for (int a = A1; a <= A4; a++) digitalWrite(a, a != kwart); digitalWrite(led, HIGH);
}
void loop() {
while (digitalRead(Knop)); // Drukknop (maakschakelaar)
unsigned long nu = millis();
while (!digitalRead(Knop));
unsigned long tijd = millis() - nu;
int Stappen = 37 + random(18); // voorlopig
if (tijd > 500) Stappen *= 2; // als je de knop meer dan een halve seconde indrukt dan heb je een lange rol
int Stap = 1;
while (Stap < Stappen) {
Stap++;
digitalWrite(led, LOW);
if (linksOm) {
led++;
if (led > 10) {
if (kwart == A4) {
if (led > 11) {
kwart = A1;
led = 2;
}
}
else {
led = 2;
kwart++;
}
}
}
else { // als NIET linksom
led--;
if (led < 2) {
if (kwart == A1) {
led = NulLed;
kwart = A4;
}
else {
led = 10;
kwart--;
}
}
}
for (int a = A1; a <= A4; a++) digitalWrite(a, a != kwart); // Zet hoog als a niet gelijk is aan kwart
digitalWrite(led, HIGH);
digitalWrite(Klik, HIGH); delayMicroseconds(40); digitalWrite(Klik, LOW);
unsigned int delaytijd = 40 + Stap * 5;
if (tijd > 500) delaytijd /= 2;
delay(delaytijd);
}
linksOm = !linksOm;
}
Rien ne va plus!