Ты бы всю функцию принимающую данные выложил я на ошибки проверю
Забавно, но проблема разрешилась и действительно софтверно. Я попробовал способ не через TX RX пины, а через цифровые с SoftwareSerial, в конструкторе включил инверсию логики. И в правду все заработало... Вот тока теперь печатку нужно перепаивать((( Но это малое горе, по сравнению с таким счастьем)))
Последний раз редактировалось darkduke; 16.03.2012 в 12:34.
Код:#include <SoftwareSerial.h> //#include <NewSoftSerial.h> #include <MsTimer2.h> #define DELAY_ON 1000 //delay before switch-on event #define DELAY_OFF 10000 //delay before switch-off event #define DELAY_SWITCH 0 //delay before switch event #define RELAY_PORT 9 #define POWER_5V_PIN 5 #define IGN_LED 13 #define RX_PIN 4 #define TX_PIN 3 //NewSoftSerial IBUS(RX_PIN, TX_PIN); SoftwareSerial IBUS(RX_PIN, TX_PIN, true); struct pktTemplate { unsigned char src; unsigned char dst; unsigned char msglen; unsigned char msg[256]; }; #define RAD 0x68 //Radio #define IKE 0x80 //Instrument cluster electronics #define GLO 0xBF //Global, broadcast address #define BMBT 0xF0 //On-board monitor operating part static struct pktTemplate buttonMODETempl = {BMBT, RAD, 2, {0x48, 0x23}}; // BUTTON_MODE_PRESS int recvPacket(unsigned char *msg, int size) { static unsigned char buf[256]; static int cnt = 0; int avail = 0; while ((avail = IBUS.available()) > 0) { // get the new byte: buf[cnt++] = (unsigned char)IBUS.read(); Serial.println(buf[cnt-1],HEX); // parsing code here // return cnt; if (cnt > 256) { // VERY BIG PACKAGE. NEED ERASE DATA. memmove((void*)&buf[0], (void*)&buf[127], 128); cnt = 128; } } return 0; } void setup() { pinMode(POWER_5V_PIN, OUTPUT); // initialize +5V power pin for adapter pinMode(RELAY_PORT, OUTPUT); // initialize +5V power pin for relay digitalWrite(POWER_5V_PIN, HIGH); // Enable +5V power for adapter Serial.begin(9600); IBUS.begin(9600); } void loop() { unsigned char msg[256]; int read; if ((read = recvPacket(msg, 256)) > 0) { //...... some code } }
Я заметил только во время сборки монитора что некоторые пакеты читаются неправильно. Незнаю как бороться с этим вот вывод от MID
C0 0D 0E BC E0 42
C0 0D 8E BE E0 0F
C0 0D 8E BB E0 FF
C0 0D 0E BC E0 42
C0 0D 8E BE E0 0F
C0 0D 8E BB E0 FF
Это конечно же полная лажа, должны быть приблизительно такие пакеты:
C0 03 68 01 AA
C0 03 80 01 42
C0 03 C8 01 0A
Можно конечно парсить заведомо неправильную интерпритацию пакетов, но хотелось бы иначе. Если честно, я даже не знаю что делать с этим. Интересно то, что до этого я тестировал с монитором и его пакеты почти все читаются правильно, а вот любой другой девайс - такая вот шняга.
Последний раз редактировалось darkduke; 03.04.2012 в 13:30.
У меня возник еще один, вопрос, управление реле при помощи ардуино, когда приходит IBUS команда задней передачи. У меня есть слаботочное реле Takamisawa RY12W-K, которое вроде как для камеры хватает (1А держит), хочу подключить по такой схеме:
Если я подключу +12 к реле напрямую от аккумулятора это не грозит мне сгоревшим реле? Проверил на амперметре: потребляет 12МА
Так же интересно, можно ли его использовать для питпния монитора? Моник по амперметру потребляет 0.27А
Последний раз редактировалось darkduke; 19.03.2012 в 02:29.
Посмотри на самом реле его параметры должны быть описаны
Реле работает от 12в, так что ничего с ним не случится
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)