Incremento anomalo variabile

Ciao a tutti !

Devo registrare dei dati su una sd, dato che sono molti voglio una lista ordinata:

1 - dato 2 - dato 3 - dato

Volevo mettere anche l'ora ma dovrei mettere una batteria tampone etc etc, quindi viene piùù "complicato"

Ora, provando questo semplice sketch

int a;

void setup() {
  
a=0;

Serial.begin(9600);

}

void loop() {
  
Serial.println(a++);

delay(1000);
  
}

Il risultato è:

00 1 2 3 4 5 6 7 8 9 10 [...]

Ora, perchè vengono due 0 anziché uno solo ??

Grazie :)

avevo provato come hai detto tu, solo che faceva 11 anziché 00 ! :(

1 1 2 3 4 5 6 7 8 9 10

Si, in effetti è un comportamento strano. :sweat_smile: Sembra che non dipenda dall'incremento.

Che poi avviene solamente al primo avvio, dopo aver caricato lo sketch, del monitor seriale !

quando chiudo e lo riapro, riparte dall’ultimo stato con cui ho chiuso il monitor prima ! In questo caso ho chiuso all’ottavo incremento, e riparte da 8 e poi rincomincia …

8
1
2
3

Prova così:

int a;

void setup() {
a=0;
Serial.begin(9600);
Serial.flush();
}

void loop() {
Serial.println(a++);
delay(1000);
}

Nada !

Può essere un qualche "buffer" nons vuotato correttamente ??

Che versione di IDE usi?

Ho provato il Tuo sketch con un Arduino 2009 328, Win XP SP3 e IDE 1.0.2 e non mi fa il doppio zero o stampa l' ultima lettera una seconda volta.

Che Arduino hai e che IDE usi?

Ciao Uwe

Mac OS 10.8.2, IDE 1.0.3, Arduino UNO rev.3

Lo fa per il semplice motivo che la scheda viene ri-resettata all'apertura del monitor seriale per cui il primo numero lo stampa 2 volte. Questo perché l'IDE è scritta in modo tale che l'apertura della comunicazione seriale sia interpretata dal bootloader dell'Atmega16U2 come segnale di reset. Quindi l'Arduino inizia lo sketch, stampa 0, poi tu apri il monitor seriale e questo resetta l'Arduino, che riparte nuovamente da 0.

Prova questo sketch, che introduce un ritardo fra l'avvio e l'inizio delle trasmissioni:

int a;

void setup() {
  a=0;
  delay(2000);
  Serial.begin(9600);
}

void loop() {
  Serial.println(a++);
  delay(1000);
}

Perfetto, ora non fa la doppia cifra iniziale, ma rimane lo stesso l'ultima cifra della precedente chiusura !

4 0 1 2 3 4 5 6

Quella rimarrà sempre perché un monitor seriale non è un display di un PC che puoi svuotare con un comando tipo CLEAR ;) Se non vuoi vedere i vecchi dati, scriviti un tuo monitor seriale che riceva i dati dall'Arduino e li visualizzi da qualche parte nel modo a te più consono.

ah okok !

A me interessava il fatto di eliminare la doppia cifra iniziale !

Grazie !

int a;

void setup() {
  a=0;
  delay(2000);
  Serial.begin(9600);
}

void loop() {
  Serial.println(a++);
  delay(1000);
}

Prova questo e vedi se viene da Arduino o dal Buffer del MAC:

int a;

void setup() {
  a=0;
  delay(2000);
  Serial.begin(9600);
  Serial.println("Start");
}

void loop() {
  Serial.println(a++);
  delay(1000);
}

La cifra falsa viene adesso prima o dopo il "Start"? Ciao Uwe

Dopo aver caricato la prima volta lo sketch, avvio il monitor ed esce così:

StarStart 0 1 2 3 4 5

Chiudo e riapro il monitor, ed esce così:

5Start 0 1 2 3 4 5 6

Allora secondo me é un problema del terminale del IDE e non del Arduino. Hai sul MAC un altro programma terminale che visualizza i dati che arrivano dalla seriale? Prova con quello. Ciao Uwe

Stessa cosa da terminale :|