Tengo problemas para que mi código de comunicación funcione. Ingreso los datos 1, 0, 255, 50 y luego se produce un error (¿no debería esperar hasta que se hayan enviado 8 bits?) Sale con mi mensaje de depuración de BadPacket y StartPacket, y luego imprime el número 49, lo que indica que pensó que el primer paquete tenía 49. ¿Qué está pasando aquí?
Esto es lo que estoy usando:
const uint8_t kACKBit = 6;
const uint8_t kNACKBit = 25;
const uint8_t kStartBit = 1;
void setup()
{
Serial.begin(115200);
}
void loop()
{
if(Serial.available() >= 8)
{
readData();
}
}
void badPacket()
{
//flush the buffer and send a request to resend the data
Serial.flush();
Serial.println("Bad Packet");
Serial.print(kNACKBit);
}
void goodPacket()
{
//Packet good - send an acknowledgement
Serial.println("Good Packet");
Serial.print(kACKBit);
}
void readData()
{
uint8_t startPacket = 10;
startPacket = Serial.read();
if (startPacket != kStartBit)
{
badPacket();
Serial.println("StartPacket");
Serial.println(startPacket, DEC);
return;
}
//check that the address is valid
uint8_t address = Serial.read();
if(address >= 6)
{
badPacket();
Serial.println("address");
return;
}
//read in the RGB values
uint8_t r = Serial.read();
uint8_t g = Serial.read();
uint8_t b = Serial.read();
//read in the duration
uint8_t high_byte = Serial.read();
uint8_t low_byte = Serial.read();
//combine the two values into a single int
uint16_t duration = (high_byte << 8) + low_byte;
//check that it ends in a null teminator
if(Serial.read() != 0)
{
badPacket();
Serial.println("nullterm");
return;
}
//confirmed packet - send ack signal
goodPacket();
return;
}