Guest User

Untitled

a guest
Nov 24th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.80 KB | None | 0 0
  1. #include <Time.h>
  2.  
  3. // CONSTANTS
  4. int incomingByte = 0;
  5. int keyPressDelay = 300;
  6. int pirPin = 46;
  7. int ctrlPinCount = 4;
  8. int pirState = 0;
  9. int idleTime = 10;
  10. int referenceTime = 0;
  11.  
  12. // ARRAYS
  13. boolean usersStateOfLight[] = {
  14.   true, true, true, true};
  15.  
  16. boolean stateOfLight[] = {
  17.   false, false, false, false};
  18.  
  19. int commandsOn[] = {
  20.   48, 49, 50, 51}; // serial input in decimal (buttons 0-3 on numpad)
  21. int commandsOff[] = {
  22.   52, 53, 54, 55}; // serial input in decimal (buttons 4-7 on numpad)
  23.  
  24. int lightsOn[] = {
  25.   22, 24, 26, 28};
  26. int lightsOff[] = {
  27.   23, 25, 27, 29};
  28.  
  29. // SETUP
  30. void setup() {
  31.   Serial.begin(19200);
  32.  
  33.   for (int i = 0; i < ctrlPinCount; i++) {
  34.     pinMode(lightsOn[i], OUTPUT);
  35.   }
  36.  
  37.   for (int i = 0; i < ctrlPinCount; i++) {
  38.     pinMode(lightsOff[i], OUTPUT);
  39.   }
  40.  
  41.   pinMode(pirPin, INPUT);
  42.  
  43.   turnOnAllLights();
  44.   resetTimer();
  45.   clearScreen();
  46. }
  47.  
  48. // LOOP
  49. void loop() {
  50.   boolean lightsAreOn = false;
  51.   for (int i = 0; i < ctrlPinCount; i++) {
  52.     if(stateOfLight[i]) {
  53.       lightsAreOn = true;
  54.     }
  55.   }
  56.  
  57.   // send data only when you receive data
  58.   if (Serial.available() > 0) {
  59.     // read the incoming byte
  60.     incomingByte = Serial.read();
  61.  
  62.     // use serial input to turn on lights
  63.     for (int i = 0; i < ctrlPinCount; i++) {
  64.       if (incomingByte == commandsOn[i]) {
  65.         turnOnLight(i);
  66.         userSwitch(i, true);
  67.       }
  68.     }
  69.     // use serial input to turn off lights
  70.     for (int i = 0; i < ctrlPinCount; i++) {
  71.       if (incomingByte == commandsOff[i]) {
  72.         turnOffLight(i);
  73.         userSwitch(i, false);
  74.       }
  75.     }
  76.  
  77.   } // end serial input
  78.  
  79.   if(motionDetect()) {
  80.     resetTimer();
  81.     Serial.println("Motion detected, resetting timer");
  82.   }
  83.   else {
  84.     Serial.println("No motion detected");
  85.   }
  86.  
  87.   if(motionDetect() && !lightsAreOn) {
  88.     Serial.println("and turning on lights");
  89.     turnOnAllUsersLights();
  90.   }
  91.  
  92.   if(timeOut() && lightsAreOn) {
  93.     Serial.println("Timeout exceeded, turning off lights");
  94.     timeOutExec();
  95.   }
  96.  
  97.   Serial.print("Timeout in: ");
  98.   Serial.print(idleTime - (minute() - referenceTime));
  99.   Serial.println(" minute(s)");
  100.   delay(1000);
  101.   clearScreen();
  102. }
  103.  
  104. // METHODS
  105. void pushButton(int light_nr, boolean stateOfLight) {
  106.   if(stateOfLight) {
  107.     digitalWrite(lightsOn[light_nr], HIGH);
  108.     delay(keyPressDelay);
  109.     digitalWrite(lightsOn[light_nr], LOW);
  110.   }
  111.   else {
  112.     digitalWrite(lightsOff[light_nr], HIGH);
  113.     delay(keyPressDelay);
  114.     digitalWrite(lightsOff[light_nr], LOW);
  115.   }
  116. }
  117.  
  118.  
  119. void turnOnLight(int light_nr) {
  120.   pushButton(light_nr, true);
  121.   stateOfLight[light_nr] = true;
  122.   Serial.print("Turned on light: ");
  123.   Serial.println(light_nr + 1);
  124. }
  125.  
  126. void turnOffLight(int light_nr) {
  127.   pushButton(light_nr, false);
  128.   stateOfLight[light_nr] = false;
  129.   Serial.print("Turned off light: ");
  130.   Serial.println(light_nr + 1);
  131. }
  132.  
  133. void turnOnAllLights() {
  134.   for (int i = 0; i < ctrlPinCount; i++) {
  135.     turnOnLight(i);
  136.   }
  137. }
  138.  
  139. void turnOffAllLights() {
  140.   for (int i = 0; i < ctrlPinCount; i++) {
  141.     turnOffLight(i);
  142.   }
  143. }
  144.  
  145. void userSwitch(int light_nr, boolean state) {
  146.   usersStateOfLight[light_nr] = state;
  147. }
  148.  
  149. void turnOnAllUsersLights() {
  150.   for (int i = 0; i < ctrlPinCount; i++) {
  151.     if(usersStateOfLight[i])
  152.       turnOnLight(i);
  153.   }
  154. }
  155.  
  156. boolean motionDetect() {
  157.   pirState = digitalRead(pirPin);
  158.   if (pirState == LOW) {
  159.     return true;
  160.   }
  161.   else {
  162.     return false;
  163.   }
  164. }
  165.  
  166. boolean timeOut() {
  167.   if((referenceTime + idleTime) <= minute()) {
  168.     return true;
  169.   }
  170.   else {
  171.     return false;
  172.   }
  173. }
  174.  
  175. void timeOutExec() {
  176.   for (int i = 0; i < ctrlPinCount; i++) {
  177.     turnOffLight(i);
  178.   }
  179. }
  180.  
  181. void resetTimer() {
  182.   referenceTime = minute();
  183. }
  184.  
  185. void clearScreen() {
  186.   for (int i = 0; i < 5; i++) {
  187.     Serial.println();
  188.   }
  189. }
Add Comment
Please, Sign In to add comment