Problema assegnazioni variabile globale

Salve a tutti,
Ho un problema con questa funzione:

unsigned long previousMillis = millis(); //DIchiarata come variabile globale
int pausa=1000; //DIchiarata come variabile globale

void sendNO (byte note){

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis > pausa){ 
    Serial.println(note);
    previousMillis = currentMillis;
  }

}

Ci si aspetterebbe che Serial.println(note); venisse eseguito solo ogni secondo, invece il costrutto if viene sempre considerato verificato. Aggiungendo qualche serial.print per vedere il valore delle varie variabili scopro quanto segue:

currentMillis = 27442
previousMillis = 130
currentMillis - previousMillis = 27312
73  //Il risultato di Serial.println(note)
previousMillis = 27442 //Dopo previousMillis = currentMillis
--------- (Altra esecuzione della funzione) --------
currentMillis = 27804
previousMillis = 115
currentMillis - previousMillis = 27689
73   //Il risultato di Serial.println(note)
previousMillis = 27804  //Dopo previousMillis = currentMillis

In sintesi la variabile previousMillis (Che non viene toccata all' infuori della funzione riportata) non sembra riuscire a preservare il dato in essa contenuto per la succesiva esecuzione della funzione.

Grazie a tutti

Secondo me c'e' altro nel tuo sketch che lo incasina.
Ho preso il tuo pezzo di codice e aggiunto setup() e loop() e a me funziona (ho provato a mettere anche intervallo a 2 secondi):

unsigned long previousMillis = millis(); //DIchiarata come variabile globale
int pausa=2000; //DIchiarata come variabile globale

void setup()
{ delay(1000);
  Serial.begin(9600);
}

void loop()
{ sendNO(123);
}
void sendNO (byte note){
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis > pausa){ 
    Serial.println(note);
    previousMillis = currentMillis;
  }
}

Sviluppo interessante:
Nell’ ottica del “Proviamo tutto” ho porvato ad inizializzare previousMillis=1000. Ora il listato funziona, anche se i valori sono strani

currentMillis 24132
previousMillis 23127
Diff1005
73
24133
-----
currentMillis 25140
previousMillis 24133
Diff1007
73
25141
-----

Se porto il valore dato all’ atto dell’ inizializzazione a 2000 ottengo gli stessi risultati dell’ avergli dato 1000.
Aggiungo che il programma ha smesso di funzionare senza che io lo modificassi od altro

Sembrerebbe che sia riuscito a risolvere. Ho dovuto forzare, nell' assegnazione contestuale all' inizializzazione, il tipo di dato:

unsigned long previousMillis2=long(2000);

Suppongo che mi sia accaduta una cosa così strana per via dell' uso di CapacitiveSensor.h :S

Ci vediamo alla Maker!

Di solito ho sempre visto che si parte inizializzandolo a 0.
Al massimo la puoi inizializzare al valore di millis() nel setup(), ma non nella dichiarazione.
Nella setup() sai quando viene fatto, nella dichiarazione come global secondo me viene preso a 0 (millis()=0)

Questo perché hai dichiarato pausa di tipo "int" mentre le altre 2 variabili di tipo unsigned long. E' normale che il compilatore facesse il casting automatico.
Se dichiari pausa anch'essa di tipo unsigned long puoi togliere il casting manuale che hai aggiunto te ed ottenere anche una velocità maggiore perché il processore non deve più eseguire tutte le volte la conversione prima del confronto.