Lettura da seriale.....

ciao a tutti !

il problemino è questo :

con inByte=serial.read() in un loop ho la lettura dei byte in arrivo dalla seriale . Ora se dovessi tagliare il telegramma in arrivo per fare varie considerazioni come posso fare ? Esempio : il telegramma in arrivo è :

00 E1 10 10 20 40 00 E1 10 1020 41

Come posso unire il telegramma in un'unica stringa per poi fare le adeguate considerazioni del tipo: se il telegramma inizia con 00E1 allora blablabla...... ???

GRAZIE !

nello stesso loop in cui fai inByte=serial.read()

copi inByte in una stringa così: s = char(inByte) e ti ricordi di incrementare i++ a questo punto tutto quello che hai ricevuto sta nella stringa s e puoi manipolarlo come credi

GRAZIE per la risposta.
ho fatto come mi hai detto ma
c’è un piccolo problemino, mi risponde :

In function ‘void loop()’:
error: invalid types ‘char[int]’ for array subscript

posto l’intero file :

// include the library code:
#include <LiquidCrystal.h>
int inByte = 0; 
char s = 32 ;
int i = 0 ;

LiquidCrystal lcd(11, 12, 7, 8, 9, 10);

void setup() {
  
  lcd.begin(16, 4);
  
  Serial.begin(19200);
}

void loop() {
  
  
  if (Serial.available() > 0) {
 
    inByte = Serial.read();
  
 
  s[i] = char(inByte) ;
    lcd.print(inByte,HEX);
  i = i + 1 ;
  
}
}

:-/

perche la variabile s non e dichiarata come array prova cosi

char s[n] ;// al posto di n ci va il numero di letture che vuoi tenere

risolto in parte !

all’inizio dovevo dichiarare la variabile s[100]="" ;

il piccolo problema è che ora mi trovo la variabile s[1]=“00” s[2]=“E1” ecc…

non sarebbe possibile avere la variabile s= “00E11010204000E1101020” ?

NB : il valore =0 dovrebbe nella stringa essere rappresentato da “00” (Hex) cosi poi posso spezzettare a gruppi di due la stringa…

GRazie ancora

sinceramente non penso sia possibile ...

quello che vuoi ce l'hai già

prova a stampare s con Serial.println(s) e vedi cosa ti viene fuori.

NON ci siamo ! evidentemente mi sono spiegato male...

La questione come avrete capito è far dialogare l'arduino via RS485 su un BUS proprietario tipo LON, MODBUS, KNX......

Essendo questi bus tutti in RS485, interfacciando l'arduino via MAX485 il sistema arduino-bus è ok. Avrò quindi i pin RX e TX utilizzati per il collegamento al Bus, mi servirà un terzo piedino per lo switching RX-TX.....

Fatto ciò, occorre interpretare il Telegramma in arrivo che, a seconda del protocollo usato avrà differenti comandi ma anche differenti CRC.

Quindi dalla seriale arrivano i treni di byte tipo quelli già esposti, (semplifico e premetto che tutti arrivano con baud 19,200, 8-E-1) che li leggo con inByte= serial.read()

ora dovrò interpretare la stringa in arrivo quindi dovrò fare vare troncature e confronti con i byte in arrivo e ultimo ma non per importanza calcolare il CRC secondo le specifiche !!! :P

partendo da piccoli passi mi accontento per ora sapere come interpretare i byte in ingresso !

Quindi il sistema serial.print() per vedere cosa succede NON posso usarlo cke RX e TX sono impegnati sulla Rs485 . Ho a disposizione un LCD , ma la visione del treno di byte è gia stata risolta, ora tocca alla elaborazione dei byte in arrivo ! Quindi avrei bisogno di convertire il treno di byte in arrivo in un UNICA stringa di valori esadecimali con passo 2 (0 è 00) ! HELP !

ps penso che questo piccolo quesito possa aprire la strada a parecchie applicazioni con cui collegare l'arduino a svariati sistemi BUS in commercio....... ;D