Please can you tell me where I have gone wrong here?
-
Hi all,
I have a sketch to monitor a door/window and that tesed OK - Then I decided to add an anti-tamper switch to the box and whatever I try I cannot get it to work....
Here is the code....
// Enable debug prints // #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_RF24_PA_LEVEL RF24_PA_LOW //Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX #include <MySensors.h> uint32_t SLEEP_TIME = 900000; // Sleep time between reports (in milliseconds) approx eveery 15 mins. #define DIGITAL_INPUT_SENSOR_2 2 // Anti-Tamper switch connection. #define DIGITAL_INPUT_SENSOR_3 3 // The digital input you attached your Door/Window sensor. #define CHILD_ID_1 2 // Id of the Anti-Tamper sensor child. #define CHILD_ID_2 3 // Id of the door/window sensor child. int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int batteryPcnt = 0; // Initialize door/window message MyMessage msg( CHILD_ID_1, V_TRIPPED); //Tamper. MyMessage msg1( CHILD_ID_2, V_TRIPPED); //Door/Window. void setup() { pinMode(DIGITAL_INPUT_SENSOR_3, INPUT); // sets the door/window sensor digital pin as input digitalWrite(DIGITAL_INPUT_SENSOR_3, HIGH); pinMode(DIGITAL_INPUT_SENSOR_2, INPUT); // sets the Anti-Tamper sensor digital pin as input digitalWrite(DIGITAL_INPUT_SENSOR_2, HIGH); } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Patio Door", "3.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_1, S_DOOR, "Patio Tamper"); present(CHILD_ID_2, S_DOOR, "Patio Door"); } void loop() { ////to be tested ..........///// // Read digital anti-tamper. { bool tripped = digitalRead(DIGITAL_INPUT_SENSOR_2) == HIGH; { send(msg.set(tripped ? "1" : "0")); // Send anti-tamper tripped value to gw } } { //Read digital door/window value. bool tripped = digitalRead(DIGITAL_INPUT_SENSOR_3) == HIGH; { send(msg1.set(tripped ? "1" : "0")); // Send door/window tripped value to gw } } { int sensorValue = analogRead(BATTERY_SENSE_PIN); batteryPcnt = sensorValue / 10; sendBatteryLevel(batteryPcnt); } // Sleep until interrupt comes in on motion sensor. Send battery update every 15 minutes. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_2) || digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_3), CHANGE, SLEEP_TIME); }The door/window pin works and the data gets sent to the controller, but it never sees any data from the anti-tamper switch....I have tried a few things but I cannot get both switches to work - what have I got wrong here please?
-
Hi all,
I have a sketch to monitor a door/window and that tesed OK - Then I decided to add an anti-tamper switch to the box and whatever I try I cannot get it to work....
Here is the code....
// Enable debug prints // #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #define MY_RF24_PA_LEVEL RF24_PA_LOW //Options are: RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH or RF24_PA_MAX #include <MySensors.h> uint32_t SLEEP_TIME = 900000; // Sleep time between reports (in milliseconds) approx eveery 15 mins. #define DIGITAL_INPUT_SENSOR_2 2 // Anti-Tamper switch connection. #define DIGITAL_INPUT_SENSOR_3 3 // The digital input you attached your Door/Window sensor. #define CHILD_ID_1 2 // Id of the Anti-Tamper sensor child. #define CHILD_ID_2 3 // Id of the door/window sensor child. int BATTERY_SENSE_PIN = A0; // select the input pin for the battery sense point int batteryPcnt = 0; // Initialize door/window message MyMessage msg( CHILD_ID_1, V_TRIPPED); //Tamper. MyMessage msg1( CHILD_ID_2, V_TRIPPED); //Door/Window. void setup() { pinMode(DIGITAL_INPUT_SENSOR_3, INPUT); // sets the door/window sensor digital pin as input digitalWrite(DIGITAL_INPUT_SENSOR_3, HIGH); pinMode(DIGITAL_INPUT_SENSOR_2, INPUT); // sets the Anti-Tamper sensor digital pin as input digitalWrite(DIGITAL_INPUT_SENSOR_2, HIGH); } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Patio Door", "3.0"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID_1, S_DOOR, "Patio Tamper"); present(CHILD_ID_2, S_DOOR, "Patio Door"); } void loop() { ////to be tested ..........///// // Read digital anti-tamper. { bool tripped = digitalRead(DIGITAL_INPUT_SENSOR_2) == HIGH; { send(msg.set(tripped ? "1" : "0")); // Send anti-tamper tripped value to gw } } { //Read digital door/window value. bool tripped = digitalRead(DIGITAL_INPUT_SENSOR_3) == HIGH; { send(msg1.set(tripped ? "1" : "0")); // Send door/window tripped value to gw } } { int sensorValue = analogRead(BATTERY_SENSE_PIN); batteryPcnt = sensorValue / 10; sendBatteryLevel(batteryPcnt); } // Sleep until interrupt comes in on motion sensor. Send battery update every 15 minutes. sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_2) || digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_3), CHANGE, SLEEP_TIME); }The door/window pin works and the data gets sent to the controller, but it never sees any data from the anti-tamper switch....I have tried a few things but I cannot get both switches to work - what have I got wrong here please?
@skywatch the sleep call in the code is very strange. I think you want to use this function:
int8_t sleep(uint8_t interrupt1, uint8_t mode1, uint8_t interrupt2, uint8_t mode2, unsigned long ms=0);Reference for sleep: https://www.mysensors.org/download/sensor_api_20#sleeping
-
Hi @Mfalkvidd -
Yes I just tracked it down to that line with w few serial.prints..... Thanks for the fast reply - I will try again! :)
and
sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_2), CHANGE, digitalPinToInterrupt(DIGITAL_INPUT_SENSOR_3), CHANGE, SLEEP_TIME);This way it works! :) - Thank you! :)
-
The alternative answer is that you chose a hobby that will take up all your spare time and burn all your extra money.
-
The alternative answer is that you chose a hobby that will take up all your spare time and burn all your extra money.
@wallyllama Ah, you mean marriage? Sorry, couldn't resist.... :)
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login