Hola, básicamente el problema que estoy teniendo es que al iniciar una nueva conexión con la placa, el puerto serie siempre recibe un dato que no envío yo.
Esto sucede cuando abro el monitor serie que tiene el IDE luego de conectar placa, es decir, si la placa sigue conectada y abro y cierro el monitor, no sucede; pero al REconectar la placa y volver a abrir el monitor está recibiendo siempre un dato.
Ese dato que recibe es un 0xF0 (240 en decimal).
Quería saber si esto es normal al crearse la conexión o hay algo que no estoy viendo.
Me di cuenta de esto, ya que por ahora el sketch consiste en ejecutar distintas funciones dependiendo el valor que recibe por puerto serie, y en caso de recibir un carácter desconocido ejecuta el default del switch que es lo que me sucede como mencioné más arriba.
Adjunto todo el código a continuación por si hay algo que no estoy viendo, pero centraría el foco en el default del switch.
#include <Ads7841.h>
#include <SPI.h>
Ads7841 adc; //Instancio una clase para el ADC
void setup() //Funcion que se ejecuta una unica vez, al inicar el micro
{
cli(); //Deshabilito las interrupciones para configurar
adc.begin();
pinMode(PINPRUEBA, OUTPUT); //DEBUG
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
OCR2A = 255;// = (16*10^6) / (976*64) - 1 (must be <256)
TCCR2A |= (1 << WGM21); // turn on CTC mode
TCCR2B |= (1 << CS22); // Set CS22 bits for 64 prescaler
Serial.begin(115200); //Habilito el puerto serie
sei(); //Habilito las interrupciones
}
void loop()
{
//Dependiendo del caracter que reciba por puerto serie, realiza una funcion distinta
if (Serial.available() > 0)
{
unsigned int a,b;
b=Serial.read();
switch(b)
{
case '0': //Envio por PSerie la cuenta del canal 0
a=adc.leer(CH0_CODE);
Serial.println(a);
break;
case '1': //Envio por PSerie la cuenta del canal 1
a=adc.leer(CH1_CODE);
Serial.println(a);
break;
case '2': //Envio por PSerie la cuenta del canal 2
a=adc.leer(CH2_CODE);
Serial.println(a);
break;
case '3': //Envio por PSerie la cuenta del canal 3
a=adc.leer(CH3_CODE);
Serial.println(a);
break;
case 's': //Envio por PSerie 2 bytes de la cuenta (sin procesar!) MSB y LSB
adc.leer(CH2_CODE, &Serial);
break;
case 'e': //Habilito la interrupcion del timer 2 para tomar muestras a una frecuencia determinada
INTTIMER2_ON; // Habilito la interrupción del timer 2
break;
case 'd': //DEBUG:
INTTIMER2_OFF; // Deshabilito la interrupción del timer 2
break;
default: //Si recibo un caracter desconocido, aviso
Serial.println(millis(),DEC);
Serial.print("Desconocido");
Serial.print(Serial.available(),DEC);
Serial.print(" ");
Serial.println(b,DEC);
break;
}
}
}
Ésto no sólo me sucede con el monitor del p. serie de arduino, también me pasa con la conexión que estoy usando desde Matlab, lo cual me trajo bastante dolores de cabeza, ya que me llevo tiempo ver que en algunos casos recibía al matlab un conjunto de datos que no tenían sentido y al estar visualizando esos datos en formato decimal perdí de vista que lo que recibía era el mensaje de "error" que le agregué al switch por si pifiaba en algo.
Si bien implemente una solución rudimentaria que me hizo salir del problema, preferiría ver si hay algo que pueda cambiar (sin tener que sacar el default del switch, claro; ni tener que lidiar con esta situación "rara").
Gracias y saludos, Sebastián.