All working fine sometimes the pir reaction could be a bid faster, and sometimes i get a false reading think i'll have to put the pir signal lines to the ground with an resistor.
Any advice is welcome, to make thing faster, and less complex.
else use this with fun......
#define MY_RADIO_NRF24
#define MY_REPEATER_FEATURE
#define MY_DEBUG
#include <Wire.h> // Wire library t.b.v. I²C
#include <MySensors.h>
byte GPIOA = 0x12; // GPIOA adres in 16-bit mode, is directe aansturing 1e groep van 8 I/O poorten.
byte GPIOB = 0x13; // GPIOA adres in 16-bit mode, is directe aansturing 1e groep van 8 I/O poorten.
boolean sensorBovenActive; // Status of Pir motion sensor 2.
boolean sensorOnderActive; // Status of Pir motion sensor 1.
boolean sensorKelderActive; // Status of Pir motion sensor 0.
int PIR0new; // Pir motion sensor 0 updated value "Kelder".
int PIR0old; // Pir motion sensor 0 old value "Kelder".
int PIR1new; // Pir motion sensor 1 updated value "sensorOnderActive".
int PIR1old; // Pir motion sensor 1 old value "sensorOnderActive".
int PIR2new; // Pir motion sensor 2 updated value. "sensorBovenActive"
int PIR2old; // Pir motion sensor 2 old value. sensorBovenActive"
int StairDelay = 250; // Delay for stairs
int StairOn = 30000; // Delay to keep stair light on
#define MY_NODE_ID 30
#define CHILD_ID_PIR00 31 // Id of the sensor child
#define CHILD_ID_PIR01 32 // Id of the sensor child
#define CHILD_ID_PIR02 33 // Id of the sensor child
void presentation(){
// Send the sketch version information to the gateway and Controller
sendSketchInfo("Trap Controller", "4.0");
// Register all sensors to gw (they will be created as child devices)
present(CHILD_ID_PIR00, S_MOTION, "PIR Sensor Kelder");
present(CHILD_ID_PIR01, S_MOTION, "PIR Sensor Trap Onder");
present(CHILD_ID_PIR02, S_MOTION, "PIR Sensor Trap Boven");
}
// Initialize motion message
MyMessage msgPIR00(CHILD_ID_PIR00, V_TRIPPED);
MyMessage msgPIR01(CHILD_ID_PIR01, V_TRIPPED);
MyMessage msgPIR02(CHILD_ID_PIR02, V_TRIPPED);
// the setup routine runs once when you press reset:
void setup() {
Wire.begin(); // wake up I2C bus
// set I/O pins to outputs
Wire.beginTransmission(0x20); // Start adress of mcp23017
Wire.write(0x00); // IODIRA register
Wire.write(0x00); // set all of port A to outputs
Wire.endTransmission();
Wire.beginTransmission(0x20);
Wire.write(0x01); // IODIRB register
Wire.write(0x00); // set all of port B to outputs
Wire.endTransmission();
}
// the loop routine runs over and over again forever:
void loop() {
Pir0lezen();
Pir1lezen();
Pir2lezen();
effneerop();
effopneer();
effKelder();
}
void Pir0lezen() {
int PIR0new = analogRead(A0);
if (PIR0new >=900) {
sensorKelderActive = true;
// Send status to Domoticz
send (msgPIR00.set(sensorKelderActive?"1":"0"));
Serial.println("PIR0new----");
Serial.println(PIR0new);
PIR0old = PIR0new;
sensorKelderActive = false;
send (msgPIR00.set(sensorKelderActive));
}}
void Pir1lezen() {
int PIR1new = analogRead(A1);
if (PIR1new != PIR1old && PIR1new >=710) {
sensorOnderActive = true ;
sensorBovenActive = false ;
// Send status to Domoticz
send (msgPIR01.set(sensorOnderActive?"1":"0"));
Serial.println("PIR1----");
Serial.println(PIR1new);
PIR1old = PIR1new;
}}
void Pir2lezen() {
int PIR2new = analogRead(A2);
if (PIR2new != PIR2old && PIR2new >=710) {
sensorBovenActive = true ;
sensorOnderActive = false ;
// Send status to Domoticz
send (msgPIR02.set(sensorBovenActive?"1":"0"));
Serial.println("PIR2----");
Serial.println(PIR2new);
PIR2old = PIR2new;
}}
void effopneer() {
if (sensorOnderActive==true && sensorBovenActive==false){
Serial.println("PIR1--aan");
sensorOnderActive = false ;
setLEDA(B01111111); // Tree 1
delay(StairDelay);
setLEDA(B00111111); // Tree 2
delay(StairDelay);
setLEDA(B00011111); // Tree 3
delay(StairDelay);
setLEDA(B00001111); // Tree 4
delay(StairDelay);
setLEDA(B00000111); // Tree 5
delay(StairDelay);
setLEDA(B00000011); // Tree 6
delay(StairDelay);
setLEDA(B00000001); // Tree 7
delay(StairDelay);
setLEDA(B00000000); // Tree 8
delay(StairDelay);
setLEDB(B01111111); // Tree 9
delay(StairDelay);
setLEDB(B00111111); // Tree 10
delay(StairDelay);
setLEDB(B00011111); // Tree 11
delay(StairDelay);
setLEDB(B00001111); // Tree 12
delay(StairDelay);
setLEDB(B00000111); // Tree 13
delay(StairDelay);
setLEDB(B00000011); // Tree 14
send (msgPIR01.set(sensorOnderActive)); // switch off before delay
delay(StairOn);
setLEDA(B11111111); // all off
setLEDB(B11111111); // all off
Serial.println("PIR1--uit");
}}
void effneerop() {
if (sensorOnderActive==false && sensorBovenActive==true){
Serial.println("PIR2--aan");
sensorBovenActive = false ;
setLEDB(B11111011); // Tree 14
delay(StairDelay);
setLEDB(B11110011); // Tree 13
delay(StairDelay);
setLEDB(B11100011); // Tree 12
delay(StairDelay);
setLEDB(B11000011); // Tree 11
delay(StairDelay);
setLEDB(B10000111); // Tree 10
delay(StairDelay);
setLEDB(B00000011); // Tree 9
delay(StairDelay);
setLEDA(B11111110); // Tree 8
delay(StairDelay);
setLEDA(B11111100); // Tree 7
delay(StairDelay);
setLEDA(B11111000); // Tree 6
delay(StairDelay);
setLEDA(B11110000); // Tree 5
delay(StairDelay);
setLEDA(B11100000); // Tree 4
delay(StairDelay);
setLEDA(B11000000); // Tree 3
delay(StairDelay);
setLEDA(B10000000); // Tree 2
delay(StairDelay);
setLEDA(B00000000); // Tree 1
send (msgPIR02.set(sensorBovenActive));
delay(StairOn);
setLEDA(B11111111); // all off
setLEDB(B11111111); // all off
Serial.println("PIR2--uit");
}}
void effKelder() {
}
void setLEDA(byte value)
{
Wire.beginTransmission(0x20);
Wire.write(GPIOA); // gpioa
Wire.write(byte(value)); // set LEDs volgens waarde 'value'
Wire.endTransmission();
}
void setLEDB(byte value)
{
Wire.beginTransmission(0x20);
Wire.write(GPIOB); // gpiob
Wire.write(byte(value)); // set LEDs volgens waarde 'value'
Wire.endTransmission();
}
void bonuseff() {
setLEDB(B11111011); // Tree 14
delay(StairDelay);
setLEDB(B11110111); // Tree 13
delay(StairDelay);
setLEDB(B11101111); // Tree 12
delay(StairDelay);
setLEDB(B11011111); // Tree 11
delay(StairDelay);
setLEDB(B10111111); // Tree 10
delay(StairDelay);
setLEDB(B01111111); // Tree 9
delay(StairDelay);
setLEDA(B11111110); // Tree 8
delay(StairDelay);
setLEDA(B11111101); // Tree 7
delay(StairDelay); ;
setLEDA(B11111011); // Tree 6
delay(StairDelay); ;
setLEDA(B11110111); // Tree 5
delay(StairDelay);
setLEDA(B11101111); // Tree 4
delay(StairDelay);
setLEDA(B11011111); // Tree 3
delay(StairDelay);
setLEDB(B10111110); // Tree 2
delay(StairDelay);
setLEDB(B01111111); // Tree 1
delay(StairDelay);
setLEDA(B10111111); // Tree 2
delay(StairDelay);
setLEDA(B11011111); // Tree 3
delay(StairDelay);
setLEDA(B11101111); // Tree 4
delay(StairDelay);
setLEDA(B11110111); // Tree 5
delay(StairDelay);
setLEDA(B11111011); // Tree 6
delay(StairDelay);
setLEDA(B11111101); // Tree 7
delay(StairDelay);
setLEDA(B11111110); // Tree 8
delay(StairDelay);
setLEDB(B01111111); // Tree 9
delay(StairDelay);
setLEDB(B10111111); // Tree 10
delay(StairDelay);
setLEDB(B11011111); // Tree 11
delay(StairDelay);
setLEDB(B11101111); // Tree 12
delay(StairDelay);
setLEDB(B11110111); // Tree 13
delay(StairDelay);
setLEDB(B11111011); // Tree 14
}```