Hola gente, muchisimo tiempo que no estaba por este foro. Estoy retomando arduino y me encuentro un poco duro en el tema.
les comento la situacion que llevara a hacerles la consulta seguidamente.
Estoy con appinventor armando una app para enviarle por usb otg algunos datos de configuración al arduino.
el problema que me encuentro es que por monitor serial, el ardu interpreta todo ok. pero por la app, parece que los datos de vez en cuando se le mezclan o toma por parte.
les paso parte del codigo y les explico mejor...
el cdigo de arduino hace unos efectos con neopixel y muestra unos resultados de lectura en un oled.
por serial busco probar los colores del neopixel y configurar la otras lecturas...
basicamente hay dos opciones de recibir por serial. P o C. que seria para prueba o configuración.
si recibe p, entonces hace parseint y configura los colores. y hace la prueba. Pero si recibe C, entonces recibe mas datos de configuración y hace la prueba de colores.
Estoy buscando alguna sugerencia de como manejar mejor los datos ingresados por serial. para evitar estas perdidas o bien algun mejor metodo en si. Estuve leyendo el tema maquinas de estados pero no creo que me sirva. o no supe verlo.
muchas gracias
//prueba recibiendo por serial los colores para cada segmento,
//recibe datos por serial. si es igual a p, entonces hace una prueba de colores
if (Serial.available() > 0) {
char estado;
estado = Serial.read();
if(estado == 'p'){
c1 = Serial.parseInt();
c2 = Serial.parseInt();
c3 = Serial.parseInt();
c4 = Serial.parseInt();
if(Serial.read() == "\n")
{color1 = load_color(c1); //establece el color de acuerdo un a un calculo que esta en la funcion load color.
color2 = load_color(c2);
color3 = load_color(c3);
fl = load_color(c4);
test(brillo); /// hace la prueba de colores segun los recibidos
delay(500);
}
oled.setCursor(0, 0);
oled.clearToEOL();
oled.print(c1);
oled.setCursor(20, 0);
oled.clearToEOL();
oled.print(c2);
oled.setCursor(40, 0);
oled.clearToEOL();
oled.print(c3);
Serial.flush();}
}
/// si estado == c, entonces configura de acuerdo a los serial.parseint
if(estado == 'c'){
act = Serial.parseInt();
shift = Serial.parseInt();
cal=Serial.parseInt();
/// pixelanim = Serial.parseInt();
seg1_st = Serial.parseInt();
seg1_end = Serial.parseInt();
seg2_end = Serial.parseInt();
seg3_end = Serial.parseInt();
c1 = Serial.parseInt();
c2 = Serial.parseInt();
c3 = Serial.parseInt();
c4 = Serial.parseInt();
if(Serial.read() == "\n")
{color1 = load_color(c1);
color2 = load_color(c2);
color3 = load_color(c3);
oled.setCursor(0, 0);
oled.clearToEOL();
oled.print(c1);
oled.setCursor(20, 0);
oled.clearToEOL();
oled.print(c2);
oled.setCursor(40, 0);
oled.clearToEOL();
oled.print(c3);
delay(1000);
fl = load_color(c4);
test(brillo);
Serial.println(color1);
Serial.println(color2);
Serial.println(color3);
Serial.println(flclr1);
Serial.println(brillo);
Serial.flush(); }