#include <TM1637Display.h>
// Definizione dei pin per i pulsanti
const int buttonPins[6] = {2, 3, 4, 5, 6, 7};
// Definizione dei pin per il display TM1637
const int CLK = 8;
const int DIO = 9;
// Definizione del pin per il buzzer
const int buzzerPin = 10;
TM1637Display display(CLK, DIO);
// Range di numeri per ciascun pulsante
const int ranges[6][2] = {
{1, 2},
{2, 4},
{4, 8},
{7, 12},
{11, 20},
{21, 30}
};
// Melodia: Sigla della Formula 1 (semplificata)
const int melody[] = {
659, 622, 659, 622, 659, 494, 587, 523, 440, // Note iniziali
};
const int noteDurations[] = {
8, 8, 8, 8, 8, 8, 8, 8, 8, // Durata delle note iniziali
};
void setup() {
// Imposta i pin dei pulsanti come input
for (int i = 0; i < 6; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Inizializza il display
display.setBrightness(0x0f); // Imposta la luminosità al massimo
display.clear();
// Imposta il pin del buzzer come output
pinMode(buzzerPin, OUTPUT);
}
void loop() {
static int lastButtonPressed = -1;
for (int i = 0; i < 6; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
int buttonNumber = i + 1;
int min = ranges[i][0];
int max = ranges[i][1];
int extractedNumber = random(min, max + 1);
// Effetto di rotazione dei numeri e suono del buzzer
for (int j = 0; j < 30; j++) { // Aumenta il numero di iterazioni a 30 per 1,5 secondi di rotazione
int displayNumber = random(min, max + 1);
display.showNumberDecEx((buttonNumber * 1000) + displayNumber, 0b00001000, true);
if (j % 2 == 0) { // Suona una nota ogni 100 ms (una volta ogni due iterazioni)
tone(buzzerPin, 1000, 50); // Suona una nota a 1000 Hz per 50 ms
}
delay(50); // Ritardo di 50 ms tra un numero e l'altro
}
// Mostra il numero del pulsante e il numero estratto sul display
display.showNumberDecEx((buttonNumber * 1000) + extractedNumber, 0b00001000, true);
// Suona la melodia della sigla della Formula 1
for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
int noteDuration = 1000 / noteDurations[thisNote];
tone(buzzerPin, melody[thisNote], noteDuration);
delay(noteDuration * 1.30); // Attendi che la nota finisca di suonare
}
// Memorizza l'ultimo pulsante premuto
lastButtonPressed = i;
// Attendi che il pulsante venga rilasciato
while (digitalRead(buttonPins[i]) == LOW);
delay(200); // Debounce
}
}
}