Per rilevare il tempo durante il quale un bottone è stato premuto su un Arduino, puoi utilizzare il seguente codice. Questo codice rileva il tempo in millisecondi tra la pressione e il rilascio del bottone. Collega il bottone tra un pin digitale e il ground. Assicurati di utilizzare una resistenza di pull-up interna o esterna per mantenere il pin in uno stato alto quando il bottone non è premuto. cpp Copia codice const int buttonPin = 2; // Pin a cui è collegato il bottone int buttonState = 0; // Variabile per leggere lo stato del bottone unsigned long pressTime = 0; // Tempo di quando il bottone è stato premuto unsigned long releaseTime = 0; // Tempo di quando il bottone è stato rilasciato bool buttonPressed = false; // Stato del bottone (premuto o no) void setup() { // Imposta il pin del bottone come input con resistenza di pull-up interna pinMode(buttonPin, INPUT_PULLUP); // Inizializza la comunicazione seriale Serial.begin(9600); } void loop() { // Legge lo stato del bottone buttonState = digitalRead(buttonPin); // Se il bottone è premuto if (buttonState == LOW) { // Se il bottone non era precedentemente premuto if (!buttonPressed) { // Registra il tempo di pressione pressTime = millis(); buttonPressed = true; } } else { // Se il bottone è rilasciato if (buttonPressed) { // Registra il tempo di rilascio releaseTime = millis(); // Calcola la durata della pressione del bottone unsigned long duration = releaseTime - pressTime; // Stampa la durata sulla seriale Serial.print("Il bottone è stato premuto per "); Serial.print(duration); Serial.println(" millisecondi"); buttonPressed = false; } } } Spiegazione del Codice: Definizione delle Variabili: buttonPin: il pin a cui è collegato il bottone. buttonState: lo stato corrente del bottone (alto o basso). pressTime: il tempo in millisecondi quando il bottone è stato premuto. releaseTime: il tempo in millisecondi quando il bottone è stato rilasciato. buttonPressed: stato booleano per tracciare se il bottone è premuto. Setup: Imposta il buttonPin come input con una resistenza di pull-up interna. Inizializza la comunicazione seriale a 9600 bps. Loop: Legge lo stato del bottone. Se il bottone è premuto (LOW), verifica se non era premuto in precedenza e registra il tempo corrente (pressTime). Se il bottone è rilasciato (HIGH), verifica se era premuto in precedenza, registra il tempo di rilascio (releaseTime), calcola la durata della pressione, stampa il risultato sulla seriale e resetta lo stato del bottone. Collegamenti Elettrici: Bottone: Un terminale del bottone va collegato al pin digitale (es. pin 2). L'altro terminale va collegato al ground (GND). Puoi adattare il codice per aggiungere altre funzionalità o per inviare i dati in modi diversi (ad esempio tramite display LCD o invio via WiFi se utilizzi un modulo ESP8266/ESP32).