Сообщение от
delach
Можешь код выложить?
Код:
#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
Можно конечно парсить заведомо неправильную интерпритацию пакетов, но хотелось бы иначе. Если честно, я даже не знаю что делать с этим. Интересно то, что до этого я тестировал с монитором и его пакеты почти все читаются правильно, а вот любой другой девайс - такая вот шняга.