Ну можно
PHP код:
#include <CustomSoftwareSerial.h>
CustomSoftwareSerial* IBusSerial;
boolean read_byte = false;
byte readbuffer[64];
int i;
int buffer_index = 0;
int buffer_max = 64;
int cksum;
long lastrx;
long lasttx;
void ReadIBUSmsg()
{
lasttx = millis();
if ((millis() - lastrx) > 15)
{
memset(readbuffer, 0, sizeof(readbuffer));
buffer_index = 0;
read_byte = false;
buffer_max = 64;
lastrx = millis();
}
if (IBusSerial->available())
{
readbuffer[buffer_index] = IBusSerial->read();
read_byte = true;
}
if (read_byte)
{
if (buffer_index == 1){
buffer_max = readbuffer[buffer_index] + 2; // readbuffer [1] + 2(source + length) = длина сообщения
cksum = readbuffer[0] ^ readbuffer[1];
} else if ((buffer_index > 1 ) && (buffer_index < buffer_max-1)){ // не включаем CRC который пришел
cksum = cksum ^ readbuffer[buffer_index];
}
}
if (buffer_index == buffer_max-1)
{
if ((cksum == readbuffer[buffer_index]) && (cksum != 0))
{
if (readbuffer[0] == 0x00 && readbuffer[2] == 0xBF && readbuffer[4] == 0x12) // Lock readbuffer[4] = XX ; 1X - Lock button pressed; 2X - Unlock button pressed ; 4X - Boot open button pressed; X1 - Key Battery low ; X2 - Key Battery OK
{
// Serial.println("Lock"); //закрыли
//здесь код если закрыли
}
else if (readbuffer[0] == 0x00 && readbuffer[2] == 0xBF && readbuffer[4] == 0x22) //Unlock
{
//Serial.println("Unlock"); //открыли
//здесь код если открыли
}
}
memset(readbuffer, 0, sizeof(readbuffer));
buffer_index = 0;
read_byte = false;
lastrx = millis();
}
if (read_byte == true){
read_byte = false;
buffer_index++;
lastrx = millis();
}
}
void loop()
{
ReadIBUSmsg ();
}