Сделал управление по шине ibus управление всеми фарами автомобиля BMW E39 рестайлинг.
+ mcz33290. Управление морганием фар с кнопок руля R/T , Dial и открытие , закрытие. Если будет интерес выложу полный исходник.
Проблема в том что необходимо использовать скорость 9600 и проверку четности 8E1. В некоторых arduino есть хардварные порты и они поддерживают это. Но я
и софтварный порт. Поэтому пришлось искать выход из ситуации. В результате поиска нашел библиотеку CustomSoftwareSerial которая поддерживала нужный функционал.
Код:
Инициализация порта:
#include <CustomSoftwareSerial.h>
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}; //подсветка номера