Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.77 KB | None | 0 0
  1. #include <LiquidCrystal.h>
  2.  
  3. /*Clock with local remote time programming.
  4. Standard alarm clock with Relay triggering on A0-A3
  5.  
  6. */
  7.  
  8. #include<Time.h>
  9. #include<TimeAlarms.h>
  10.  
  11.  
  12. int x = 0;
  13.  
  14. long previousMillis = 0;
  15. long intervalIdle = 300;
  16. int LCDalarm=0;
  17.  
  18. LiquidCrystal lcd (12, 11, 5,4,3,2);
  19.  
  20. const int relayPinA0=A0; //Logic low triggers relay
  21. const int relayPinA1=A1;
  22. int potPin1 =A4;
  23. int potPin2 =A5;
  24.  
  25. const int relayOverride = 0;
  26. const int alarm1EnablePin = 1 ;
  27.  
  28. const int minutePin = 6;
  29. const int hourPin =7;
  30. const int timeSetButton = 8;
  31. int buzzer = 9; // pin to connect PEZIO transducder (not a speaker!)
  32. const int alarmLED = 13 ;
  33. const int alarm1SetButton = 10;
  34. int pumpDuration = 0;
  35. int dayInterval =1; //used for testing only
  36.  
  37. unsigned char delayms = 250; // delay between beep sounds (makes buzzer)
  38.  
  39. int minutePushCounter =0;
  40. int minuteState= 0;
  41. int lastminuteState = 0;
  42.  
  43. int hourPushCounter =0;
  44. int hourState= 0;
  45. int lasthourState = 0;
  46.  
  47. int setButtonState = 0;
  48.  
  49. int alarmHRPushCounter =1;
  50. int alarmMinPushCounter =1;
  51.  
  52. int alarmHR = 0;
  53. int alarmHRState = 0;
  54. int lastalarmHRState = 0;
  55.  
  56. int alarmMin = 0;
  57. int alarmMinState = 0;
  58. int lastalarmMinState = 0;
  59.  
  60. //=========================== arrays to build custom font segments=======================
  61.  
  62. byte water[8] ={
  63. B01110, B00100, B10100, B11110, B11111, B10001, B00000, B00001};
  64.  
  65. byte calendar[8] ={
  66. B01010, B11111, B11111, B10001, B10001, B10001, B10001, B11111};
  67.  
  68. int dayoftheweek = 1 ;
  69.  
  70. void setup() {
  71. lcd.begin(20,4);
  72.  
  73. setTime(12,00,05,5,9,1999); //power on time (HH,MM,SS,Day, Month, Year)
  74.  
  75. pinMode(minutePin, INPUT_PULLUP);
  76. pinMode(hourPin, INPUT_PULLUP);
  77. pinMode(timeSetButton, INPUT_PULLUP);
  78. pinMode(alarm1SetButton, INPUT_PULLUP);
  79. pinMode(alarm1EnablePin, INPUT_PULLUP);
  80.  
  81. pinMode(alarmLED, OUTPUT);
  82. pinMode(relayOverride, INPUT_PULLUP);
  83.  
  84. pinMode(relayPinA0, OUTPUT);
  85. pinMode(relayPinA1, OUTPUT);
  86.  
  87. lcd.createChar(1,water);
  88. lcd.createChar(2,calendar);
  89.  
  90. }
  91.  
  92. //==================Basic Clock Protocals===========================
  93.  
  94. void loop() {
  95. //read the voltage at the potentiometer convert to 0-1023
  96.  
  97. digitalClockDisplay();
  98. minute_reset59();
  99. hour_reset24();
  100. setAlarmHR_Min();
  101. setTime_Hour_Minute();
  102. AmPm();
  103.  
  104. lcd.setCursor(0,3); lcd.write(1); lcd.print(" every "); printDigits(dayInterval); lcd.setCursor(10,3); lcd.print(" days");
  105. lcd.setCursor(17,3); lcd.write(2); lcd.setCursor(18,3); printDigits(day());
  106. if (second()==59){lcd.clear(); }
  107.  
  108. //=============Day Alarm================
  109.  
  110. /*
  111. if (digitalRead(alarm1EnablePin)==LOW) { //default code. incase this code gets wrecked
  112. alarm(); } */
  113.  
  114. if (digitalRead(alarm1EnablePin)==HIGH) {
  115. lcd.setCursor(1,1); lcd.print("=ACTIVE");
  116. if (day()%dayInterval==0)
  117. alarm(); }
  118.  
  119. else{
  120. lcd.setCursor(1,1); lcd.print("=off
  121. ");
  122.  
  123. digitalWrite(relayPinA0,LOW);
  124. digitalWrite(relayPinA1,LOW);
  125. digitalWrite(alarmLED,LOW);
  126. }
  127.  
  128.  
  129. //--------------------RELAY OFF Toggles-----------------------------------------
  130. if (hour()== alarmHRPushCounter && minute()==alarmMinPushCounter && second()==pumpDuration/29) //relay turns off after 1 minutes from alarm set time
  131. {
  132. digitalWrite(relayPinA0,LOW); delay(200);
  133. digitalWrite(relayPinA1,LOW);
  134. }
  135.  
  136. //-----------RELAY OverRide Toggles-----------------------------------------
  137. if (digitalRead(relayOverride)==LOW && digitalRead(alarm1EnablePin)==LOW)
  138. { lcd.setCursor(15,1); lcd.print("OvrR"); //Relay override will only activate is Alarm Enable is also active
  139. digitalWrite(relayPinA0,HIGH); delay(200);
  140. digitalWrite(relayPinA1,HIGH);
  141. }
  142. }
  143.  
  144.  
  145. //=========Begin Clock Subroutine Section=======================================================================================
  146.  
  147. void setAlarmHR_Min() {
  148. while (digitalRead(alarm1SetButton)==LOW) {
  149.  
  150. alarmHRState = digitalRead(hourPin);
  151. if (alarmHRState != lastalarmHRState) {
  152. if (alarmHRState == LOW) {
  153. alarmHRPushCounter ++; }}
  154.  
  155. alarmMinState = digitalRead(minutePin);
  156. if (alarmMinState != lastalarmMinState) {
  157. if (alarmMinState == LOW) {
  158. alarmMinPushCounter ++; }}
  159.  
  160. lastalarmHRState = alarmHRState;
  161. lastalarmMinState = alarmMinState;
  162. digitalClockDisplay();
  163. minute_reset59();
  164. hour_reset24();
  165. }
  166. }
  167.  
  168. void alarm(){
  169.  
  170. //--------------------RELAY Alarm ON Toggles-----------------------------------------
  171. if (hour()== alarmHRPushCounter && minute()==alarmMinPushCounter && second()<=1){ //sets time for alarm to go off
  172. digitalWrite(relayPinA0,HIGH); // relay board triggers on HIGH
  173. delay(100); digitalWrite(relayPinA1,HIGH);
  174. }
  175.  
  176. if (hour()== alarmHRPushCounter && minute()==alarmMinPushCounter && second()<=4){ //alarm will sound for 10seconds
  177. analogWrite(buzzer, 10); // PWM duty cycle to output; dont use 0 or 255
  178. delay(delayms); // wait for a delayms ms
  179. analogWrite(buzzer, 0); // 0 turns it off
  180. delay(delayms); // wait for a delayms ms
  181.  
  182. unsigned long currentMillis = millis();
  183. if(currentMillis - previousMillis > intervalIdle) { // save the last time you wrote to LCD
  184. previousMillis = currentMillis;
  185. if (LCDalarm == 0){
  186. LCDalarm = LCDalarm + 1;
  187. lcd.setCursor(15,1); lcd.print(" (");lcd.write(1);lcd.print(") ");
  188. digitalWrite(alarmLED,HIGH);
  189. }
  190. else {
  191. lcd.setCursor(15,1); lcd.print("( ");lcd.write(1);lcd.print(" )");
  192. LCDalarm = LCDalarm - 1;
  193. digitalWrite(alarmLED,LOW);
  194. } } }
  195. }
  196. //--------------------------------------------------------
  197. void minute_reset59() {
  198. if (minutePushCounter > 59){
  199. minutePushCounter = 0;}
  200.  
  201. if (alarmMinPushCounter > 59){
  202. alarmMinPushCounter = 0;} }
  203.  
  204. void hour_reset24() {
  205. if (hourPushCounter >23){
  206. hourPushCounter = 0;}
  207.  
  208. if (alarmHRPushCounter >23){
  209. alarmHRPushCounter = 0;} }
  210.  
  211. void setTime_Hour_Minute () {
  212. minuteState = digitalRead(minutePin);
  213. if (minuteState != lastminuteState) {
  214. if (minuteState == LOW) {
  215. minutePushCounter++;
  216. }
  217. }
  218.  
  219. hourState = digitalRead(hourPin);
  220. if (hourState != lasthourState) {
  221. if (hourState == LOW) {
  222. hourPushCounter++;
  223. }
  224. }
  225. lastminuteState = minuteState;
  226. lasthourState = hourState;
  227.  
  228. setButtonState = digitalRead(timeSetButton);
  229. if (setButtonState == LOW) {
  230. setTime(hourPushCounter, minutePushCounter,00,dayoftheweek, 7, 2000); // (HH,MM,SS,Day, Month, Year)
  231. }
  232. }
  233. //--------------------------------------------------------
  234. void AmPm () {
  235. if (hour()>=12) {lcd.setCursor(18,0); lcd.print("PM"); }
  236. else { lcd.setCursor(18,0); lcd.print("AM"); } }
  237.  
  238. //--------------------------------------------------------
  239. void digitalClockDisplay() {
  240. pumpDuration = analogRead(potPin1);
  241. dayInterval = analogRead(potPin2);
  242. dayInterval = map(dayInterval, 0,1000, 1,7);
  243.  
  244. lcd.setCursor(4,0); lcd.print("Time");
  245. lcd.setCursor(9,0); printDigits(hour()); lcd.print(":");
  246. lcd.setCursor(12,0);printDigits(minute());lcd.print(":");
  247. lcd.setCursor(15,0); printDigits(second());
  248. lcd.setCursor(0,1); lcd.write(1);
  249.  
  250. lcd.setCursor(9,1); lcd.print("Set @ ");
  251. lcd.setCursor(15,1); printDigits(alarmHRPushCounter); lcd.print(":");
  252. lcd.setCursor(18,1); printDigits(alarmMinPushCounter);
  253. lcd.setCursor(0,2); lcd.print("Pump duration: "); printDigits(pumpDuration/29);
  254. lcd.setCursor(17,2); lcd.print("sec");
  255. }
  256.  
  257. //--------------------------------------------------------
  258. void printDigits(int digits) {
  259. if (digits <10)
  260. lcd.print('0');
  261. lcd.print(digits);
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement