[SOLUCIONADO]problemas al leer array

Hola, tengo un proyecto donde se comunican 2 xbee (c/u con un arduino) tomo informacion de 3 sensores de un lado y la envio en una transmision punto a punto al otro nodo.

La estructura de la trama que envio es asi por ej: $90,120,4000#

En el receptor utilizo estas lineas para pasar los datos a un array:

while(Serial1.available()>0){
delay(5);
for(cont=0;cont<8;cont++){//VOLCAMOS DATOS EN ARRAY DE 8*8 BITS
digitos[cont]=Serial1.read();
}

yo agregué el signo $ y las , (comas) y el # para poder separar los datos que son la lectura de 3 sensores, el tema es que no me sale armar la estructura de programacion anidada para separar los 3 datos. Si alguien me pudiera dar una mano porque no soy bueno en C :confused: . Muchas gracias.

si los datos van a ser numericos puedes usar parseInt:

int dato1,dato2,dato3;
void setup(){}
void loop(){
  if (Serial.available()){
    char inicio = Serial.read();
    if (inicio == '

no lo he probado,es una idea.){       dato1 = Serial.parseInt();       dato2 = Serial.parseInt();       dato3 = Serial.parseInt();     }   } } ```

no lo he probado,es una idea.

Lo que sugiere josé esta casi casi bien salvo por un leve detalle no considerado que es el '#' que es rechazado por Serial.parseint o bien que lo toma como fin del entero final.

trama= $90,120,4000#

void loop(){
  if (Serial.available()){
    char inicio = Serial.read();
    if (inicio == '

Yo quitaría el # al final que no sirve de nada a menos que quieras enviar otras tramas distintas.){       dato1 = Serial.parseInt();       dato2 = Serial.parseInt();       dato3 = Serial.parseInt();     }   if (Serial.read() == '#') {              // esto aporta poco       Serial.println("Trama leida");   } } ```

Yo quitaría el # al final que no sirve de nada a menos que quieras enviar otras tramas distintas.

gracias jose y surbyte por sus respuestas, sin embargo tengo algunas dudas todavia, primero tengo entendido que se puede mandar en serie 8 bits si es asi deberia crear un array de [8] posiciones, de ser asi no deberia utilizar un bucle while para pasar los datos recibidos al array? algo asi seria:

void loop(){
while(Serial1.available()>0){
delay(5);
for(cont=0;cont<8;cont++){//VOLCAMOS DATOS EN ARRAY DE 8*8 BITS
digitos[cont]=Serial1.read();
}

hago esta pregunta porque ustedes me sugieren que use:

void loop(){
if (Serial.available()){
char inicio = Serial.read();

no soy ningun experto en el tema, pero me parece q no funciona de la misma forma…desde ya muchas gracias ojala me puedan ayudar. Saludos.

el array lo requieres para otra cosa? Sino simplemente usa lo que propuso jose y si eliminas el # como yo te sugiero tendras los datos separdos enteros en cada variables que requieras. No se porque hablas de bits? Lo que entrega Serial.read() es un byte.

Aca subo el codigo receptor con las modificaciones que me sugirieron, funciona perfectamente, muchas gracias jose y surbyte! :)

char digitos; byte dato1,dato2,dato3; void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { if(Serial1.available()){

digitos = Serial1.read(); } if(digitos == '$'){ dato1 = Serial1.parseInt(); dato2 = Serial1.parseInt(); dato3 = Serial1.parseInt(); Serial.println(dato1); Serial.println(dato2); Serial.println(dato3); } }