Back to Parent

/*
Hua Fan
IoT creative assignment 1
Knok Knok
*/

// variables that won't change
const int powerPin = 0;
const int buttonPin = 1;
const int tiltPin = 2;
const int alarmPin =  3;
const int ledPin = 4;

// variables that will change:
int buttonState = 0;
int tiltState = 0;
int systemOn = 0;
int currentTime = 0;
int peace = 0;

int systemControl(String command);

void setup() {
  // establish serial monitor connection
  Serial.begin(9600);

  // set up all input and output
  pinMode(powerPin, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(tiltPin, INPUT);
  pinMode(alarmPin, OUTPUT);
  pinMode(ledPin, OUTPUT);

  // set up cloud variables and functions
  Particle.function("Knok", systemControl);
  Particle.variable("system", systemOn);
  //Particle.subscribe("Knok Knok", systemControl);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed
  if (buttonState == HIGH) {
    changeSystemStatus();
  }

  // start the system if system is off and button is pressed
  if (systemOn == 1) {
    tiltSensorOn();
    digitalWrite(powerPin, HIGH);
  } else {
    digitalWrite(powerPin, LOW);
  }

  currentTime = millis();
  while(millis() < currentTime + 100){
    //wait 1 second
  }
}

// read sensor data and respond correspondingly
void tiltSensorOn() {
  // read the state of the tilt sensor value:
  tiltState = digitalRead(tiltPin);
  // alarm is tilt sensor give potisive feedback
  if (tiltState == HIGH) {
    playAlarm();
    if (peace == 1) {
      Serial.println("Intruder Detected!!!");
      Particle.publish("Alert", "Intruder Detected!!!", PRIVATE);
    }
    peace = 0;
  } else {
    digitalWrite(ledPin, LOW);
    digitalWrite(alarmPin, LOW);
    if (peace == 0) {
      Serial.println("It's a peaceful day");
      Particle.publish("Status", "It's a peaceful day", PRIVATE);
    }
    peace = 1;
  }
}

// play alarm sound and red LED light
void playAlarm() {
  tone(alarmPin,2800);
  digitalWrite(ledPin, HIGH);
  currentTime = millis();
  while(millis() < currentTime + 100){
    //wait
  }
  digitalWrite(alarmPin, LOW);
  digitalWrite(ledPin, LOW);
}

// change on/off status
void changeSystemStatus() {
  if (systemOn == 0) {
    systemOn = 1;
    digitalWrite(powerPin, HIGH);
    Serial.println();
    Serial.println("System: On");
    Serial.println("Security Check: On");
    Serial.println("Full Protection: On");
    Serial.println();
    Particle.publish("Status", "System: On", PRIVATE);
  } else {
    systemOn = 0;
    digitalWrite(powerPin, LOW);
    Serial.println();
    Serial.println("System: Off");
    Serial.println("Security Check: Off");
    Serial.println("Full Protection: Off");
    Serial.println();
    Particle.publish("Status", "System: Off", PRIVATE);
  }
}

// control the system over the cloud
int systemControl(String command) {
   // find out the state of the system
   if (command == "ON") {
	   systemOn = 1;
     return 1;
   } else if (command == "OFF") {
	   systemOn = 0;
     return 1;
   } else {
     return -1;
   }
}
Click to Expand

Content Rating

Is this a good/useful/informative piece of content to include in the project? Have your say!

0