// Link to Origianl sketch: https://wokwi.com/projects/421315105315990529
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);
}
// calcAndPrintTcm Calcola e stampa il tempo di ciclo medio
// tcm è espresso in millesimi di secondo.
// moltiplicare tcm x 1000 per ottenere il tempo in microsecondi
// Decommentare (1) e (2) per stampare il valore di loopCounter
// oppure calcolarlo manualmente così: lc = 1000 / tcm.
void calcAndPrintTcm() {
static uint32_t loopCounter;
static uint32_t oneSec = millis();
loopCounter++;
if (millis() - oneSec >= 1000) {
oneSec = millis();
float tcm = 1000.0/loopCounter;
Serial.print("Tempo di ciclo medio: ");
Serial.print(tcm, 5);
Serial.println(" ms");
//Serial.print("loopCounter: "); // (1)
//Serial.println(loopCounter); // (2)
loopCounter = 0;
}
}
void loop() {
static uint32_t pressTime = millis();
static bool toggleLed = false;
calcAndPrintTcm(); // chiama la funzione calcAndPrintTcm()
// 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 (!toggleLed && digitalRead(4) == LOW) {
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 (toggleLed && millis() - pressTime >= 5000) {
toggleLed = false;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
Serial.print(millis());
Serial.println(" - Uscita LED invertita");
// per simulare del codice che impegna in modo esclusivo la
// cpu per 500 millesimi di secondo.
// Togli il commento e osserva tcm che aumenta del doppio.
// delay(500); //(3) mezzo secondo di impiego esclusivo della CPU
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
led1:A
led1:C