Back to Parent

/*
	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!

1