first run on Wohnzimmer :)

This commit is contained in:
2023-05-17 22:38:10 +02:00
parent d4130f5705
commit 9a45d811c7

View File

@@ -12,16 +12,16 @@ const uint32_t DEBUG_CAN_ID = 0x000;
struct can_frame _frame; struct can_frame _frame;
typedef struct struct Rule
{ {
uint32_t sourceDevId; uint16_t sourceDevId;
byte sourceMeyPinId; uint8_t sourceMeyPinId;
uint32_t targetDevId; uint16_t targetDevId;
byte targetMeyPinId; byte targetMeyPinId;
bool toggle; bool toggle;
bool inverse; bool inverse;
void InitSimple(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) void InitSimple(uint16_t sourceDevId, uint8_t sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{ {
this->sourceDevId = sourceDevId; this->sourceDevId = sourceDevId;
this->sourceMeyPinId = sourceMeyPinId; this->sourceMeyPinId = sourceMeyPinId;
@@ -31,7 +31,7 @@ typedef struct
inverse = false; inverse = false;
} }
void InitToggle(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) void InitToggle(uint16_t sourceDevId, uint8_t sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{ {
this->sourceDevId = sourceDevId; this->sourceDevId = sourceDevId;
this->sourceMeyPinId = sourceMeyPinId; this->sourceMeyPinId = sourceMeyPinId;
@@ -41,7 +41,7 @@ typedef struct
inverse = false; inverse = false;
} }
void InitToggleInverse(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) void InitToggleInverse(uint16_t sourceDevId, uint8_t sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId)
{ {
this->sourceDevId = sourceDevId; this->sourceDevId = sourceDevId;
this->sourceMeyPinId = sourceMeyPinId; this->sourceMeyPinId = sourceMeyPinId;
@@ -50,7 +50,7 @@ typedef struct
toggle = true; toggle = true;
inverse = true; inverse = true;
} }
} Rule; } ;
typedef struct typedef struct
{ {
@@ -93,7 +93,7 @@ struct RemotePinInfo
int16_t Count() int16_t Count()
{ {
if (this->next == NULL) return 1; if (this->next == NULL) return 1;
return this->next->Count() + 1; return this->next->Count() + 1;
} }
RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0) RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0)
@@ -136,7 +136,7 @@ PinState MeyPins[8];
bool flag = false; bool flag = false;
int32_t myDeviceId; int32_t myDeviceId;
Rule Rules[8]; Rule Rules[7];
MCP2515 mcp2515_0(PIN_PA2); MCP2515 mcp2515_0(PIN_PA2);
MCP2515 mcp2515_1(PIN_PA3); MCP2515 mcp2515_1(PIN_PA3);
@@ -147,23 +147,23 @@ void setup() {
SPI.begin(); SPI.begin();
Rules[0] = Rule(); Rules[0] = Rule();
Rules[0].InitToggle(0x1EC3, 1, 0x3D2D, 2); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[0].InitToggleInverse(0x051F, 5, 0x3D2D, 4); // Lichtschalter Wohnzimmer Licht 1
Rules[1] = Rule(); Rules[1] = Rule();
Rules[1].InitToggle(0xD8C0, 2, 0x3D2D, 2); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[1].InitToggleInverse(0x051F, 5, 0x3D2D, 3); // Lichtschalter Wohnzimmer Licht 2
Rules[2] = Rule(); Rules[2] = Rule();
Rules[2].InitToggle(0x1EC2, 3, 0x3D2D, 3); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[2].InitToggle(0x05df, 1, 0x3D2D, 4); // Licht 1 von Terassenschalter
Rules[3] = Rule(); Rules[3] = Rule();
Rules[3].InitToggle(0x1EC2, 4, 0x3D2D, 4); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[3].InitToggle(0x05df, 1, 0x3D2D, 3); // Licht 2 von Terassenschalter
Rules[4] = Rule(); Rules[4] = Rule();
Rules[4].InitToggle(0x1EC2, 5, 0x3D2D, 5); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[4].InitToggle(0x0769, 1, 0x3D2D, 7); // Eingangstür Papa Büro
Rules[5] = Rule(); Rules[5] = Rule();
Rules[5].InitToggle(0x1EC2, 6, 0x3D2D, 6); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[5].InitToggle(0x0769, 2,0x3D2D, 3); // Licht 1 Wochzimmer Eingangstür
Rules[6] = Rule(); Rules[6] = Rule();
Rules[6].InitToggle(0x1EC2, 7, 0x3D2D, 7); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed Rules[6].InitToggle(0x0769, 2,0x3D2D, 4); // Licht 2 Wochzimmer Eingangstür
Rules[7] = Rule();
Rules[7].InitToggle(0x1EC2, 8, 0x3D2D, 8); // should switch MeyPin #2 of Device 3D2D to the settet state of MeyPin #1 of 0x055F is changed
MeyPins[0] = PinState(); MeyPins[0] = PinState();
MeyPins[0].Init(PIN_PC7, (byte) 1); MeyPins[0].Init(PIN_PC7, (byte) 1);
@@ -213,12 +213,10 @@ void setup() {
for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++)
{ {
pinMode(MeyPins[i].pin_id, OUTPUT); pinMode(MeyPins[i].pin_id, OUTPUT);
// digitalWrite(MeyPins[i].pin_id, HIGH);
//delay(100);
digitalWrite(MeyPins[i].pin_id, LOW); digitalWrite(MeyPins[i].pin_id, LOW);
} }
CalculateMyDeviceId(); CalculateMyDeviceId();
SendSerialPackage(&mcp2515_0); SendSerialPackage(&mcp2515_0);
@@ -226,17 +224,10 @@ void setup() {
SendSerialPackage(&mcp2515_2); SendSerialPackage(&mcp2515_2);
SendSerialPackage(&mcp2515_3); SendSerialPackage(&mcp2515_3);
digitalWrite(PIN_PC6, HIGH);
} }
void ToggleDebug()
{
delay(500);
byte debugState = digitalRead(PIN_PC7)^true;
if (debugState)
digitalWrite(PIN_PC7, HIGH);
else
digitalWrite(PIN_PC7, LOW);
}
void loop() void loop()
@@ -290,19 +281,10 @@ void HandleMeyPinTriggeredCanPackage(can_frame *frame)
if (currentPinState == NULL) if (currentPinState == NULL)
{ {
int16_t test2[3];
test2[0] = 'S';
test2[1] = 'O';
test2[2] = 'S';
// SendDebugCanPackage(&mcp2515_3, test2, sizeof(test2) / sizeof(int16_t));
return; return;
} }
int16_t test[1];
test[0] = remotePinInfos.Count();
// SendDebugCanPackage(&mcp2515_3, test, sizeof(test) / sizeof(int16_t));
currentPinState->setPinState(frame->data[0], frame->data[1]); currentPinState->setPinState(frame->data[0], frame->data[1]);
@@ -340,14 +322,17 @@ void HandleTriggerMeypinCanPackage(can_frame *frame)
void HandleRules(can_frame *frame) void HandleRules(can_frame *frame)
{ {
if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) uint32_t canId = frame->can_id;
if (GetPackageType(canId) == SWITCH_TRIGGERED_CAN_ID)
{ {
uint8_t meyPin = frame->data[0];
uint8_t dState = (byte) frame->data[1];
for (int i = 0; i < sizeof(Rules) / sizeof(Rule); i++) for (int i = 0; i < sizeof(Rules) / sizeof(Rule); i++)
{ {
if ( Rules[i].sourceDevId == GetDeviceId(frame->can_id)) if ( Rules[i].sourceDevId == GetDeviceId(canId))
if (Rules[i].sourceMeyPinId == frame->data[0]) if (Rules[i].sourceMeyPinId == meyPin || Rules[i].sourceMeyPinId == 255)
HandleRule(&Rules[i], _frame.data[1] ); HandleRule(&Rules[i], dState );
} }
} }
} }
@@ -375,6 +360,7 @@ void HandleRule(Rule *rule, byte state)
SendDoTriggerSwitchCanPackage(&mcp2515_1, rule->targetDevId, rule->targetMeyPinId, pinState); SendDoTriggerSwitchCanPackage(&mcp2515_1, rule->targetDevId, rule->targetMeyPinId, pinState);
SendDoTriggerSwitchCanPackage(&mcp2515_2, rule->targetDevId, rule->targetMeyPinId, pinState); SendDoTriggerSwitchCanPackage(&mcp2515_2, rule->targetDevId, rule->targetMeyPinId, pinState);
SendDoTriggerSwitchCanPackage(&mcp2515_3, rule->targetDevId, rule->targetMeyPinId, pinState); SendDoTriggerSwitchCanPackage(&mcp2515_3, rule->targetDevId, rule->targetMeyPinId, pinState);
//digitalWrite(foundPinId->pin_id, pinState); //digitalWrite(foundPinId->pin_id, pinState);
//foundPinId->pin_state = pinState; //foundPinId->pin_state = pinState;
@@ -461,21 +447,3 @@ void SendDoTriggerSwitchCanPackage(MCP2515 *interface, uint16_t targetCanId, byt
_frame.data[3] = state; _frame.data[3] = state;
interface->sendMessage(MCP2515::TXB1, &_frame); interface->sendMessage(MCP2515::TXB1, &_frame);
} }
void SendDebugCanPackage(MCP2515 *interface, int16_t *data, int len)
{
can_frame frame = can_frame();
frame.can_id = 0;
frame.can_id = CreateCanId(DEBUG_CAN_ID);
frame.can_dlc = len * 2;
for (int i = 0; i < frame.can_dlc / 2; i++)
{
frame.data[2 * i] = ((byte[])data)[2 * i + 1];
frame.data[2 * i + 1] = ((byte[])data)[2 * i];
}
interface->sendMessage(MCP2515::TXB1, &frame);
}