Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <dht_nonblocking.h>
- #define DHT_SENSOR_TYPE DHT_TYPE_22
- static const int DHT_SENSOR_PIN = 3;
- DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
- #include "LiquidCrystal.h"
- LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
- #include <AnalogMultiButton.h>
- const int BUTTONS_PIN = A0;
- const int BUTTONS_TOTAL = 5;
- const int BUTTONS_VALUES[BUTTONS_TOTAL] = {0, 295, 459, 563, 634}; //Change these values. To get them, read analog A0 pin, output it to serial. Press each button and write down values you get.
- const int BUTTON_CLOSE = 4;
- const int BUTTON_INCREASE = 3;
- const int BUTTON_SET = 2;
- const int BUTTON_DECREASE = 1;
- const int BUTTON_OPEN = 0;
- const int Opened = 12;
- const int Closed = 13;
- int OpenedState = 0 ;
- int ClosedState = 0 ;
- int Pin1 = 8;
- int Pin2 = 9;
- int Pin3 = 10;
- int Pin4 = 11;
- int steps = 0;
- int interval = 30;
- unsigned long previousMillis = 0;
- float SetTemp = 22.00;
- float temperature;
- float humidity;
- AnalogMultiButton buttons(BUTTONS_PIN, BUTTONS_TOTAL, BUTTONS_VALUES);
- void setup()
- {
- pinMode(Pin1, OUTPUT);
- pinMode(Pin2, OUTPUT);
- pinMode(Pin3, OUTPUT);
- pinMode(Pin4, OUTPUT);
- pinMode(Opened, INPUT_PULLUP);
- pinMode(Closed, INPUT_PULLUP);
- lcd.begin(16, 2);
- }
- /*
- * Poll for a measurement, keeping the state machine alive. Returns
- * true if a measurement is available.
- */
- static bool measure_environment( float *temperature, float *humidity )
- {
- static unsigned long measurement_timestamp = millis( );
- /* Measure once every four seconds. */
- if( millis( ) - measurement_timestamp > 4000ul )
- {
- if( dht_sensor.measure( temperature, humidity ) == true )
- {
- measurement_timestamp = millis( );
- return( true );
- }
- }
- return( false );
- }
- /*
- * Main program loop.
- */
- void loop() {
- unsigned long currentMillis = millis();
- OpenedState = digitalRead(Opened) ;
- ClosedState = digitalRead(Closed) ;
- buttons.update();
- int state = 0;
- if (buttons.onPress(BUTTON_CLOSE)) {
- SetTemp = 40.00;
- lcd.clear();
- lcd.setCursor(5,0);
- lcd.print("Closing");
- interval = 1;
- }
- if (buttons.onPress(BUTTON_INCREASE)) {
- SetTemp = SetTemp + 0.10;
- lcd.clear();
- lcd.setCursor(6,0);
- lcd.print(SetTemp);
- }
- if (buttons.onPress(BUTTON_SET)) {
- SetTemp = 22.00;
- lcd.clear();
- lcd.setCursor(4,0);
- lcd.print("Temp Set");
- lcd.setCursor(6,1);
- lcd.print(SetTemp);
- interval = 30;
- }
- if (buttons.onPress(BUTTON_DECREASE)) {
- SetTemp = SetTemp - 0.10;
- lcd.clear();
- lcd.setCursor(6,0);
- lcd.print(SetTemp);
- }
- if (buttons.onPress(BUTTON_OPEN)) {
- SetTemp = 10.00;
- lcd.clear();
- lcd.setCursor(5,0);
- lcd.print("Opening");
- interval = 1;
- }
- if (currentMillis - previousMillis > interval) {
- previousMillis = currentMillis;
- if (OpenedState == LOW && temperature > SetTemp + 0.10) {
- state = 1;
- steps++;
- if (steps >=8)
- steps=0;
- }
- if (ClosedState == LOW && temperature < SetTemp - 0.10) {
- state = 1;
- steps--;
- if (steps <=-1)
- steps=7;
- }
- switch(steps){
- case 0:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, HIGH);
- break;
- case 1:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, HIGH);
- digitalWrite(Pin4, HIGH);
- break;
- case 2:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, HIGH);
- digitalWrite(Pin4, LOW);
- break;
- case 3:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, HIGH);
- digitalWrite(Pin3, HIGH);
- digitalWrite(Pin4, LOW);
- break;
- case 4:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, HIGH);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, LOW);
- break;
- case 5:
- digitalWrite(Pin1, HIGH);
- digitalWrite(Pin2, HIGH);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, LOW);
- break;
- case 6:
- digitalWrite(Pin1, HIGH);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, LOW);
- break;
- case 7:
- digitalWrite(Pin1, HIGH);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, HIGH);
- break;
- default:
- digitalWrite(Pin1, LOW);
- digitalWrite(Pin2, LOW);
- digitalWrite(Pin3, LOW);
- digitalWrite(Pin4, LOW);
- break;
- }
- if (state == 0) {
- steps = 8;
- }
- }
- /* Measure temperature and humidity. If the functions returns
- true, then a measurement is available. */
- if( measure_environment( &temperature, &humidity ) == true )
- {
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("T:");
- lcd.print(temperature);
- lcd.print("C");
- lcd.setCursor(0, 1);
- lcd.print("H:");
- lcd.print(humidity);
- lcd.print("%");
- lcd.setCursor(9, 0);
- lcd.print("S:");
- lcd.print(SetTemp);
- if (OpenedState == LOW && temperature > SetTemp + 0.10) {
- lcd.setCursor(9,1);
- lcd.print("Opening");
- }
- else if (ClosedState == LOW && temperature < SetTemp - 0.10) {
- lcd.setCursor(9,1);
- lcd.print("Closing");
- }
- else {
- lcd.setCursor(9,1);
- lcd.print("Normal ");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment