/*
Door Monitor
Uses a sensor to monitor the locked/unlocked status of
a door, lock, or other mechanism. An LED displays the
current status -- red for locked and green for unlocked.
When change is detected, it is recorded online.
* RGB LED on pins D0, D1, D2
* Hall Effect Sensor on pin D4
@author Stephen Nomura
@version 1.0 2016-01-29
*/
/* CONSTANTS & VARIABLES
------------------------------------------------------*/
int rgbLedPins[] = { D0, D1, D2 };
int sensorPin = D4;
int sensorState;
int sensorStatePrev = -1;
/* SETUP
------------------------------------------------------*/
void setup(){
pinMode(rgbLedPins[0], OUTPUT);
pinMode(rgbLedPins[1], OUTPUT);
pinMode(rgbLedPins[2], OUTPUT);
pinMode(sensorPin, INPUT);
Particle.variable("lockState",sensorState);
}
/* LOOP
------------------------------------------------------*/
void loop(){
monitorHallSensor();
delay(1000);
}
/* FUNCTIONS
------------------------------------------------------*/
void monitorHallSensor(){
sensorState = digitalRead(sensorPin);
if(sensorState != sensorStatePrev){ // only trigger on change
if(sensorState == LOW){ // locked
setRgbLedByHex("FF0000", rgbLedPins);
}
else { // unlocked
setRgbLedByHex("00FF00", rgbLedPins);
}
Particle.publish("lock_record_state");
}
delay(50);
sensorStatePrev = sensorState;
}
int setRgbLedByHex(String hex, int pins[]){
// error handling
if( hex.length() != 6 ) return -1;
// split hex strings, convert to decimal, invert, send to LED
analogWrite( pins[0], 255 - strtol(hex.substring(0,1),NULL,16) );
analogWrite( pins[1], 255 - strtol(hex.substring(2,3),NULL,16) );
analogWrite( pins[2], 255 - strtol(hex.substring(2,3),NULL,16) );
return 1;
}
Click to Expand
Content Rating
Is this a good/useful/informative piece of content to include in the project? Have your say!
You must login before you can post a comment. .