Go Down

Topic: Incremento anomalo variabile (Read 1 time) previous topic - next topic

anerDev

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

Code: [Select]

int a;

void setup() {
 
a=0;

Serial.begin(9600);

}

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

delay(1000);
 
}


Il risultato è:

Quote

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


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

Grazie  :)

anerDev

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

Quote

1
1
2
3
4
5
6
7
8
9
10

PaoloP

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

anerDev

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 ...

Quote
8
1
2
3

PaoloP

Prova così:
Code: [Select]
int a;

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

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

anerDev

Nada !

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


uwefed

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

anerDev

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

leo72

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:
Code: [Select]
int a;

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

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

anerDev

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

Quote

4
0
1
2
3
4
5
6

leo72

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.

anerDev

ah okok !

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

Grazie !

Code: [Select]
int a;

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

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

uwefed

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

Code: [Select]
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

anerDev

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

Quote

StarStart
0
1
2
3
4
5


Chiudo e riapro il monitor, ed esce così:

Quote

5Start
0
1
2
3
4
5
6


Go Up