void setup() {
RCC->AHBENR |= (1 << 1); //1 -> GPIOB
GPIOB->MODER = 0x00005555;
GPIOB->PUPDR = 0xA0000000;
randomSeed(analogRead(0));
}
int value(int number) {
int val;
switch(number) {
case 0: val = 0x3F;
break;
case 1: val = 0x06;
break;
case 2: val = 0x5B;
break;
case 3: val = 0x4F;
break;
case 4: val = 0x66;
break;
case 5: val = 0x6D;
break;
case 6: val = 0xFD;
break;
case 7: val = 0x07;
break;
case 8: val = 0x7F;
break;
case 9: val = 0xEF;
break;
default: val = 0x00;
break;
}
return val;
}
void running() {
for (int a = 50; a <= 250; a = a + 50) {
for (int i = 0; i <= 9; i++) {
GPIOB->ODR = value(i);
delay(a);
}
}
}
void ending(int step) {
int wait = 300;
int row = 0;
do {
GPIOB->ODR = value(row);
delay(wait);
row++;
wait *= 1.2;
} while (row <= step);
}
int x = 0;
int zufall = 0;
void loop() {
if (GPIOB->IDR >= 1028) {
GPIOB->ODR = 0x00;
delay(100);
zufall = random(0, 10);
running();
ending(zufall);
GPIOB->ODR = value(zufall);
delay(500);
}
delay(10);
}