safwan092

Untitled

Nov 6th, 2022
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.91 KB | None | 0 0
  1.  
  2. #define OvenRelayPin 21
  3. #define TempDO 19
  4. #define TempCS 23
  5. #define TempCLK 5
  6. #define FlamePin 18
  7. #define buzzerPin 22
  8.  
  9. #define BLYNK_TEMPLATE_ID "TMPLY0JjXp3H"
  10. #define BLYNK_DEVICE_NAME "IOTOven"
  11. #define BLYNK_AUTH_TOKEN "Lz1WZTaGaiTvRg9EDSpRBQvJbaTVQZJB"
  12. #define BLYNK_FIRMWARE_VERSION "0.1.0"
  13.  
  14. #define BLYNK_PRINT Serial
  15. #define APP_DEBUG
  16.  
  17. #include "max6675.h"
  18. #include "BlynkEdgent.h"
  19. #include <TimeLib.h>
  20.  
  21. int thermoDO = TempDO;
  22. int thermoCS = TempCS;
  23. int thermoCLK = TempCLK;
  24. int setTemp;
  25. int Temp = 0;
  26. int FlameStatus = 0;
  27.  
  28. MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
  29.  
  30. BlynkTimer timer;
  31. BlynkTimer timer2;
  32.  
  33. bool led_set;
  34. long timer_start_set = 0xFFFF;
  35. long timer_stop_set = 0xFFFF;
  36. unsigned char weekday_set;
  37.  
  38. long rtc_sec;
  39. unsigned char day_of_week;
  40.  
  41. bool led_status;
  42. bool update_blynk_status;
  43. bool led_timer_on_set;
  44. // #########################################################################################################
  45. // LED 1
  46. BLYNK_WRITE(V0)
  47. {
  48. int val = param.asInt();
  49.  
  50. if ( led_timer_on_set == 0 )
  51. led_set = val;
  52. else
  53. update_blynk_status = 1;
  54. }
  55. // setTemp
  56. BLYNK_WRITE(V1)
  57. {
  58. int SsetTemp = param.asInt();
  59. setTemp = SsetTemp;
  60. Serial.print("setTemp = ");
  61. Serial.println(setTemp);
  62. }
  63. // Timer 1
  64. BLYNK_WRITE(V2)
  65. {
  66. unsigned char week_day;
  67.  
  68. TimeInputParam t(param);
  69.  
  70. if (t.hasStartTime() && t.hasStopTime() )
  71. {
  72. timer_start_set = (t.getStartHour() * 60 * 60) + (t.getStartMinute() * 60) + t.getStartSecond();
  73. timer_stop_set = (t.getStopHour() * 60 * 60) + (t.getStopMinute() * 60) + t.getStopSecond();
  74.  
  75. Serial.println(String("Start Time: ") +
  76. t.getStartHour() + ":" +
  77. t.getStartMinute() + ":" +
  78. t.getStartSecond());
  79.  
  80. Serial.println(String("Stop Time: ") +
  81. t.getStopHour() + ":" +
  82. t.getStopMinute() + ":" +
  83. t.getStopSecond());
  84.  
  85. for (int i = 1; i <= 7; i++)
  86. {
  87. if (t.isWeekdaySelected(i))
  88. {
  89. week_day |= (0x01 << (i - 1));
  90. Serial.println(String("Day ") + i + " is selected");
  91. }
  92. else
  93. {
  94. week_day &= (~(0x01 << (i - 1)));
  95. }
  96. }
  97.  
  98. weekday_set = week_day;
  99. }
  100. else
  101. {
  102. timer_start_set = 0xFFFF;
  103. timer_stop_set = 0xFFFF;
  104. }
  105. }
  106. BLYNK_WRITE(InternalPinRTC)
  107. {
  108. const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
  109. unsigned long blynkTime = param.asLong();
  110.  
  111. if (blynkTime >= DEFAULT_TIME)
  112. {
  113. setTime(blynkTime);
  114.  
  115. day_of_week = weekday();
  116.  
  117. if ( day_of_week == 1 )
  118. day_of_week = 7;
  119. else
  120. day_of_week -= 1;
  121.  
  122. rtc_sec = (hour() * 60 * 60) + (minute() * 60) + second();
  123.  
  124. Serial.println(blynkTime);
  125. Serial.println(String("RTC Server: ") + hour() + ":" + minute() + ":" + second());
  126. Serial.println(String("Day of Week: ") + weekday());
  127. }
  128. }
  129.  
  130. // #########################################################################################################
  131. BLYNK_CONNECTED()
  132. {
  133. Blynk.sendInternal("rtc", "sync");
  134. }
  135.  
  136. // #########################################################################################################
  137. void checkFlame() {
  138. FlameStatus = !digitalRead(FlamePin);
  139.  
  140. if (FlameStatus > 0) {
  141. led_status = 0;
  142. Blynk.virtualWrite(V0, 0);
  143. Blynk.syncVirtual(V0);
  144. digitalWrite(OvenRelayPin, 0);
  145. digitalWrite(buzzerPin, 1);
  146. Serial.print("Flame Status:");
  147. Serial.println(FlameStatus);
  148. Serial.println("ALERT!!!!!");
  149. Blynk.logEvent("fire");
  150. Blynk.virtualWrite(V3, FlameStatus);
  151. }
  152. else{
  153. digitalWrite(buzzerPin, 0);
  154. }
  155.  
  156. Blynk.virtualWrite(V3, FlameStatus);
  157. }
  158. void checkTime() {
  159. Blynk.sendInternal("rtc", "sync");
  160. Temp = thermocouple.readCelsius();
  161. Serial.print("C = ");
  162. Serial.println(Temp);
  163.  
  164. }
  165.  
  166. // #########################################################################################################
  167. void led_mng()
  168. {
  169. bool time_set_overflow;
  170. bool led_status_buf;
  171.  
  172. led_status_buf = led_status;
  173. time_set_overflow = 0;
  174.  
  175. if ( timer_start_set != 0xFFFF && timer_stop_set != 0xFFFF)
  176. {
  177. if ( timer_stop_set < timer_start_set ) time_set_overflow = 1;
  178.  
  179. if ((((time_set_overflow == 0 && (rtc_sec >= timer_start_set) && (rtc_sec < timer_stop_set)) ||
  180. (time_set_overflow && ((rtc_sec >= timer_start_set) || (rtc_sec < timer_stop_set)))) &&
  181. (weekday_set == 0x00 || (weekday_set & (0x01 << (day_of_week - 1) )))) )
  182. {
  183. led_timer_on_set = 1;
  184. }
  185. else
  186. led_timer_on_set = 0;
  187. }
  188. else
  189. led_timer_on_set = 0;
  190.  
  191. if ( led_timer_on_set )
  192. {
  193. led_status = 1;
  194. led_set = 0;
  195. }
  196. else
  197. {
  198. led_status = led_set;
  199. }
  200.  
  201. if ( led_status_buf != led_status ) {
  202. update_blynk_status = 1;
  203. }
  204. // HARDWARE CONTROL
  205. //digitalWrite(OvenRelayPin, led_status);
  206. if (setTemp > Temp && led_set == 1) {
  207. digitalWrite(OvenRelayPin, led_status);
  208. }
  209. else if(setTemp < Temp && led_set == 1){
  210. digitalWrite(OvenRelayPin, 0);
  211. }
  212. else{
  213. digitalWrite(OvenRelayPin, led_status);
  214. }
  215.  
  216. }
  217.  
  218. // #########################################################################################################
  219. void blynk_update()
  220. {
  221. if ( update_blynk_status )
  222. {
  223. update_blynk_status = 0;
  224. Blynk.virtualWrite(V0, led_status);
  225.  
  226. }
  227.  
  228. }
  229.  
  230. // #########################################################################################################
  231.  
  232. void setup()
  233. {
  234. Serial.begin(115200);
  235. delay(100);
  236. pinMode(OvenRelayPin, OUTPUT);
  237. pinMode(buzzerPin, OUTPUT);
  238. pinMode(FlamePin, INPUT);
  239. digitalWrite(buzzerPin, 0);
  240. digitalWrite(OvenRelayPin, 0);
  241. BlynkEdgent.begin();
  242. timer.setInterval(10000L, checkTime);
  243. timer2.setInterval(100L, checkFlame);
  244.  
  245. }
  246.  
  247. void loop() {
  248. BlynkEdgent.run();
  249. timer.run();
  250. timer2.run();
  251. led_mng();
  252. blynk_update();
  253. }
Advertisement
Add Comment
Please, Sign In to add comment