Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- #define Btn_1 4
- #define Btn_2 5
- #define Btn_3 2
- #define Btn_4 3
- #define led_1 6
- #define led_2 7
- #define RLY_1 12
- #define ntc_pin A0
- #define nominal_resistance 100000
- #define nominal_temeprature 25
- #define samplingrate 5
- #define beta 3950
- #define Rref 100000
- //Delay for Button 1
- unsigned long previousMillis1 = 0;
- const unsigned long interval1 = 180000;
- //Delay for Button 2
- unsigned long previousMillis2 = 0;
- const unsigned long interval2 = 300000;
- //Delay for Temperature Sensor
- unsigned long previousMillis = 0;
- unsigned long currentMillis = 0;
- const long interval = 1000;
- //Temperature Med settings
- float cutOffTempMed = 50.00;
- //Temperature HIGH settings
- float cutOffTempHigh = 80.00;
- float cutOffTemp = 0;
- int samples = 0;
- uint8_t i;
- float average;
- float temperature;
- int buttonState1 = 0;
- int buttonState2 = 0;
- int buttonState3 = 0;
- int buttonState4 = 0;
- bool time1 = false;
- bool time2 = false;
- int relayONflag = 0;
- int tempIsSetFlag = 0;
- void setup() {
- lcd.init();
- lcd.init();
- lcd.backlight();
- lcd.setCursor(0, 0);
- lcd.print("Hello, world!");
- Serial.begin(9600);
- pinMode(Btn_1, INPUT_PULLUP);
- pinMode(Btn_2, INPUT_PULLUP);
- pinMode(Btn_3, INPUT_PULLUP);
- pinMode(Btn_4, INPUT_PULLUP);
- pinMode(RLY_1, OUTPUT);
- pinMode(led_1, OUTPUT);
- pinMode(led_2, OUTPUT);
- digitalWrite(RLY_1, LOW);
- digitalWrite(led_1, LOW);
- digitalWrite(led_2, LOW);
- lcd.clear();
- }
- void loop() {
- readTempSensor();
- buttonState1 = digitalRead(Btn_1);
- buttonState2 = digitalRead(Btn_2);
- buttonState3 = digitalRead(Btn_3);
- buttonState4 = digitalRead(Btn_4);
- if (buttonState3 == LOW && tempIsSetFlag == 0) {
- cutOffTemp = cutOffTempMed;
- tempIsSetFlag = 1;
- Serial.println("Temp Set To MED");
- lcd.setCursor(0, 1);
- lcd.print("Temp:M");
- }
- if (buttonState4 == LOW && tempIsSetFlag == 0) {
- cutOffTemp = cutOffTempHigh;
- tempIsSetFlag = 1;
- Serial.println("Temp Set To HIGH");
- lcd.setCursor(0, 1);
- lcd.print("Temp:H");
- }
- if (buttonState1 == LOW && relayONflag == 0 && tempIsSetFlag == 1) {
- previousMillis1 = currentMillis;
- digitalWrite(RLY_1, HIGH);
- digitalWrite(led_1, HIGH);
- time1 = true;
- relayONflag = 1;
- Serial.println("Timer set to interval No. [1]");
- lcd.setCursor(8, 1);
- lcd.print("Time:[1]");
- }
- if (time1) {
- if (temperature >= cutOffTemp) {
- digitalWrite(RLY_1, LOW);
- delay(1000);
- }
- else if (temperature < cutOffTemp) {
- digitalWrite(RLY_1, HIGH);
- delay(1000);
- }
- // if enough time has elapsed, turn off the relay
- if (currentMillis - previousMillis1 >= interval1)
- {
- //turn off relay
- digitalWrite(RLY_1, LOW);
- digitalWrite(led_1, LOW);
- time1 = false;
- relayONflag = 0;
- tempIsSetFlag = 0;
- Serial.println("Timer No. [1] is DONE.");
- lcd.setCursor(0, 1);
- lcd.print(" ");
- }
- }
- if ( buttonState2 == LOW && relayONflag == 0 && tempIsSetFlag == 1) // no need to check for previous state, in this specific case
- {
- previousMillis2 = currentMillis;
- digitalWrite(RLY_1, HIGH);
- digitalWrite(led_2, HIGH);
- time2 = true;
- relayONflag = 1;
- Serial.println("Timer set to interval No. [2]");
- lcd.setCursor(8, 1);
- lcd.print("Time:[2]");
- }
- if (time2) {
- if (temperature >= cutOffTemp) {
- digitalWrite(RLY_1, LOW);
- delay(1000);
- }
- else if (temperature < cutOffTemp) {
- digitalWrite(RLY_1, HIGH);
- delay(1000);
- }
- // if enough time has elapsed, turn off the relay
- if (currentMillis - previousMillis2 >= interval2)
- {
- //turn off relay
- digitalWrite(RLY_1, LOW);
- digitalWrite(led_2, LOW);
- time2 = false;
- relayONflag = 0;
- tempIsSetFlag = 0;
- Serial.println("Timer No. [2] is DONE.");
- lcd.setCursor(0, 1);
- lcd.print(" ");
- }
- }
- }//end of loop
- void readTempSensor() {
- currentMillis = millis();
- if (currentMillis - previousMillis >= interval) {
- previousMillis = currentMillis;
- //run code every 1 second
- samples = 0;
- for (i = 0; i < samplingrate; i++) {
- samples += analogRead(ntc_pin);
- delay(10);
- }
- average = 0;
- average = samples / samplingrate;
- average = 1023 / average - 1;
- average = Rref / average;
- temperature = average / nominal_resistance;
- temperature = log(temperature);
- temperature /= beta;
- temperature += 1.0 / (nominal_temeprature + 273.15);
- temperature = 1.0 / temperature;
- temperature -= 273.15;
- Serial.print("Temperature ");
- Serial.print(temperature);
- Serial.println(" *C");
- lcd.setCursor(0, 0);
- lcd.print("Temp:");
- lcd.print(temperature);
- lcd.print(" ");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement