Ich habe Probleme, meinen Kommunikationscode zum Laufen zu bringen. Ich gebe die Daten 1, 0, 255, 50 ein und dann kommt es zu Fehlern (sollte es nicht warten, bis 8 Bits gesendet wurden?), es endet mit meiner Debug-Nachricht von BadPacket und StartPacket und gibt dann die Zahl 49 aus, die dies anzeigt dachte, das erste Paket wäre 49. Was ist hier los?
Dies ist, was ich verwende:
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;
}
Es sieht so aus, als würden Sie die ASCII-Werte der Zahlen mit den Zahlen selbst verwechseln.
Wenn Sie ein '1'-Zeichen über die serielle Schnittstelle senden, senden Sie tatsächlich das Byte 49 (0x31). Aus diesem Grund sehen Sie die ungültige 49.
Ändern Sie entweder Ihren Code, um ASCII zu verstehen, oder senden Sie die Rohbytes anstelle von ASCII-Ziffern.
Nur Jeff
NickHalden
Charliehorse55
Charliehorse55
Charliehorse55