Stipa

Window Positioner

Aug 15th, 2019
641
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <dht_nonblocking.h>
  2. #define DHT_SENSOR_TYPE DHT_TYPE_22
  3.  
  4. static const int DHT_SENSOR_PIN = 3;
  5. DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
  6.  
  7. #include "LiquidCrystal.h"
  8. LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
  9.  
  10. #include <AnalogMultiButton.h>
  11. const int BUTTONS_PIN = A0;
  12. const int BUTTONS_TOTAL = 5;
  13. 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.
  14. const int BUTTON_CLOSE = 4;
  15. const int BUTTON_INCREASE = 3;
  16. const int BUTTON_SET = 2;
  17. const int BUTTON_DECREASE = 1;
  18. const int BUTTON_OPEN = 0;
  19.  
  20. const int Opened = 12;
  21. const int Closed = 13;
  22.  
  23. int OpenedState = 0 ;
  24. int ClosedState = 0 ;
  25. int Pin1 = 8;
  26. int Pin2 = 9;
  27. int Pin3 = 10;
  28. int Pin4 = 11;
  29. int steps = 0;
  30. int interval = 30;
  31. unsigned long previousMillis = 0;
  32. float SetTemp = 22.00;
  33. float temperature;
  34. float humidity;
  35.  
  36. AnalogMultiButton buttons(BUTTONS_PIN, BUTTONS_TOTAL, BUTTONS_VALUES);
  37.  
  38. void setup()
  39. {
  40.   pinMode(Pin1, OUTPUT);  
  41.   pinMode(Pin2, OUTPUT);  
  42.   pinMode(Pin3, OUTPUT);  
  43.   pinMode(Pin4, OUTPUT);  
  44.   pinMode(Opened, INPUT_PULLUP);
  45.   pinMode(Closed, INPUT_PULLUP);
  46.   lcd.begin(16, 2);
  47. }
  48. /*
  49.  * Poll for a measurement, keeping the state machine alive.  Returns
  50.  * true if a measurement is available.
  51.  */
  52. static bool measure_environment( float *temperature, float *humidity )
  53. {
  54.   static unsigned long measurement_timestamp = millis( );
  55.  
  56.   /* Measure once every four seconds. */
  57.   if( millis( ) - measurement_timestamp > 4000ul )
  58.   {
  59.     if( dht_sensor.measure( temperature, humidity ) == true )
  60.     {
  61.       measurement_timestamp = millis( );
  62.       return( true );
  63.     }
  64.   }
  65.  
  66.   return( false );
  67. }
  68.  
  69. /*
  70.  * Main program loop.
  71.  */
  72. void loop() {
  73.  
  74.   unsigned long currentMillis = millis();  
  75.  
  76.   OpenedState = digitalRead(Opened) ;
  77.   ClosedState = digitalRead(Closed) ;
  78.   buttons.update();
  79.   int state = 0;
  80.  
  81. if (buttons.onPress(BUTTON_CLOSE))  {
  82.       SetTemp = 40.00;
  83.       lcd.clear();
  84.       lcd.setCursor(5,0);
  85.       lcd.print("Closing");
  86.       interval = 1;
  87.   }
  88.  
  89.   if (buttons.onPress(BUTTON_INCREASE)) {
  90.       SetTemp = SetTemp + 0.10;
  91.       lcd.clear();
  92.       lcd.setCursor(6,0);
  93.       lcd.print(SetTemp);
  94.   }
  95.  
  96.   if (buttons.onPress(BUTTON_SET))  {
  97.       SetTemp = 22.00;
  98.       lcd.clear();
  99.       lcd.setCursor(4,0);
  100.       lcd.print("Temp Set");
  101.       lcd.setCursor(6,1);
  102.       lcd.print(SetTemp);
  103.       interval = 30;
  104.   }
  105.  
  106.   if (buttons.onPress(BUTTON_DECREASE)) {
  107.       SetTemp = SetTemp - 0.10;
  108.       lcd.clear();
  109.       lcd.setCursor(6,0);
  110.       lcd.print(SetTemp);
  111.   }
  112.  
  113.   if (buttons.onPress(BUTTON_OPEN)) {
  114.       SetTemp = 10.00;
  115.       lcd.clear();
  116.       lcd.setCursor(5,0);
  117.       lcd.print("Opening");
  118.       interval = 1;
  119.   }
  120.  
  121. if (currentMillis - previousMillis > interval) {
  122.     previousMillis = currentMillis;
  123.    
  124.     if (OpenedState == LOW && temperature > SetTemp + 0.10) {
  125.     state = 1;
  126.     steps++;
  127.       if (steps >=8)
  128.         steps=0;
  129.     }
  130.  
  131.     if (ClosedState == LOW && temperature < SetTemp - 0.10) {
  132.      state = 1;
  133.      steps--;
  134.       if (steps <=-1)
  135.         steps=7;
  136.     }
  137.  
  138.    
  139.       switch(steps){
  140.        case 0:
  141.         digitalWrite(Pin1, LOW);  
  142.         digitalWrite(Pin2, LOW);
  143.         digitalWrite(Pin3, LOW);
  144.         digitalWrite(Pin4, HIGH);
  145.         break;  
  146.        case 1:
  147.         digitalWrite(Pin1, LOW);  
  148.         digitalWrite(Pin2, LOW);
  149.         digitalWrite(Pin3, HIGH);
  150.         digitalWrite(Pin4, HIGH);
  151.         break;  
  152.        case 2:
  153.         digitalWrite(Pin1, LOW);  
  154.         digitalWrite(Pin2, LOW);
  155.         digitalWrite(Pin3, HIGH);
  156.         digitalWrite(Pin4, LOW);
  157.         break;  
  158.        case 3:
  159.         digitalWrite(Pin1, LOW);  
  160.         digitalWrite(Pin2, HIGH);
  161.         digitalWrite(Pin3, HIGH);
  162.         digitalWrite(Pin4, LOW);
  163.         break;  
  164.        case 4:
  165.         digitalWrite(Pin1, LOW);  
  166.         digitalWrite(Pin2, HIGH);
  167.         digitalWrite(Pin3, LOW);
  168.         digitalWrite(Pin4, LOW);
  169.         break;  
  170.        case 5:
  171.         digitalWrite(Pin1, HIGH);  
  172.         digitalWrite(Pin2, HIGH);
  173.         digitalWrite(Pin3, LOW);
  174.         digitalWrite(Pin4, LOW);
  175.         break;  
  176.        case 6:
  177.         digitalWrite(Pin1, HIGH);  
  178.         digitalWrite(Pin2, LOW);
  179.         digitalWrite(Pin3, LOW);
  180.         digitalWrite(Pin4, LOW);
  181.         break;  
  182.        case 7:
  183.         digitalWrite(Pin1, HIGH);  
  184.         digitalWrite(Pin2, LOW);
  185.         digitalWrite(Pin3, LOW);
  186.         digitalWrite(Pin4, HIGH);
  187.         break;  
  188.        default:
  189.         digitalWrite(Pin1, LOW);  
  190.         digitalWrite(Pin2, LOW);
  191.         digitalWrite(Pin3, LOW);
  192.         digitalWrite(Pin4, LOW);
  193.         break;  
  194.     }
  195.     if (state == 0) {
  196.         steps = 8;
  197.     }
  198.   }
  199.  
  200.   /* Measure temperature and humidity.  If the functions returns
  201.      true, then a measurement is available. */
  202.   if( measure_environment( &temperature, &humidity ) == true )
  203.   {
  204.     lcd.clear();
  205.     lcd.setCursor(0, 0);
  206.     lcd.print("T:");
  207.     lcd.print(temperature);
  208.     lcd.print("C");
  209.     lcd.setCursor(0, 1);
  210.     lcd.print("H:");
  211.     lcd.print(humidity);
  212.     lcd.print("%");
  213.     lcd.setCursor(9, 0);
  214.     lcd.print("S:");
  215.     lcd.print(SetTemp);  
  216.  
  217.        if (OpenedState == LOW && temperature > SetTemp + 0.10) {
  218.           lcd.setCursor(9,1);
  219.           lcd.print("Opening");
  220.        }
  221.        else if (ClosedState == LOW && temperature < SetTemp - 0.10) {
  222.           lcd.setCursor(9,1);
  223.           lcd.print("Closing");
  224.        }
  225.        else {
  226.        lcd.setCursor(9,1);
  227.        lcd.print("Normal ");
  228.        }
  229.   }
  230.  
  231.  
  232. }
Advertisement
Add Comment
Please, Sign In to add comment