Advertisement
safwan092

Untitled

Feb 12th, 2023
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3.  
  4. LiquidCrystal_I2C lcd(0x27, 16, 2);
  5.  
  6. #define Btn_1 4
  7. #define Btn_2 5
  8. #define Btn_3 2
  9. #define Btn_4 3
  10. #define led_1 6
  11. #define led_2 7
  12. #define RLY_1 12
  13. #define ntc_pin A0
  14. #define nominal_resistance 100000
  15. #define nominal_temeprature 25
  16. #define samplingrate 5
  17. #define beta 3950
  18. #define Rref 100000
  19.  
  20. //Delay for Button 1
  21. unsigned long previousMillis1 = 0;
  22. const unsigned long interval1 = 180000;
  23.  
  24. //Delay for Button 2
  25. unsigned long previousMillis2 = 0;
  26. const unsigned long interval2 = 300000;
  27.  
  28. //Delay for Temperature Sensor
  29. unsigned long previousMillis = 0;
  30. unsigned long currentMillis = 0;
  31. const long interval = 1000;
  32.  
  33. //Temperature Med settings
  34. float cutOffTempMed = 50.00;
  35. //Temperature HIGH settings
  36. float cutOffTempHigh = 80.00;
  37.  
  38. float cutOffTemp = 0;
  39. int samples = 0;
  40. uint8_t i;
  41. float average;
  42. float temperature;
  43. int buttonState1 = 0;
  44. int buttonState2 = 0;
  45. int buttonState3 = 0;
  46. int buttonState4 = 0;
  47. bool time1 = false;
  48. bool time2 = false;
  49. int relayONflag = 0;
  50. int tempIsSetFlag = 0;
  51.  
  52. void setup() {
  53. lcd.init();
  54. lcd.init();
  55. lcd.backlight();
  56. lcd.setCursor(0, 0);
  57. lcd.print("Hello, world!");
  58. Serial.begin(9600);
  59. pinMode(Btn_1, INPUT_PULLUP);
  60. pinMode(Btn_2, INPUT_PULLUP);
  61. pinMode(Btn_3, INPUT_PULLUP);
  62. pinMode(Btn_4, INPUT_PULLUP);
  63. pinMode(RLY_1, OUTPUT);
  64. pinMode(led_1, OUTPUT);
  65. pinMode(led_2, OUTPUT);
  66. digitalWrite(RLY_1, LOW);
  67. digitalWrite(led_1, LOW);
  68. digitalWrite(led_2, LOW);
  69. lcd.clear();
  70. }
  71.  
  72. void loop() {
  73.  
  74. readTempSensor();
  75.  
  76. buttonState1 = digitalRead(Btn_1);
  77. buttonState2 = digitalRead(Btn_2);
  78. buttonState3 = digitalRead(Btn_3);
  79. buttonState4 = digitalRead(Btn_4);
  80.  
  81. if (buttonState3 == LOW && tempIsSetFlag == 0) {
  82. cutOffTemp = cutOffTempMed;
  83. tempIsSetFlag = 1;
  84. Serial.println("Temp Set To MED");
  85. lcd.setCursor(0, 1);
  86. lcd.print("Temp:M");
  87. }
  88. if (buttonState4 == LOW && tempIsSetFlag == 0) {
  89. cutOffTemp = cutOffTempHigh;
  90. tempIsSetFlag = 1;
  91. Serial.println("Temp Set To HIGH");
  92. lcd.setCursor(0, 1);
  93. lcd.print("Temp:H");
  94. }
  95.  
  96. if (buttonState1 == LOW && relayONflag == 0 && tempIsSetFlag == 1) {
  97. previousMillis1 = currentMillis;
  98. digitalWrite(RLY_1, HIGH);
  99. digitalWrite(led_1, HIGH);
  100. time1 = true;
  101. relayONflag = 1;
  102. Serial.println("Timer set to interval No. [1]");
  103. lcd.setCursor(8, 1);
  104. lcd.print("Time:[1]");
  105. }
  106. if (time1) {
  107. if (temperature >= cutOffTemp) {
  108. digitalWrite(RLY_1, LOW);
  109. delay(1000);
  110. }
  111. else if (temperature < cutOffTemp) {
  112. digitalWrite(RLY_1, HIGH);
  113. delay(1000);
  114. }
  115. // if enough time has elapsed, turn off the relay
  116. if (currentMillis - previousMillis1 >= interval1)
  117. {
  118. //turn off relay
  119. digitalWrite(RLY_1, LOW);
  120. digitalWrite(led_1, LOW);
  121. time1 = false;
  122. relayONflag = 0;
  123. tempIsSetFlag = 0;
  124. Serial.println("Timer No. [1] is DONE.");
  125. lcd.setCursor(0, 1);
  126. lcd.print(" ");
  127. }
  128. }
  129. if ( buttonState2 == LOW && relayONflag == 0 && tempIsSetFlag == 1) // no need to check for previous state, in this specific case
  130. {
  131. previousMillis2 = currentMillis;
  132. digitalWrite(RLY_1, HIGH);
  133. digitalWrite(led_2, HIGH);
  134. time2 = true;
  135. relayONflag = 1;
  136. Serial.println("Timer set to interval No. [2]");
  137. lcd.setCursor(8, 1);
  138. lcd.print("Time:[2]");
  139. }
  140.  
  141. if (time2) {
  142. if (temperature >= cutOffTemp) {
  143. digitalWrite(RLY_1, LOW);
  144. delay(1000);
  145. }
  146. else if (temperature < cutOffTemp) {
  147. digitalWrite(RLY_1, HIGH);
  148. delay(1000);
  149. }
  150. // if enough time has elapsed, turn off the relay
  151. if (currentMillis - previousMillis2 >= interval2)
  152. {
  153. //turn off relay
  154. digitalWrite(RLY_1, LOW);
  155. digitalWrite(led_2, LOW);
  156. time2 = false;
  157. relayONflag = 0;
  158. tempIsSetFlag = 0;
  159. Serial.println("Timer No. [2] is DONE.");
  160. lcd.setCursor(0, 1);
  161. lcd.print(" ");
  162. }
  163. }
  164.  
  165. }//end of loop
  166.  
  167. void readTempSensor() {
  168. currentMillis = millis();
  169. if (currentMillis - previousMillis >= interval) {
  170. previousMillis = currentMillis;
  171. //run code every 1 second
  172. samples = 0;
  173. for (i = 0; i < samplingrate; i++) {
  174. samples += analogRead(ntc_pin);
  175. delay(10);
  176. }
  177. average = 0;
  178. average = samples / samplingrate;
  179. average = 1023 / average - 1;
  180. average = Rref / average;
  181. temperature = average / nominal_resistance;
  182. temperature = log(temperature);
  183. temperature /= beta;
  184. temperature += 1.0 / (nominal_temeprature + 273.15);
  185. temperature = 1.0 / temperature;
  186. temperature -= 273.15;
  187. Serial.print("Temperature ");
  188. Serial.print(temperature);
  189. Serial.println(" *C");
  190.  
  191. lcd.setCursor(0, 0);
  192. lcd.print("Temp:");
  193. lcd.print(temperature);
  194. lcd.print(" ");
  195. }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement