Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Time.h>
- // CONSTANTS
- int incomingByte = 0;
- int keyPressDelay = 300;
- int pirPin = 46;
- int ctrlPinCount = 4;
- int pirState = 0;
- int idleTime = 10;
- int referenceTime = 0;
- // ARRAYS
- boolean usersStateOfLight[] = {
- true, true, true, true};
- boolean stateOfLight[] = {
- false, false, false, false};
- int commandsOn[] = {
- 48, 49, 50, 51}; // serial input in decimal (buttons 0-3 on numpad)
- int commandsOff[] = {
- 52, 53, 54, 55}; // serial input in decimal (buttons 4-7 on numpad)
- int lightsOn[] = {
- 22, 24, 26, 28};
- int lightsOff[] = {
- 23, 25, 27, 29};
- // SETUP
- void setup() {
- Serial.begin(19200);
- for (int i = 0; i < ctrlPinCount; i++) {
- pinMode(lightsOn[i], OUTPUT);
- }
- for (int i = 0; i < ctrlPinCount; i++) {
- pinMode(lightsOff[i], OUTPUT);
- }
- pinMode(pirPin, INPUT);
- turnOnAllLights();
- resetTimer();
- clearScreen();
- }
- // LOOP
- void loop() {
- boolean lightsAreOn = false;
- for (int i = 0; i < ctrlPinCount; i++) {
- if(stateOfLight[i]) {
- lightsAreOn = true;
- }
- }
- // send data only when you receive data
- if (Serial.available() > 0) {
- // read the incoming byte
- incomingByte = Serial.read();
- // use serial input to turn on lights
- for (int i = 0; i < ctrlPinCount; i++) {
- if (incomingByte == commandsOn[i]) {
- turnOnLight(i);
- userSwitch(i, true);
- }
- }
- // use serial input to turn off lights
- for (int i = 0; i < ctrlPinCount; i++) {
- if (incomingByte == commandsOff[i]) {
- turnOffLight(i);
- userSwitch(i, false);
- }
- }
- } // end serial input
- if(motionDetect()) {
- resetTimer();
- Serial.println("Motion detected, resetting timer");
- }
- else {
- Serial.println("No motion detected");
- }
- if(motionDetect() && !lightsAreOn) {
- Serial.println("and turning on lights");
- turnOnAllUsersLights();
- }
- if(timeOut() && lightsAreOn) {
- Serial.println("Timeout exceeded, turning off lights");
- timeOutExec();
- }
- Serial.print("Timeout in: ");
- Serial.print(idleTime - (minute() - referenceTime));
- Serial.println(" minute(s)");
- delay(1000);
- clearScreen();
- }
- // METHODS
- void pushButton(int light_nr, boolean stateOfLight) {
- if(stateOfLight) {
- digitalWrite(lightsOn[light_nr], HIGH);
- delay(keyPressDelay);
- digitalWrite(lightsOn[light_nr], LOW);
- }
- else {
- digitalWrite(lightsOff[light_nr], HIGH);
- delay(keyPressDelay);
- digitalWrite(lightsOff[light_nr], LOW);
- }
- }
- void turnOnLight(int light_nr) {
- pushButton(light_nr, true);
- stateOfLight[light_nr] = true;
- Serial.print("Turned on light: ");
- Serial.println(light_nr + 1);
- }
- void turnOffLight(int light_nr) {
- pushButton(light_nr, false);
- stateOfLight[light_nr] = false;
- Serial.print("Turned off light: ");
- Serial.println(light_nr + 1);
- }
- void turnOnAllLights() {
- for (int i = 0; i < ctrlPinCount; i++) {
- turnOnLight(i);
- }
- }
- void turnOffAllLights() {
- for (int i = 0; i < ctrlPinCount; i++) {
- turnOffLight(i);
- }
- }
- void userSwitch(int light_nr, boolean state) {
- usersStateOfLight[light_nr] = state;
- }
- void turnOnAllUsersLights() {
- for (int i = 0; i < ctrlPinCount; i++) {
- if(usersStateOfLight[i])
- turnOnLight(i);
- }
- }
- boolean motionDetect() {
- pirState = digitalRead(pirPin);
- if (pirState == LOW) {
- return true;
- }
- else {
- return false;
- }
- }
- boolean timeOut() {
- if((referenceTime + idleTime) <= minute()) {
- return true;
- }
- else {
- return false;
- }
- }
- void timeOutExec() {
- for (int i = 0; i < ctrlPinCount; i++) {
- turnOffLight(i);
- }
- }
- void resetTimer() {
- referenceTime = minute();
- }
- void clearScreen() {
- for (int i = 0; i < 5; i++) {
- Serial.println();
- }
- }
Add Comment
Please, Sign In to add comment