I have a requirement where I need to send a RF signal for a 10s time duration based on motions occur, I have used. I want to restart the sending when ever a new motion is detected so I used the following code
#include <PinChangeInterrupt.h>
#include <PinChangeInterruptBoards.h>
#include <PinChangeInterruptPins.h>
#include <PinChangeInterruptSettings.h>
#include <VirtualWire.h>
int i =0;
# define pir1 5
# define pir2 7
const int transmit_pin = 2;
unsigned long duration = 100;
unsigned int entry = 0;
char *msg = "A";
void setup() {
Serial.begin(9600);
pinMode(pir1, INPUT_PULLUP);
pinMode(pir2, INPUT_PULLUP);
attachPCINT(digitalPinToPCINT(pir1),set,RISING);
attachPCINT(digitalPinToPCINT(pir2),set,RISING);
pinMode(A2,OUTPUT);
pinMode(A3,OUTPUT);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
digitalWrite(A2,LOW);
digitalWrite(A3,LOW);
vw_set_tx_pin(transmit_pin);
vw_setup(2000); // Bits per sec
delay(5000);
Serial.println("Start");
}
void loop() {
}
//void transmit(){
//Serial.println("Enterd loop");
//for(int i=0;i<20;i++){
//
// vw_send((uint8_t *)msg, strlen(msg));
// vw_wait_tx(); // Wait until the whole message is gone
// delay(500);
// }
// Serial.println("Message sent complete");
//
//}
void set(){
entry = millis();
Serial.println("Enterd loop");
Serial.println(entry);
while(millis()- entry < duration){
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait until the whole mes
digitalWrite(13,HIGH);
Serial.println(millis());
}
digitalWrite(13,LOW);
Serial.println("Exit loop");
Serial.println(millis());
}
Issue is when a motion occur only "En" gets printed in Serial and it doesn't work after all, What have I done wrong, what is the better way.