BMW e39 ibus управление фарами   
		
		
		Сделал управление по шине ibus управление всеми фарами автомобиля BMW E39 рестайлинг.  Сделано на Arduino + mcz33290. Управление морганием фар с кнопок руля  R/T  , Dial и открытие , закрытие. Если будет интерес выложу полный исходник.
 
Проблема в том что необходимо использовать скорость 9600 и проверку четности 8E1. В некоторых arduino есть хардварные порты и они поддерживают это. Но я  использовал arduino nano и софтварный порт. Поэтому пришлось искать выход из ситуации. В результате поиска нашел библиотеку CustomSoftwareSerial которая поддерживала нужный функционал.
 
	Код: 
	
 Инициализация порта: 
#include  
CustomSoftwareSerial* IBusSerial; 
 
  Serial.begin(9600);  
   IBusSerial = new CustomSoftwareSerial(8, 9);  
   IBusSerial->begin(9600,CSERIAL_8E1); 
 
iBus mcz33290 подключена к 8 и 9 pin (Rx,Tx). 
 
Далее отправляем полный пакет 
  {0x3F, 0x0F, 0xD0, 0x0C,0x00, 0x00, 0x00, 0x00}; //первая чаcть пакета 
 
byte lowBeamRight[5] =           {0x00, 0x20, 0x00, 0x00, 0x00}; //Фара ближнего света правая  
 
  {0xC8, 0xFF, 0x00}; //последняя часть пакета 
 
Ну и отправляем пакет в шину: 
 
void sendMessage(byte message_data[], byte messageLength) 
{ 
    byte message_cksum = gen_cksum(message_data,messageLength); 
 
      for (int k = 0; k < messageLength; k++) 
      { 
         IBusSerial->write(message_data[k]); 
      } 
     IBusSerial->write(message_cksum); 
} 
 
byte gen_cksum(byte _PacketData[], int PacketLength) 
{ 
  byte _CheckSumByte = 0x00; 
    for (int i = 0; i < PacketLength; i++) 
      _CheckSumByte ^= _PacketData[i]; 
  return _CheckSumByte; 
} 
 
Пакет который гасит все фары: 
byte AllOff2[16] =               {0x3F, 0x0F, 0xD0, 0x0C,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0xC8, 0xFF, 0x00}; 
 
В общем между включением фары и выключение можно ставить необходимую задержку. 
 
Пакеты для всех фар (мне не жалко,:bye:  все было слоггированно своей прогой): 
 
byte AllOff[5] =                 {0x00, 0x00, 0x00, 0x00, 0x00}; //выключить все фары 
byte lowBeamRight[5] =           {0x00, 0x20, 0x00, 0x00, 0x00}; //Фара ближнего света правая  
byte lowBeamLeft[5] =            {0x00, 0x10, 0x00, 0x00, 0x00}; //Фара ближнего света левая   
byte highBeamLeft[5] =           {0x40, 0x00, 0x00, 0x00, 0x00}; //фара дальнего света левый  
byte highBeamRight[5] =          {0x20, 0x00, 0x00, 0x00, 0x00}; //фара дальнего света  правый   
byte backTurnLeft[5] =           {0x00, 0x00, 0x80, 0x00, 0x00}; //Указатель поворота задний левый + боковой  
byte backTurnRight[5] =          {0x00, 0x00, 0x00, 0x02, 0x00}; //Указатель поворота задний правый + боковой  
byte frontTurnLeft[5] =          {0x00, 0x00, 0x00, 0x40, 0x00}; //Указатель поворота передний левый    
byte frontTurnRight[5] =         {0x00, 0x00, 0x40, 0x00, 0x00}; //Указатель поворота передний правый  
byte StopLeft[5] =               {0x08, 0x00, 0x00, 0x00, 0x00}; //Стоп-сигнал левый  
byte StopRight[5] =              {0x10, 0x00, 0x00, 0x00, 0x00}; //Стоп-сигнал правый  
byte StopCenter[5] =             {0x00, 0x00, 0x10, 0x00, 0x00}; //Стоп-сигнал средний  
byte fogLeft[5] =                {0x00, 0x04, 0x00, 0x00, 0x00}; //Противотуманные фара левая передняя   
byte fogRight[5] =               {0x00, 0x40, 0x00, 0x00, 0x00}; //Противотуманные фара правая передняя  
byte fogLeftBack[5] =            {0x00, 0x00, 0x00, 0x04, 0x00}; //Противотуманные фара левая задняя  
byte fogRightBack[5] =           {0x00, 0x80, 0x00, 0x00, 0x00}; //Противотуманные фара правая задняя  
byte parkingBackLeft[5] =        {0x00, 0x00, 0x08, 0x00, 0x00}; //задний габаритный фонарь левый  
byte parkingBackRight[5] =       {0x00, 0x00, 0x00, 0x10, 0x00}; //задний габаритный фонарь правый  
byte parkingLeft[5] =            {0x00, 0x01, 0x00, 0x00, 0x00}; //передний габаритный фонарь левый +  (глазки левые) 
byte parkingRight[5] =           {0x00, 0x00, 0x20, 0x00, 0x00}; //передний габаритный фонарь правый + (глазки правые) 
byte reverseLeft[5] =            {0x00, 0x08, 0x00, 0x00, 0x00}; //задний ход левый   
byte reversRight[5] =            {0x00, 0x00, 0x00, 0x80, 0x00}; //задний ход правый  
byte backlightLeft[5] =          {0x00, 0x00, 0x04, 0x00, 0x00}; //подсветка номера  
byte backlightRight[5] =         {0x00, 0x00, 0x00, 0x00, 0x04}; //подсветка номера 
 Как то так :pleasantry:  
	 |