strano problema nell'utilizzo di un timer con millis()

Salve a tutti. La questione è probabilmente stupida, ma è da un po' che ci sbatto senza trovare soluzione. In breve, questo semplice sketch funziona fino ad un valore di interval di 32*1000. Se metto 33*1000 l'if() non è mai verificato... Tra l'altro è il codice usato nell'esempio Ethernet->WebClientRepeating che ha lo stesso problema. Suggerimenti?

const unsigned long interval = 32 * 1000; //32 OK - 33 KO
unsigned long lastRun = 0;

void setup(){
  Serial.begin(9600);
  Serial.println("partenza");
}

void loop(){
  if(millis() - lastRun > interval){
    Serial.println("Hey hey hey");
    lastRun = millis();
  }
}

const unsigned long interval = 32 * 1000; //32 OK - 33 KO

Il problema è che, a meno che non sia specificato, le operazioni numeriche sono tra interi ed il risultato è un intero.

Questo spiega perché 32 * 1000 funziona e 33 * 1000 no (33000 > 23767)

Per risolvere il problema:

const unsigned long interval = 32 * 1000UL;

cyberhs: Il problema è che, a meno che non sia specificato, le operazioni numeriche sono tra interi ed il risultato è un intero.

Questo spiega perché 32 * 1000 funziona e 33 * 1000 no (33000 > 23767)

Per risolvere il problema:

const unsigned long interval = 32 * 1000UL;

Perfetto, adesso funziona come dovrebbe! Grazie, G.