Pages: [1] 2   Go Down
Author Topic: comando corretto per pulire la seriale su arduino uno ide 101  (Read 1764 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

qual'è il comando piu corretto per pulire la seriale su arduino uno ide 101

mi pare che serian.flush    non funge    smiley-cry
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

prova con un altro Serial.begin
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ci sara pure un qualcosa che svuota il buffer  senza riavviare il tutto?
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sulla carta è Serial.flush

Se poi non funziona come dovrebbe è un altro discorso.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9679
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ci sara pure un qualcosa che svuota il buffer  senza riavviare il tutto?

Metodo flush
Code:
Waits for the transmission of outgoing serial data to complete. (Prior to Arduino 1.0,
this instead removed any buffered incoming serial data.)

Ovvero la flush, a partire dalla versione 1.0, attende che siano stati trasmessi tutti i caratteri pendenti nel buffer, non azzera il buffer di ricezione come invece avveniva con le versioni precedenti dell'IDE

La serial.begin non riavvia nulla, si limita a settare i registri macchina della UART per il corretto valore di baud rate e attivarla.
Con l'IDE 1.x il solo modo per svuotare il buffer di ricezione della seriale è continuare a leggerlo fino a che non è vuoto, ovvero devi usare una  "while (Serial.available() > 0) a=Serial.read();" ove "a" è una variabile di tipo char fittizia.

Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi anche una riga cosi fa la stessa cosa?

byte a=Serial.read();
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9679
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi anche una riga cosi fa la stessa cosa?
byte a=Serial.read();

No, ti svuota un solo carattere del buffer, devi usare la while come te l'ho scritta io.

Per capirci meglio:
Code:
while (Serial.available() > 0) a=Serial.read();

Solo in questo modo svuoti completamente il buffer di ricezione.
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma non funziona  smiley-eek-blue

ho  messo la riga nel loop ma i seria print vengono stampati lo stesso
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9679
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma non funziona  smiley-eek-blue

Funziona sicuramente, posta il codice che stai usando perché sicuramente hai commesso qualche errore.

Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


ho aggiunto la  riga all'inizio e alla fine de loop e messa ache in altri 2 posti
4 voltein totoale

ma se apro il serial monitor e scrivo numeri  e faccio invio questi passano lo stesso
Code:

[codelong vet[6] = {
  -2, -2, -2, -2, -2,  -2 };

byte segnale=1;  
long cont = 0;
long x = 0;
char a;


void setup()
{
  pinMode (11, INPUT);
  pinMode (12, OUTPUT);  
  pinMode (13, OUTPUT);

  digitalWrite (13, HIGH);
 Serial.begin(9600);
}

void loop()
{



 while (Serial.available() > 0) a=Serial.read();

  if ( digitalRead (11)==LOW) segnale=1,  digitalWrite (13, HIGH);


  
 if (segnale == 1  && digitalRead (11)==HIGH)

    while (Serial.available() > 0)
   {
      vet[cont] = Serial.read()-48;
      cont++;
      delay(60);

    }



  if(cont > 0)
  {
    cont = 0;


    if (vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2  && vet[1] ==  -2 )

    {                                                                      
        x = vet[0];                                                        
    }
    else

        if (vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2 ) //  
      {
        x = (vet[0]* 10 +   vet[1]    );
      }
      else
        if  ( vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2 ) //
        {
          x = (vet[0] * 100 + vet[1]* 10+ vet[2]);
        }
        else
          if  (vet[5] ==  -2  && vet[4] ==  -2  )
          {
            x = (vet[0] * 1000 + vet[1] * 100 + vet[2]* 10 + vet[3]);  
          }
          else
            if  (vet[5] ==  -2   )
            {
              x = (vet[0] * 10000 + vet[1] * 1000 + vet[2]* 100 + vet[3]* 10 + vet[4]);  

            }


 while (Serial.available() > 0) a=Serial.read();
            Serial.println(x);

 
 while (Serial.available() > 0) a=Serial.read();
  }
  while (Serial.available() > 0) a=Serial.read();
}
]
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9679
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma se apro il serial monitor e scrivo numeri  e faccio invio questi passano lo stesso

Nel tuo codice vedo solo una serial.print che stampa una variabile calcolata all'interno del programma, quindi è normale che la vedi.
Mi dovresti spiegare cosa intendi con "passano lo stesso" perché in tutti i casi quello che invii sulla seriale arriva sempre e comunque ad Arduino e viene memorizzato nel relativo buffer, poi sta a te cancellarlo, dopo la ricezione, se questi dati non ti servono.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Puoi provare aggiugendo questa funzione da richiamare all'occorrenza
Code:
void svuota_seriale( void )
{
unsigned char dummy;
while ( UCSR0A & (1<<RXC0) ) dummy = UDR0;
}
fà la stesa cosa del codice di astrobeed
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9679
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

fà la stesa cosa del codice di astrobeed

Sicuro ? Per me svuota solo il buffer, monobyte, del Atmega328, quello software da 64 byte no.
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, il ringbuffer software della seriale no.
per quello potrebbe provare a spegnere la seriale alla fine del loop e riaccenderla all' con un Serial.end e un Serial.begin no?
« Last Edit: October 18, 2012, 04:04:44 am by BrainBooster » Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in "soldoni"
 
ci vuole un comando (a comando) 
magari con d'avanti un if
che svuoti la seriale da "spazzatura" preesistente

()se no non ha troppo senso)
una cosa cosi e utile es:

if ( digitalRead (11)==LOW)  "svuota tutto il buffer seriale" ;
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Pages: [1] 2   Go Up
Jump to: