first run on Wohnzimmer :)
This commit is contained in:
@@ -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
|
||||||
{
|
{
|
||||||
@@ -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,21 +147,21 @@ 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();
|
||||||
@@ -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()
|
||||||
@@ -291,18 +282,9 @@ 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);
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user