more feedback in and out
This commit is contained in:
parent
732b91caef
commit
81cebe6472
@ -64,6 +64,7 @@ FlexCAN CANbus(CAN_speed);
|
|||||||
// FLEXCAN0_MCR &= ~FLEXCAN_MCR_SRX_DIS;
|
// FLEXCAN0_MCR &= ~FLEXCAN_MCR_SRX_DIS;
|
||||||
// OneWire
|
// OneWire
|
||||||
uint8_t addr[8];
|
uint8_t addr[8];
|
||||||
|
uint8_t data[8];
|
||||||
uint8_t buffer[DS2406_BUF_LEN];
|
uint8_t buffer[DS2406_BUF_LEN];
|
||||||
uint8_t readout,trig_event,event_idx,tmp;
|
uint8_t readout,trig_event,event_idx,tmp;
|
||||||
OneWire OW_1(OW_pin);
|
OneWire OW_1(OW_pin);
|
||||||
@ -136,7 +137,6 @@ int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t* data, uint8_t data
|
|||||||
txmsg.id = forgeid(prio, dst, cmd, type);
|
txmsg.id = forgeid(prio, dst, cmd, type);
|
||||||
txmsg.len = data_size;
|
txmsg.len = data_size;
|
||||||
for (uint8_t i = 0; i < txmsg.len; i++) { txmsg.buf[i] = data[i]; }
|
for (uint8_t i = 0; i < txmsg.len; i++) { txmsg.buf[i] = data[i]; }
|
||||||
CANbus.write(txmsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data, uint8_t type=0){
|
int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data, uint8_t type=0){
|
||||||
@ -144,7 +144,6 @@ int CAN_send(uint8_t prio, uint8_t dst, uint8_t cmd, uint8_t data, uint8_t type=
|
|||||||
//txmsg.len = sizeof(data);
|
//txmsg.len = sizeof(data);
|
||||||
txmsg.len = 1;
|
txmsg.len = 1;
|
||||||
txmsg.buf[0] = data;
|
txmsg.buf[0] = data;
|
||||||
CANbus.write(txmsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -206,20 +205,14 @@ for (uint8_t i = 0; action_map[i].tag != 0 ; i++) {
|
|||||||
}
|
}
|
||||||
bool new_state = digitalRead(outputs[action_map[i].outputs_idx].address);
|
bool new_state = digitalRead(outputs[action_map[i].outputs_idx].address);
|
||||||
if ( old_state == new_state) {
|
if ( old_state == new_state) {
|
||||||
switch ( new_state ) {
|
data[0]=outputs[action_map[i].outputs_idx].address;
|
||||||
case 0:
|
data[1]=new_state ^ outputs[action_map[i].outputs_idx].invert;
|
||||||
CAN_send(NOTIFY, 0xFF, OFF, action_map[i].outputs_idx);
|
CAN_send(NOTIFY, 0x0, STATE_OUT, data, 2);
|
||||||
case 1:
|
|
||||||
CAN_send(NOTIFY, 0xFF, ON, action_map[i].outputs_idx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
switch ( new_state ) {
|
data[0]=outputs[action_map[i].outputs_idx].address;
|
||||||
case 0:
|
data[1]=new_state ^ outputs[action_map[i].outputs_idx].invert;
|
||||||
CAN_send(NOTIFY, 0xFF, T_OFF, action_map[i].outputs_idx);
|
CAN_send(NOTIFY, 0x0, NEWSTATE_OUT, data, 2);
|
||||||
case 1:
|
|
||||||
CAN_send(NOTIFY, 0xFF, T_ON, action_map[i].outputs_idx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,7 +291,7 @@ void loop(void)
|
|||||||
Serial.print("Found a device: ");
|
Serial.print("Found a device: ");
|
||||||
print_OW_Device(addr);
|
print_OW_Device(addr);
|
||||||
Serial.println();
|
Serial.println();
|
||||||
CAN_send(NOTIFY, 0xFF, NEW_TWID, addr, sizeof(addr));
|
CAN_send(NOTIFY, 0x0, NEW_TWID, addr, sizeof(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -334,9 +327,17 @@ void loop(void)
|
|||||||
Serial.print(switches[s_idx].nick);
|
Serial.print(switches[s_idx].nick);
|
||||||
if (readout & 0x08) {
|
if (readout & 0x08) {
|
||||||
Serial.println(F(" is now OFF"));
|
Serial.println(F(" is now OFF"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=0;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
|
CANbus.write(txmsg);
|
||||||
send_event(switches[s_idx].event_tag[0]);
|
send_event(switches[s_idx].event_tag[0]);
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F(" is now ON"));
|
Serial.println(F(" is now ON"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=1;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
|
CANbus.write(txmsg);
|
||||||
send_event(switches[s_idx].event_tag[1]);
|
send_event(switches[s_idx].event_tag[1]);
|
||||||
}
|
}
|
||||||
action[0] = 0;
|
action[0] = 0;
|
||||||
@ -346,9 +347,17 @@ void loop(void)
|
|||||||
Serial.print(switches[s_idx].nick);
|
Serial.print(switches[s_idx].nick);
|
||||||
if (readout & 0x04) {
|
if (readout & 0x04) {
|
||||||
Serial.println(F(" is now OFF"));
|
Serial.println(F(" is now OFF"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=2;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
|
CANbus.write(txmsg);
|
||||||
send_event(switches[s_idx].event_tag[2]);
|
send_event(switches[s_idx].event_tag[2]);
|
||||||
} else {
|
} else {
|
||||||
Serial.println(F(" is now ON"));
|
Serial.println(F(" is now ON"));
|
||||||
|
data[0]=switches[s_idx].nick;
|
||||||
|
data[1]=3;
|
||||||
|
CAN_send(NOTIFY, 0x0, STATE_IN, data, 2);
|
||||||
|
CANbus.write(txmsg);
|
||||||
send_event(switches[s_idx].event_tag[3]);
|
send_event(switches[s_idx].event_tag[3]);
|
||||||
}
|
}
|
||||||
action[1] = 0;
|
action[1] = 0;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
enum out_type { GPIO, PWM, OW, I2C, SPI, WS2811, DMX, NOP };
|
enum out_type { GPIO, PWM, OW, I2C, SPI, WS2811, DMX, NOP };
|
||||||
enum event_type { LOCAL, SEND};
|
enum event_type { LOCAL, SEND};
|
||||||
|
|
||||||
enum cmd_type { OFF, ON, VALUE, TOGGLE, T_OFF, T_ON, BIN_DUMP, NEW_TWID };
|
enum cmd_type { OFF, ON, VALUE, TOGGLE, STATE_OUT, STATE_IN, NEWSTATE_OUT, NEWSTATE_IN, BIN_DUMP, NEW_TWID };
|
||||||
enum telegram_prio { ALERT, EVENT, NOTIFY, INFO };
|
enum telegram_prio { ALERT, EVENT, NOTIFY, INFO };
|
||||||
|
|
||||||
typedef struct CAN_telegram_t {
|
typedef struct CAN_telegram_t {
|
||||||
|
@ -35,6 +35,8 @@ static OW_switch_t switches[N_SWITCHES] PROGMEM={
|
|||||||
//{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 3, 3, 4, 4 } },
|
//{ 21, { 0x12, 0x86, 0xB4, 0x54, 0x0, 0x0, 0x0, 0x5F }, { 3, 3, 4, 4 } },
|
||||||
{ 22, { 0x12, 0x84, 0xAD, 0x4F, 0x0, 0x0, 0x0, 0x12 }, { 1, 1, 2, 2 } }, // EZ -> Küche
|
{ 22, { 0x12, 0x84, 0xAD, 0x4F, 0x0, 0x0, 0x0, 0x12 }, { 1, 1, 2, 2 } }, // EZ -> Küche
|
||||||
// { 31, { 0x12, 0x88, 0xDD, 0x53, 0x0, 0x0, 0x0, 0x28 }, { 210, 211, 220, 221 } }, // Roldenschalter (A - UP, B - DOWN)
|
// { 31, { 0x12, 0x88, 0xDD, 0x53, 0x0, 0x0, 0x0, 0x28 }, { 210, 211, 220, 221 } }, // Roldenschalter (A - UP, B - DOWN)
|
||||||
|
{ 31, { 0x12, 0x8F, 0xE2, 0x86 ,0x0, 0x0, 0x0, 0xC6}, { 220, 221, 210, 211 } } // Roldenschalter (A - UP, B - DOWN)
|
||||||
|
|
||||||
};
|
};
|
||||||
static uint8_t switches_state[N_SWITCHES];
|
static uint8_t switches_state[N_SWITCHES];
|
||||||
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
||||||
@ -45,13 +47,8 @@ static outputs_t outputs[N_OUTPUTS] PROGMEM={
|
|||||||
{ GPIO, 22, 0, true }, // 3
|
{ GPIO, 22, 0, true }, // 3
|
||||||
{ GPIO, 17, 0, true }, // 4
|
{ GPIO, 17, 0, true }, // 4
|
||||||
{ GPIO, 16, 0, true }, // 5
|
{ GPIO, 16, 0, true }, // 5
|
||||||
<<<<<<< HEAD
|
|
||||||
{ GPIO, 9, 255, true }, // 6
|
{ GPIO, 9, 255, true }, // 6
|
||||||
{ GPIO, 10, 0, true }, // 7
|
{ GPIO, 10, 0, true }, // 7
|
||||||
=======
|
|
||||||
{ GPIO, 19, 0, true }, // 6
|
|
||||||
{ GPIO, 18, 0, true }, // 7
|
|
||||||
>>>>>>> led
|
|
||||||
{ NOP, 0xFF, 0, 0 }
|
{ NOP, 0xFF, 0, 0 }
|
||||||
};
|
};
|
||||||
static uint8_t outputs_state[N_OUTPUTS];
|
static uint8_t outputs_state[N_OUTPUTS];
|
||||||
@ -72,10 +69,10 @@ static event_t tx_events[N_EVENTS] PROGMEM={
|
|||||||
{ 8, 0x03, 0x03, TOGGLE, 0x08},
|
{ 8, 0x03, 0x03, TOGGLE, 0x08},
|
||||||
{ 11, 0x03, 0x01, ON, 0x01},
|
{ 11, 0x03, 0x01, ON, 0x01},
|
||||||
{ 12, 0x03, 0x01, ON, 0x02},
|
{ 12, 0x03, 0x01, ON, 0x02},
|
||||||
{ 210, 0x03, 0xff, OFF, 0x06},
|
{ 210, 0x03, 0xff, OFF, 0x04},
|
||||||
{ 211, 0x03, 0xff, ON, 0x06},
|
{ 211, 0x03, 0xff, ON, 0x04},
|
||||||
{ 220, 0x03, 0xff, OFF, 0x07},
|
{ 220, 0x03, 0xff, OFF, 0x05},
|
||||||
{ 221, 0x03, 0xff, ON, 0x07},
|
{ 221, 0x03, 0xff, ON, 0x05},
|
||||||
{ 255, 0x03, 0xff, OFF, 0x09},
|
{ 255, 0x03, 0xff, OFF, 0x09},
|
||||||
{ 254, 0x03, 0xff, ON, 0x09},
|
{ 254, 0x03, 0xff, ON, 0x09},
|
||||||
{ 10, 0x03, 0xff, TOGGLE, 0x01},
|
{ 10, 0x03, 0xff, TOGGLE, 0x01},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user