#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define OLED_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int LED1 = 2;
int PULSANTE1 = 3;
float miglioriTempi[5] = {9999, 9999, 9999, 9999, 9999};
float peggioriTempi[5] = {0, 0, 0, 0, 0};
void setup() {
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(PULSANTE1, INPUT_PULLUP);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDRESS);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
}
void loop() {
display.clearDisplay();
Serial.println("\n\n\nPremi il pulsante per iniziare il gioco!");
while (digitalRead(PULSANTE1) == HIGH) {}
Serial.println("\n\n\nPronti!");
delay(1000);
Serial.println("Partenza!");
delay(1000);
delay(random(5000)); // 5 secondi
Serial.println("Via!");
float Tempo = millis();
digitalWrite(LED1, HIGH);
while (digitalRead(PULSANTE1) == HIGH) {}
digitalWrite(LED1, LOW);
Serial.print("\nIl tuo tempo: ");
Tempo = (millis() - Tempo) / 1000.0; // Tempo di reazione in secondi
Serial.println(Tempo, 2);
aggiornaTempi(Tempo);
mostraRisultati("Migliori tempi:", miglioriTempi);
mostraRisultati("Peggiori tempi:", peggioriTempi);
delay(2000);
}
void aggiornaTempi(float nuovoTempo) {
for (int i = 0; i < 5; i++) {
if (nuovoTempo < miglioriTempi[i]) {
spostaArray(miglioriTempi, i, nuovoTempo);
break;
}
}
for (int i = 0; i < 5; i++) {
if (nuovoTempo > peggioriTempi[i]) {
spostaArray(peggioriTempi, i, nuovoTempo);
break;
}
}
}
void spostaArray(float array[], int posizione, float valore) {
for (int j = 4; j > posizione; j--) {
array[j] = array[j - 1];
}
array[posizione] = valore;
}
void mostraRisultati(const char *etichetta, float tempi[]) {
Serial.println(etichetta);
for (int i = 0; i < 5; i++) {
Serial.print(i + 1);
Serial.print(": ");
Serial.print(tempi[i], 2);
Serial.println("s");
}
display.setCursor(0, 0);
display.println(etichetta);
for (int i = 0; i < 5; i++) {
display.print(i + 1);
display.print(": ");
display.print(tempi[i], 2);
display.println("s");
}
display.display();
}Loading
ssd1306
ssd1306