//////////////////////////// Initialize & Includes //////////////////////////
#include "SIM900.h"
#include "sms.h"
#include "Keypad.h"
#include <GSM.h>
SMSGSM sms;
//To change pins for Software Serial, use the two lines in GSM.cpp.
int PIR_SensorPin = 2;
int LED_OutPin = 11; //green
int Alarm_OutPin = 12; //red
int alarm_count = 0;
int switchPIN = 3; // alarm on test
char keypadPIN;
int z = 0;
int i = 0;
int waitTime = 5000;
//////////////////////////// Setup Keypad //////////////////////////
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] =
{
{
'1', '2', '3', 'A'
}
,
{
'4', '5', '6', 'B'
}
,
{
'7', '8', '9', 'C'
}
,
{
'*', '0', '#', 'D'
}
};
byte rowPins[ROWS] = {
6, 7, A2, A3 // row pin# on keypad to Arduino pin#, ie Row Pin #1 goes to Arduino Pin #6, etc.
}; // connect to the row pinouts of the keypad
byte colPins[COLS] = {
3, A0, A1, A4
}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS );
const char PIN[5] = {
'9', '6', '7', '9', '#'
}; // PIN number
char key_input[5] = {
0, 0, 0, 0, 0
}; // used for comparison
//////////////////////////////// Setup ///////////////////////////////////
void setup() {
Serial.begin (9600); // Establish Serial connection;
pinMode (LED_OutPin, OUTPUT); // Set pinMode.
pinMode (Alarm_OutPin, OUTPUT); // Set pinMode.
pinMode (PIR_SensorPin, INPUT); // Set pinMode.
digitalWrite (LED_OutPin, LOW); // Set output pins to LOW for start.
digitalWrite (Alarm_OutPin, LOW); // Set output pins to LOW for start.
digitalWrite (PIR_SensorPin, LOW);
Serial.println ("Studio Alarm starting up."); // Serial message that GSM shield is starting up
if (gsm.begin(4800)) { // Set GSM shield to recommended 4800 baud rate.
Serial.println ("Status = Network READY");
digitalWrite (LED_OutPin, HIGH);
}
attachInterrupt (digitalPinToInterrupt (2), trigger, CHANGE); // PIR as interrupt
// Could make use of the interrupts by checking in the interrupt if the state is "Ready" and
// then setting the state to "Alarm".
Serial.println ("System Ready");
keypadPIN = HIGH;
}
//////////////////////////// State Setup //////////////////////////
enum STATE {
Ready, //system acknowledges trigger
Unarmed, //system unarmed via keypad entry setting keypadPIN = LOW
JustActivated, //PIR-triggered interrupt
Alarm // confirm system unarmed then goto unarmed state else start alarm
};
STATE systemState = Unarmed;
long timeGettingArmed;
/////////////////////////// Trigger ///////////////////////////////
void trigger() {
systemState = JustActivated;
}
//////////////////////////// State Machine //////////////////////////
void loop() {
check ();
switch (systemState) {Serial.println("switch");
case Ready:
if (PIR_SensorPin == HIGH) {Serial.println("PIR_Sensor");
Serial.println("triggered");
systemState = Alarm;
} else if (keypadPIN == LOW) {
systemState = Unarmed;
}
break;
case Unarmed:
if (keypadPIN == HIGH) {Serial.println("keypadPIN=HIGH");
// Serial.println("Unarmed");
timeGettingArmed = millis();Serial.println(timeGettingArmed);
systemState = JustActivated;
}
break;
case JustActivated:Serial.println("JustActivated");
if (timeGettingArmed + waitTime < millis()) {
Serial.println("Ready");
systemState = Ready;
}
break;
case Alarm:
if (keypadPIN == LOW) {Serial.println("keypadPIN=LOW");
systemState = Unarmed;
} else {
beep();
}
break;
}
}
//////////////////////////// Alarm //////////////////////////
void beep() {
Serial.println("at beep");
// (sms.SendSMS("8656171435", "*** Motion Detected in Studio! ***"));
Serial.println ("MOTION detected: SMS Sent");
for (alarm_count = 0; alarm_count <= 5; alarm_count++) { // Cycle outputs if triggered
digitalWrite (Alarm_OutPin, HIGH); delay (1000); // On/Off/On/Off/Off
digitalWrite (Alarm_OutPin, LOW); delay (500);
digitalWrite (LED_OutPin, HIGH); // delay (1000);
Serial.println (alarm_count);
}
systemState = Ready;
}
void check() {
if (switchPIN == HIGH) {
keypadPIN = LOW; // Unarmed
}
else {
keypadPIN = HIGH; // Ready/Armed
}
}
#include "SIM900.h" #include "sms.h" #include "Keypad.h" #include <GSM.h> SMSGSM sms; //To change pins for Software Serial, use the two lines in GSM.cpp. int PIR_SensorPin = 2; int LED_OutPin = 11; //green int Alarm_OutPin = 12; //red int alarm_count = 0; int switchPIN = 3; // alarm on test char keypadPIN; int z = 0; int i = 0; int waitTime = 5000;
//////////////////////////// Setup Keypad ////////////////////////// const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keys[ROWS][COLS] = { { '1', '2', '3', 'A' } , { '4', '5', '6', 'B' } , { '7', '8', '9', 'C' } , { '*', '0', '#', 'D' } }; byte rowPins[ROWS] = { 6, 7, A2, A3 // row pin# on keypad to Arduino pin#, ie Row Pin #1 goes to Arduino Pin #6, etc. }; // connect to the row pinouts of the keypad byte colPins[COLS] = { 3, A0, A1, A4 }; // connect to the column pinouts of the keypad Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS ); const char PIN[5] = { '9', '6', '7', '9', '#' }; // PIN number char key_input[5] = { 0, 0, 0, 0, 0 }; // used for comparison
//////////////////////////////// Setup /////////////////////////////////// void setup() { Serial.begin (9600); // Establish Serial connection; pinMode (LED_OutPin, OUTPUT); // Set pinMode. pinMode (Alarm_OutPin, OUTPUT); // Set pinMode. pinMode (PIR_SensorPin, INPUT); // Set pinMode. digitalWrite (LED_OutPin, LOW); // Set output pins to LOW for start. digitalWrite (Alarm_OutPin, LOW); // Set output pins to LOW for start. digitalWrite (PIR_SensorPin, LOW); Serial.println ("Studio Alarm starting up."); // Serial message that GSM shield is starting up if (gsm.begin(4800)) { // Set GSM shield to recommended 4800 baud rate. Serial.println ("Status = Network READY"); digitalWrite (LED_OutPin, HIGH); } attachInterrupt (digitalPinToInterrupt (2), trigger, CHANGE); // PIR as interrupt // Could make use of the interrupts by checking in the interrupt if the state is "Ready" and // then setting the state to "Alarm". Serial.println ("System Ready");
keypadPIN = HIGH; }
//////////////////////////// State Setup ////////////////////////// enum STATE { Ready, //system acknowledges trigger Unarmed, //system unarmed via keypad entry setting keypadPIN = LOW JustActivated, //PIR-triggered interrupt Alarm // confirm system unarmed then goto unarmed state else start alarm }; STATE systemState = Unarmed; long timeGettingArmed;
/////////////////////////// Trigger /////////////////////////////// void trigger() { systemState = JustActivated; }
//////////////////////////// State Machine ////////////////////////// void loop() { check (); switch (systemState) {Serial.println("switch"); case Ready: if (PIR_SensorPin == HIGH) {Serial.println("PIR_Sensor"); Serial.println("triggered"); systemState = Alarm; } else if (keypadPIN == LOW) { systemState = Unarmed; } break; case Unarmed: if (keypadPIN == HIGH) {Serial.println("keypadPIN=HIGH"); // Serial.println("Unarmed"); timeGettingArmed = millis();Serial.println(timeGettingArmed); systemState = JustActivated; } break; case JustActivated:Serial.println("JustActivated"); if (timeGettingArmed + waitTime < millis()) { Serial.println("Ready"); systemState = Ready; } break; case Alarm: if (keypadPIN == LOW) {Serial.println("keypadPIN=LOW"); systemState = Unarmed; } else { beep(); } break; } }
//////////////////////////// Alarm ////////////////////////// void beep() { Serial.println("at beep"); // (sms.SendSMS("8656171435", "*** Motion Detected in Studio! ***")); Serial.println ("MOTION detected: SMS Sent"); for (alarm_count = 0; alarm_count <= 5; alarm_count++) { // Cycle outputs if triggered digitalWrite (Alarm_OutPin, HIGH); delay (1000); // On/Off/On/Off/Off digitalWrite (Alarm_OutPin, LOW); delay (500); digitalWrite (LED_OutPin, HIGH); // delay (1000); Serial.println (alarm_count); } systemState = Ready; }
void check() { if (switchPIN == HIGH) { keypadPIN = LOW; // Unarmed } else { keypadPIN = HIGH; // Ready/Armed } }