void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(4, INPUT_PULLUP);
// Eseguo il seguente blocco di codice per 10s prima di fare altro
Serial.print(millis());
Serial.println(" - Attendo 10 secondi");
uint32_t timeout = millis();
while (millis() - timeout <= 10000) {
// Eseguo il seguente blocco di codice una volta ogni 500ms (blink di un led)
static uint32_t blinkTime = millis();
if (millis() - blinkTime >= 500) {
blinkTime = millis();
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
}
Serial.print(millis());
Serial.println(" - Tempo di attesa trascorso");
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
static uint32_t pressTime = millis();
static bool toggleLed = false;
// Gestione del pulsante: la variabile toggleLed in AND con digitalRead()
// fa in modo che questo blocco di codice viene eseguito una volta soltanto
// quando il pulsante viene premuto fino a quando non saranno passati 5s
if (digitalRead(4) == LOW && !toggleLed) {
toggleLed = true;
pressTime = millis();
Serial.print(pressTime);
Serial.println(" - Pulsante premuto");
}
// Eseguo il seguente blocco di codice 5 secondi dopo aver premuto il pulsante
if (millis() - pressTime >= 5000 && toggleLed) {
toggleLed = false;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
Serial.print(millis());
Serial.println(" - Uscita LED invertita");
}
}