Boas,
E algo assim gostas mais ?
byte aRX_Trama[18] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
void rx_trama()// (byte *trama)
{
byte cpt, i = 0;
byte checksum = 0;
static byte cpt_erro =0;
if (Serial.available() > 17 )
{
//-----------------------------------------------------------------------
for (cpt = 0; cpt < 18; cpt ++ )
{
aRX_Trama[cpt] = Serial.read();
}
//-----------------------------------------------------------------------
// calcula checksum - XOR
for (i = 4; i < 16; i ++ )
{
checksum ^= aRX_Trama[i];
}
//-----------------------------------------------------------------------
//Serial.println ("DEBUG fdx");
//Serial.println (checksum, HEX);
if( checksum == aRX_Trama[17] && aRX_Trama[17] > 0) //testa se o checksum é valido
{
// Serial.print("\n\r DEBUG - CRC");
trama_OK = true;
cpt_erro = 0;
return 1;
}
else
{
cpt_erro ++;
if ( cpt_erro > 30)
{
Serial.print ("\n\r DEBUG cpt_erro -> ");
Serial.print (cpt_erro);
Serial.println ("");
limpa_buffer_rs232();
trama_OK = false;
cpt_erro =0;
return 0;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LIMPAR / ESVAZIAR BUFFER RS232
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void limpa_buffer_rs232()
{
unsigned char temp = Serial.available();
for (int i = temp; i >=0; i--)
{
Serial.read();
}
}
PS: este código compila sem erros mas não o testei na realidade.