Control of PIR sensor using state
i'm using gprs shield receive sms texts , execute blocks of code accordingly. if message received 'on', i'd global variable pirstate == high. else, if message received off, i'd pirstate == low. digitalwrite(led1, high); part of if(pirstate == high) replaced code monitor pir sensor. can't seem global variable pirstate update properly.
i've had success getting update high when 'on' text received, won't update low when 'off' text received.
i've been looking @ code day or 2 , feel i'm glazing on simple. see glaring problems in logic below? in advance!
i've had success getting update high when 'on' text received, won't update low when 'off' text received.
i've been looking @ code day or 2 , feel i'm glazing on simple. see glaring problems in logic below? in advance!
code: [select]
#include <softwareserial.h>
char inchar; // hold incoming character gsm shield
softwareserial sim900(7, 8);
int led1 = 5;
int inputpin = 6; // choose input pin (for pir sensor)
int pinspeaker = 4; //set speaker on pwm pin (digital 9, 10, or 11)
int pirstate = low; // sensor 'off'/not being read
void setup()
{
serial.begin(19200);
// set digital pins control
pinmode(led1, output);
pinmode(inputpin, input);
pinmode(pinspeaker, output);
// set led low
digitalwrite(led1, low);
sim900.begin(19200);
sim900.print("at+cmgf=1\r"); // set sms mode text
delay(100);
sim900.print("at+cnmi=2,2,0,0,0\r");
// blurt out contents of new sms upon receipt gsm shield's serial out
delay(100);
}
void loop()
{
//if character comes in cellular module...
if(sim900.available() >0)
{
inchar=sim900.read();
if (inchar=='o')
{
delay(10);
inchar=sim900.read();
if (inchar=='n')
{
pirstate = high; // update current state of pir
sim900.println("at+cmgd=1,4"); // delete sms
delay(10);
} else if (inchar == 'f')
{
delay(10);
inchar=sim900.read();
if (inchar=='f')
{
pirstate = low;
delay(10);
sim900.println("at+cmgd=1,4"); // delete sms
}
}
}
}// end of available
// read state of pir sensor
if (pirstate == high)
{
digitalwrite(led1, high); // turn led on
} else if (pirstate == low)
{
digitalwrite(led1, low); // turn led off
delay(500);
}
}// end of main loop
hi
you calling sim900.available() @ start of nested if statements. looks rely on delays allow enough time each character arrive. maybe there timing problem 3 character off message.
as quick test, rather proper fix, try increasing delay period between characters. also, add in serial.print() after each sim900.read() show value of inchar @ each stage.
regards
ray
you calling sim900.available() @ start of nested if statements. looks rely on delays allow enough time each character arrive. maybe there timing problem 3 character off message.
as quick test, rather proper fix, try increasing delay period between characters. also, add in serial.print() after each sim900.read() show value of inchar @ each stage.
regards
ray
Arduino Forum > Using Arduino > Programming Questions > Control of PIR sensor using state
arduino
Comments
Post a Comment