struct Message { uint16_t Uniek; uint8_t BoardNo; uint16_t Command; uint16_t Argument; uint16_t ArgumentExt; uint8_t ArgumentSmall; byte Values[4]; }; const uint16_t None = 0; const uint16_t Nano_CH340 = 5; const uint16_t Identifier = 8324; bool IsActive = false; const uint16_t ErrorUniek = 1; const uint16_t ErrorCommandNotDefined = 14; const uint8_t BoardNr = 1; const uint16_t CmdGetDefinition = 1; const uint16_t CmdTest = 2; const uint16_t CmdError = 13; void setup() { Serial.begin(9600); IsActive = false; } void loop() { struct Message msg; if (Serial.available() > 0) { Serial.readBytes((uint8_t *)&msg, sizeof(msg)); if (msg.Uniek == Identifier) { switch (msg.Command) { case CmdGetDefinition: GetDefinition(); break; case CmdTest: SendTest(); break; default: SendError(ErrorCommandNotDefined, msg.Command); break; } } else { SendError(ErrorUniek, 0); } } } void SendTest() { struct Message msg; memset(&msg, 255, sizeof( msg)) ; msg.Uniek = Identifier; msg.BoardNo = BoardNr; msg.Command = CmdTest; msg.Argument =1000; msg.ArgumentExt = 1001; msg.ArgumentSmall = 100; msg.Values[0] = 10; msg.Values[1] = 11; msg.Values[2] = 12; msg.Values[3] = 13; Serial.write((const uint8_t *)&msg, sizeof(msg)); } void SendError(int error, int parms) { struct Message msg; memset(&msg, 255, sizeof( msg)) ; msg.Uniek = Identifier; msg.BoardNo = BoardNr; msg.Command = CmdError; msg.Argument = error; msg.ArgumentExt = parms; Serial.write((const uint8_t *)&msg, sizeof(msg)); } void GetDefinition() { struct Message msg; memset(&msg, 255, sizeof( msg)) ; msg.Uniek = Identifier; msg.BoardNo = BoardNr; msg.Command = CmdGetDefinition; msg.Argument = Nano_CH340; Serial.write((const uint8_t *)&msg, sizeof(msg)); IsActive = true; }