gpb01:
Salvo non disabilitare gli interrupt, il codice NON ha alcuna influenza sull'avanzamento del contatore ritornato da millis()
Vero, il contatore non subisce alcuna variazione, ma il valore memorizzato nella variabile 'mills_vecchi' può non avanzare come ci si aspetta, infatti dalle misure strumentali:
mills_attuali = millis();
if ((mills_attuali - mills_vecchi) > 10){ // 45.3 Hz, il caso in questione
mills_vecchi = mills_attuali;
val ^= 1;
digitalWrite(OUT_PIN, val);
}
mills_attuali = millis();
if ((mills_attuali - mills_vecchi) >= 10){ // 49.8 Hz, i tutorial sull'uso di millis
mills_vecchi = millis();
val ^= 1;
digitalWrite(OUT_PIN, val);
}
mills_attuali = millis();
if ((mills_attuali - mills_vecchi) >= 10){ // 50.0 Hz, errore solo di quarzo+interrupt
mills_vecchi += 10;
val ^= 1;
digitalWrite(OUT_PIN, val);
}