Pages: [1]   Go Down
Author Topic: sempre seriale: leggere e scrivere degli array  (Read 605 times)
0 Members and 1 Guest are viewing this topic.
bologna italy
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho qualche problema su come far scambiare degli array tra di loro
trasferisco un arrai tramite serial.write(buffer,lenght) e ricevo con serial read.
per ricevere questo array devo fare un ciclo if for per poterlo scrivere oppure dentro il mio array di ricezione dall´altra parte?
inoltre non ho ben capito la funzione serial .available ossia la sintassi  if serial.available() >0 cono serial.available ().
serial.available () =0 non mi funziona, la volevo usare per testare se la seriale e´libera prima di trasmettere.
Logged

zanini marco

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21618
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Serial.available() è una funzione che restituisce il numero di byte presenti nel buffer seriale.
Si usa fare un test con
Code:
Serial.available() > 0
per verificare se esistono byte arrivati dalla seriale ed andare così a leggerli.

Se non è arrivato nulla, Serial.available() restituisce 0.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20184
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per spedire e ricevere l'array devi fare un for spaziando sul intero index.
Ciao Uwe
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21618
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per spedire e ricevere l'array devi fare un for spaziando sul intero index.
Ciao Uwe
Vero in parte, perché in ricezione può capitare di non sapere a priori quanti byte siano stati spediti, per cui si usa ciclare con un while finché ci sono caratteri disponibili.

Code:
if (Serial.available()) { //implicito: sarebbe if (Serial.available() > 0))
  do {
    byte a = Serial.read();
    //qui con quel carattere ci fai quel che ti pare
  } while (Serial.available());
}
Logged


bologna italy
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie mille per le info, quindi nel mio caso che sto facendo comunicare due arduini ed ho creato un array di grandezza identica  di dati da spedire.
quindi posso fare un ciclo di for per riempire lárray che ricevo.
Dite che e´il caso di spedire un carattere di inizio e fine trasmissione per ogni array? e di gestirlo insieme al serial available?
Logged

zanini marco

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21618
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie mille per le info, quindi nel mio caso che sto facendo comunicare due arduini ed ho creato un array di grandezza identica  di dati da spedire.
quindi posso fare un ciclo di for per riempire lárray che ricevo.
Dite che e´il caso di spedire un carattere di inizio e fine trasmissione per ogni array? e di gestirlo insieme al serial available?
Se la trasmissione è su breve distanza, a basse velocità e di pochi byte, puoi semplicemente spedire i dati senza preoccuparti di creare un protocollo. Se devi spedire tanti byte, su distanze lunghe e ad alte velocità potresti prevedere un byte di inizio trasmissione, uno di fine e magari anche una somma di controllo (tipo CRC).
Logged


bologna italy
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

per il momento ho da spedire un array di dati da una decina di elementi.
la distanza invece e´di 200m e devo interfacciarmi con una rs422.
devo pilotare dei motori con dei ponti h per pilotare una telecamera subacquea filoguidata smiley-twist
Logged

zanini marco

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21618
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

per il momento ho da spedire un array di dati da una decina di elementi.
la distanza invece e´di 200m e devo interfacciarmi con una rs422.
devo pilotare dei motori con dei ponti h per pilotare una telecamera subacquea filoguidata smiley-twist
Beh, un CRC finale metticelo, non si sa mai.
Logged


Pages: [1]   Go Up
Jump to: