Попробовал сегодня через write - то же самое, данных нет...смотрю паралельно через адаптер Рольфа Реслера.
Отправлял через Serial1.write(data);
т.е. не побайтно как раньше, а сразу весь массив data.(разницы между побайтно и сразу все нет как я понимаю)
delach у тебя работает передача данных в шину ? Если да то по какой схеме\какой код используешь для отправки ?
Последний раз редактировалось neyro; 17.03.2010 в 15:26.
Сразу весь массив послать не получается, нужно побайтно причем с небольшой задержкой.
Функция для передачи:
Вызов функции:PHP код:
byte CH_RM_StatusResponse[6] = {0x18, 0x04, 0xFF, 0x02, 0x00, 0xE1};
void WriteIBUSmsg(byte DATA_to_Write[], int ByteCount) {
for (int i=0; i<ByteCount; i++) {
Serial.write(DATA_to_Write[i]);
delay(2);
}
}
С задержкой в 1мс тоже работает но кол-во ошибок заметно возрастает.PHP код:
WriteIBUSmsg(CH_RM_StatusResponse, 6);
[QUOTE=neyro;54347]Адаптер реслера рабочий, у меня программа написанна на c++ И полностью эмулирует сд-ченжер. Это я к тому, что уж точно не в нем и разницы между мелексисом\адаптерами на транзисторах\оптопарах нет.
п.с. Вам не все равно кто и какие цели приследуют ? Если кто-то сможет заработать на этом деньги-это его право и его успех...какая разница то остальным ? Если уж что-то писать на форуме то писать по существу, а не фигней страдать.
п.п.с. насчет благотворительности-готов предложить денежное вознаграждение тому(только Москва- встречаемся(подъеду куда надо), Вы демонстрируете, что схема работает с arduino nano duo, я отдаю деньги..все просто) кто поможет заставить работать ардуино с шиной Ibus, если уж дело в этом.[/QUOT
Извините, а можно по подробнее про эмулятор чейнжера. Или ссылочку..
Последний раз редактировалось Chip; 08.03.2017 в 03:52.
доброго времяни всем, тоже озадачился проблемой K-bus, хочу читать и отправлять, пытаюсь с мастерить чтото типа CAN модуля для сигнализации....
использую микросхему 9243a данные какието читаю но сравнить несчем...
еще ктонибудь может объяснить нубу как вообще формируеться пакет данных тут...
побайтно
1 ID устройства которое "говорит"
2 длинна
3 ID "слушателя"...
4далее сама команда
5 контрольная сумма (как она вычисляеться? и из чего? )
хочу разобраться как читать шину правильно где начало сообщения и его конец, как я понимаю они могут быть разной длинны тк можно и на дисплей одометра чето вывести... типа hELLO WORLD
использую arduino nano new soft serial и SI9243AEY http://pdf1.alldatasheet.com/datashe...SI9243AEY.html
я вообще новичек не ругайте сильно...
Последний раз редактировалось xaxexa; 26.03.2014 в 19:39.
блин чето я с мыслями немогу собраться как реализовать поиск сообщения в шине если допустим по какойто причине я начал принимать сообщение не с начала
вот например идут данные сообщение выделено слешами
0x68, 0x32, 0x10, 0x1E, //0x50, 0x04, 0x68, 0x3B, 0x01, 0x06,// 0x50, 0x04, 0x68, 0x3B, 0x11, 0x16
мне надо первые 4 байта проигнорить потом читать....
в общим вот че у меня получилось, читает пакеты без отказно, если пакет принят не сначала игнорит его... если пакет более 20 байт тоже игнорит его, скетч для ардуино мега... тк через софтсериал неработает чето нифига....
Код:byte IGNITIONON[5] = {0x80, 0x04, 0xBF, 0x11, 0x02}; ключ - зажигание byte IGNITIONOFF[5] = {0x80, 0x04, 0xBF, 0x11, 0x00}; ключ - выключено byte ARMED[5] = {0x00, 0x04, 0xBF, 0x72, 0x12}; // КЛЮЧ - ЗАКРЫТЬ byte DISARMED[5] = {0x00, 0x04, 0xBF, 0x72, 0x22}; // КЛЮЧ ОТКРЫТЬ byte DOORS[4] = {0x00, 0x05, 0xBF, 0x7A}; // ДВЕРИ byte RUCHNIKUP[10] = {0x80, 0x09, 0xBF, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04}; //РУЧНИК ПОДНЯТ byte RUCHNIKDOWN[10] = {0x80, 0x09, 0xBF, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04}; //РУЧНИК ОТПУЩЕН void setup() { pinMode(2, OUTPUT); //зажигание + digitalWrite(2, LOW); pinMode(3, OUTPUT); //двери - digitalWrite(3, HIGH); pinMode(4, OUTPUT); //ручник - digitalWrite(4, HIGH); pinMode(5, OUTPUT); //событие +/- digitalWrite(5, HIGH); pinMode(6, OUTPUT); //тормоз + digitalWrite(6, LOW); pinMode(7, OUTPUT); //багажник - digitalWrite(7, HIGH); pinMode(8, OUTPUT); //капот - digitalWrite(8, HIGH); pinMode(9, OUTPUT); //поставлен на охрану digitalWrite(9, HIGH); pinMode(10, OUTPUT); //снят с охраны digitalWrite(10, HIGH); Serial.begin(9600); // открываем порт для передачи в ПК Serial1.begin(9600); // настройка порта IBUS } void loop() { ReadIBUSmsg(); } boolean ReadIBUSmsg() { boolean recive=0; byte IBUSbyte[20]; int len = 0; while(Serial1.available() > 0 && recive == 0 ) { //byte IBUSbyte[20]; IBUSbyte[0] = Serial1.read(); //читаем первый бит while (recive == 0) { if(Serial1.available() > 0) { IBUSbyte[1] = Serial1.read(); //читаем длинну сообщения recive = 1; } delay(10); } recive == 0; len = IBUSbyte[1]+1; int i=2; if(len==0||len>0x10) { i=2; while(Serial1.available() > 0) { IBUSbyte[i] = Serial1.read(); //читаем длинну сообщения i++; } break; } i=2; while(i<=len)//читам сообщение { if(Serial1.available() > 0) { IBUSbyte[i] = Serial1.read(); i++; delay(10); } } if (IBUSbyte[len] == CalcXOR(IBUSbyte))// проверяем контрольную сумму { Serial.print("MESSAGE GOOD "); for(int i=0; i <= len; i++) { Serial.print("0x"); Serial.print(IBUSbyte[i],HEX); Serial.print(", "); } Serial.println(" "); //digitalWrite(2,LOW); //delay(10); recive=1; } else { //digitalWrite(4,LOW); //delay(10); Serial.print("check summ wrong"); Serial.println(""); recive=0; } } if(recive == 1) { len=len-1; if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(2,HIGH);} //зажигание if(memcmp(IBUSbyte, IGNITIONOFF, len) == 0 ){digitalWrite(2,LOW);} //зажигание выключено if(memcmp(IBUSbyte, DOORS, 4) == 0 ) //двери { if(IBUSbyte[4]==0x20 || IBUSbyte[4]==0x60){digitalWrite(3,LOW);} if(IBUSbyte[4] > 0x20 && IBUSbyte[4] < 0x30){digitalWrite(3,HIGH);} if(IBUSbyte[4] > 0x60 && IBUSbyte[4] < 0x70){digitalWrite(3,HIGH);} } if(memcmp(IBUSbyte, RUCHNIKUP, len) == 0 ){digitalWrite(4,LOW);} //ручник поднят if(memcmp(IBUSbyte, RUCHNIKDOWN, len) == 0 ){digitalWrite(4,HIGH);} //ручник отпущен //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(5,LOW);} //событие //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(5,HIGH);} //событие //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(6,HIGH);} //тормоз Нажат //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(6,LOW);} //тормоз отупщен //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(7,LOW);} //багажник открыт //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(7,HIGH);} //багажник //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(8,LOW);} //капот открыт //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(8,HIGH);} //капот if(memcmp(IBUSbyte, ARMED, len) == 0 ){digitalWrite(9,LOW);delay(300);digitalWrite(9,HIGH);} //на охране if(memcmp(IBUSbyte, DISARMED, len) == 0 ){digitalWrite(10,LOW);delay(300);digitalWrite(10,HIGH);} //снят с охраны } } byte CalcXOR(byte checksumm[20]) { byte checksum = 0; for(int i = 0; i <= checksumm[1]; i++) { checksum ^= checksumm[i]; } return checksum; }
пасиба огромное Xander'у за основу брал его скетч
там где идет сравнение массивов то что закоментированно это я не нашел сообщение в дальнейшем если получиться исправлю
суть штуки это чтото типа кан модуль для автосигнализации...
привет всем, у меня есть маленькая проблема с мультифункциональным руля.у меня BMW E36 стоит CD43 Bussines Radio которая поддерживает
I-bus 7 пин.также у меня стоит руль от E39
Сохранить в Альбом
я севодня перерыл весь интернет но не смог найти как прочитать информации с этого руля для конвертации информации в магнитафон.
нашел маленький скетч как читать вовсе с таких девайсов
<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#include <wire.h>
#include <softwareserial.h>
SoftwareSerial mySerial(18, 19); // 7 is Rx, 8 is Tx
byte IBUSbyte[40];
const int CS_LWAKE = 4;
void setup()
{
Serial.begin(9600, SERIAL_8E1);
mySerial.begin(115200);
mySerial.println("--IBUS read test--");
pinMode (CS_LWAKE, OUTPUT); // initialize pin.
digitalWrite (CS_LWAKE, HIGH); // write pin high.
}
void loop() {
readIBUS();
}
void readIBUS() {
if (Serial.available()>0){
byte INbyte = Serial.read();
mySerial.print(INbyte, HEX);
}
}
но инвормация не идиот
я подключать пин ут руля в RX18 иза того што у меня ардуино мега.
кто делал такое или кто знает что делать помогите .прошу прощение за правописание это Google Translate.
доброго времени суток, ребятки.
На просторах сети были найдены тут ниже приведенный код:
И тут на вашем форуме этот код:PHP код:
#include <OLED_I2C.h>
OLED oled(SDA, SCL, 8);
extern uint8_t SmallFont[];
int IBUSreceiveByte = 0;
byte IBUSbyte[7] = {0,0,0,0,0,0,0};
int ButtonPressed = 0;
int KeyID = 0;
byte MINUS_DOWN[7] = {0, 0x50, 0x04, 0x68, 0x32, 0x10, 0x1E}; // - BUTTON PRESS
byte PLUS_DOWN[7] = {0, 0x50, 0x04, 0x68, 0x32, 0x11, 0x1F}; // + BUTTON PRESS
byte PREV_DOWN1[7] = {0, 0x50, 0x04, 0x68, 0x3B, 0x08, 0x0F}; // < BUTTON PRESS 1
byte PREV_DOWN2[7] = {0, 0x50, 0x04, 0xC8, 0x3B, 0x08, 0xAF}; // < BUTTON PRESS 2
byte NEXT_DOWN1[7] = {0, 0x50, 0x04, 0x68, 0x3B, 0x01, 0x06}; // > BUTTON PRESS 1
byte NEXT_DOWN2[7] = {0, 0x50, 0x04, 0xC8, 0x3B, 0x01, 0xA6}; // > BUTTON PRESS 2
byte VOICE_DOWN[7] = {0, 0x50, 0x04, 0xC8, 0x3B, 0x80, 0x27}; // VOICE BUTTON PRESS
byte RT_DOWN1[7] = {0, 0x50, 0x04, 0xFF, 0x3B, 0x00, 0x90}; // R/T BUTTON PRESS 1
byte RT_DOWN2[7] = {0, 0x50, 0x04, 0xFF, 0x3B, 0x40, 0xD0}; // R/T BUTTON PRESS 2
void setup() {
Serial1.begin(9600);
oled.begin();
oled.setFont(SmallFont);
oled.print("BMW NEXUS 7", CENTER, 0);
oled.print("Key:", LEFT, 20);
oled.print("In Load Hall 5v", LEFT, 45);
oled.print("OFF OFF OFF OFF", LEFT, 55);
oled.update();
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, INPUT);
pinMode(7, OUTPUT);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
Keyboard.begin();
Media.begin();
//Remote.begin();
//System.begin();
}
void loop() {
// вход
if (digitalRead(6) == LOW) {
PrintState("ON ", 0);
digitalWrite(5, HIGH); // выход нагрузки
PrintState("ON ", 30);
digitalWrite(7, HIGH); // hall датчик
PrintState("ON ", 60);
digitalWrite(4, HIGH); // выход 5 вольт
PrintState("ON ", 90);
} else {
PrintState("OFF", 0);
digitalWrite(5, LOW); // выход нагрузки
PrintState("OFF", 30);
digitalWrite(7, LOW); // hall датчик
PrintState("OFF", 60);
digitalWrite(4, LOW); // выход 5 вольт
PrintState("OFF", 90);
}
// кнопки руля
if (Serial1.available() && ButtonPressed == 0) {
TryReadIBUSmsg();
}
// нажата кнопка
if (ButtonPressed == 1) {
switch (KeyID) {
case 100: // если клавиша не опознана или есть ошибки в шине при чтении
Media.releaseAll();
Keyboard.releaseAll();
PrintKey("UNKNOWN key");
PrintCode();
break;
case 1:
Media.write(MEDIA_VOLUME_UP);
PrintKey("VOL + key");
PrintCode();
break;
case 2:
Media.write(MEDIA_VOLUME_DOWN);
PrintKey("VOL - key");
PrintCode();
break;
case 11:
Media.write(MEDIA_NEXT);
PrintKey("NEXT TRACK key");
PrintCode();
break;
case 21:
Media.write(MEDIA_PREVIOUS);
PrintKey("PREV TRACK key");
PrintCode();
break;
case 31:
Media.write(MEDIA_PLAY_PAUSE);
PrintKey("VOICE key");
PrintCode();
break;
case 41:
//Media.write(MEDIA_BROWSER_BACK);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
PrintKey("R/T key");
PrintCode();
break;
}
ButtonPressed = 0;
Serial1.flush();
}
delay(10);
}
// чтение I-Bus шины
void TryReadIBUSmsg() {
IBUSreceiveByte = Serial1.read();
if (IBUSreceiveByte==0x50) {
IBUSbyte[1]=0x50;
for (int i=2; i<=6; i++) {
IBUSbyte[i] = Serial1.read();
delay(10);
}
KeyID=100;
if(memcmp(IBUSbyte, PLUS_DOWN, 7) == 0) { KeyID=1; }
if(memcmp(IBUSbyte, MINUS_DOWN, 7) == 0) { KeyID=2; }
if(memcmp(IBUSbyte, NEXT_DOWN1, 7) == 0) { KeyID=11; }
if(memcmp(IBUSbyte, NEXT_DOWN2, 7) == 0) { KeyID=11; }
if(memcmp(IBUSbyte, PREV_DOWN1, 7) == 0) { KeyID=21; }
if(memcmp(IBUSbyte, PREV_DOWN2, 7) == 0) { KeyID=21; }
if(memcmp(IBUSbyte, VOICE_DOWN, 7) == 0) { KeyID=31; }
if(memcmp(IBUSbyte, RT_DOWN1, 7) == 0 ) { KeyID=41; }
if(memcmp(IBUSbyte, RT_DOWN2, 7) == 0 ) { KeyID=41; }
ButtonPressed=1;
} else {
ButtonPressed=0;
}
Serial1.flush();
}
// печатаем код из I-Bus
void PrintCode() {
int x=0;
for (int i=1; i<=6; i++) {
oled.print(String(IBUSbyte[i],HEX), x, 30);
x+=20;
}
oled.update();
}
void PrintKey(String text) {
oled.print(text, 30, 20);
oled.update();
}
void PrintState(String text, int x) {
oled.print(text, x, 55);
oled.update();
}
Пытаюсь разобраться, читаю вторые сутки инфу по сабжу, но пока пробелов в понимании процесса слишком много.PHP код:
#define CHECK_MS 5
#define DOUBLE_MS 400
#define HOLD_MS 1200
#define NO_B 839 //nothing pressed
#define MODE_B 662 // MODE
#define NXTU_B 509 // NEXT UP
#define NXTD_B 380 // NEXT DOWN
#define MUTE_B 273 // MUTE
#define VOLU_B 180 // VOLUME UP
#define VOLD_B 105 // VOLUME DOWN
#define alpPin 7
boolean volUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,0,1,1,0,1,1, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean volDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,1,0,1, 1,1,1,1,0,1,1,0, 1,1,0,1,0,1,0,1};
boolean mute[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,1,0,1, 1,1,1,0,1,1,1,0, 1,1,0,1,0,1,0,1};
boolean pstUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,0,1,0,1,1, 1,1,1,0,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean pstDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,0,1, 1,1,1,1,1,1,1,1, 0,1,0,1,0,1,0,1};
boolean source[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean trkUp[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 1,0,1,1,1,0,1,1, 1,1,0,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean trkDn[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,1,1,0,1, 1,1,1,1,1,0,1,0, 1,1,0,1,0,1,0,1};
boolean power[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,1,0,1,1,1, 1,1,1,0,1,0,1,1, 0,1,0,1,0,1,0,1};
boolean entPlay[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,0,1,0,1,1,1, 1,1,1,1,1,1,0,1, 0,1,0,1,0,1,0,1};
boolean bandProg[48] = {1,1,0,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,0,1,0,1,0,1,1, 0,1,1,0,1,0,1,1, 1,1,1,1,0,1,1,1, 0,1,0,1,0,1,0,1};
boolean spFlag = 0;
boolean dpFlag = 0;
boolean hpFlag = 0;
int button = 0;
int spbutton = 0;
/*
0-none
1-mode
2-track +
3-track -
4-mute
5-vol+
6-vol-
*/
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
}
void loop() {
static unsigned long oldTime = 0;
int switchStatus = 0;
if (millis() >= oldTime + CHECK_MS) {
oldTime = millis();
switchStatus = CheckSwitch();
if (switchStatus == 0) {
//no button press
} else if (switchStatus == 1) {
// single press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // mode
modeSend();
break;
case 2: // next up
trkUpSend();
break;
case 3: // next down
trkDnSend();
break;
case 4: // mute
muteSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 2) {
//double press
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // mode
sourceSend();
break;
case 2: // next up
trkUpSend();
break;
case 3: // next down
trkDnSend();
break;
case 4: // mute
muteSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
} else if (switchStatus == 3) {
//hold
switch (spbutton) {
case 0: // no butto, why are wh here
break;
case 1: // mode
modeSend();
break;
case 2: // next up
trkUpSend();
break;
case 3: // next down
trkDnSend();
break;
case 4: // mute
muteSend();
break;
case 5: // vol up
volUpSend();
break;
case 6: // vol down
volDnSend();
break;
}
}
}
}
// Service routine called by a timer interrupt
int CheckSwitch() {
static uint16_t State = 0; // Current debounce status
static int curTime = 0;
State=(State<<1) | !RawKeyPressed() | 0xe000;
if (!spFlag) {
if (hpFlag) {
if (State == 0xe000) {
return 3;
} else {
hpFlag = 0;
}
}
if (State==0xf000) {
spFlag = 1;
hpFlag = 1;
dpFlag = 1;
curTime = 0;
spbutton = button;
return 0;
}
}
if (hpFlag && State != 0xe000) {
hpFlag = 0;
}
if (spFlag && hpFlag && curTime > HOLD_MS/CHECK_MS) {
spFlag = 0;
dpFlag = 0;
return 3;
} else if (spFlag && dpFlag && State == 0xf000 && curTime < DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 2;
} else if (spFlag && !hpFlag && curTime > DOUBLE_MS) {
spFlag = 0;
hpFlag = 0;
dpFlag = 0;
return 1;
} else {
curTime = curTime + CHECK_MS;
return 0;
}
}
boolean RawKeyPressed() {
int anaPin = 0;
anaPin = analogRead(0);
if (anaPin > NO_B - 20) {
button = 0;
return 0;
} else if (anaPin > MODE_B - 20 && anaPin < MODE_B + 20 ) {
button = 1;
return 1;
} else if (anaPin > NXTU_B - 20 && anaPin < NXTU_B + 20 ) {
button = 2;
return 1;
} else if (anaPin > NXTD_B - 20 && anaPin < NXTD_B + 20 ) {
button = 3;
return 1;
} else if (anaPin > MUTE_B - 20 && anaPin < MUTE_B + 20 ) {
button = 4;
return 1;
} else if (anaPin > VOLU_B - 20 && anaPin < VOLU_B + 20 ) {
button = 5;
return 1;
} else if (anaPin < VOLD_B + 20 ) {
button = 6;
return 1;
} else {
button = 0;
return 0;
}
}
//-----------SOURCE------------------
void sourceSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (source[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------MODE-----------------------------------------------
void modeSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (entPlay[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------NEXT UP-----------------------------------------------
void trkUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------NEXT DOWN----------------------------------------------
void trkDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (trkDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------MUTE---------------------------------------------------
void muteSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (mute[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL UP-----------------------------------------------
void volUpSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volUp[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
//---------VOL DOWN-----------------------------------------------
void volDnSend() {
//first send 8ms high
digitalWrite(alpPin, HIGH);
delay(8);
// send 4.5ms low
digitalWrite(alpPin, LOW);
delayMicroseconds(4500);
for (int i = 0; i <= 47; i++) {
//send bit for 0.5ms
if (volDn[i] == 1 ) {
digitalWrite(alpPin, HIGH);
} else {
digitalWrite(alpPin, LOW);
}
delayMicroseconds(500);
// wait 0.5ms
digitalWrite(alpPin, LOW);
delayMicroseconds(500);
}
// send 41ms low
digitalWrite(alpPin, LOW);
delay(41);
}
Суть самого вопроса какова, хочу читать с I-BUS кнопки, как в первом примере, и управлять alpine магнитолой как во втором. Но так как в коде достаточно других функций разобраться с разбегу пока никак не выходит.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)