Показать сообщение отдельно
Старый 15.05.2017, 12:22   #4
Dubel
Новый Пользователь
 
Регистрация: 29.08.2012
Регион: Беларусь
Машина: BMW E39
Сообщений: 16
Dubel has a spectacular aura aboutDubel has a spectacular aura about
По умолчанию

Ну можно

PHP код:
#include <CustomSoftwareSerial.h>
CustomSoftwareSerialIBusSerial;

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(readbuffer0sizeof(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 ) && (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(readbuffer0sizeof(readbuffer));
        
buffer_index 0;
        
read_byte false;
        
lastrx millis();
    }

    if (
read_byte == true){
        
read_byte false;
        
buffer_index++;
        
lastrx millis();
    }
    
}


void loop()
{   
  
ReadIBUSmsg ();

Dubel вне форума   Ответить с цитированием