Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #include <SoftwareSerial.h>
  2. #include <LiquidCrystal.h>
  3.  
  4. int buttonState1 = 0;
  5. int buttonState2 = 0;
  6. int lastButtonState1 = 0;
  7. int lastButtonState2 = 0;
  8. float temperature = 21;
  9. int MaxTemperature = 35;
  10. int MinTemperature = 6;
  11. int sensePin = A0;  
  12. int RelayPin = 10;
  13. int Hyst = 7;
  14. int sensorInput;    
  15. float PreviousTemp;
  16. float Hystersensis = 0.50;
  17. double temp;      
  18. int buttonState = 0;
  19. int lastButtonState = 0;
  20. int buttonPushCounter = 3;
  21. char * LOGO = "                Arduino Thermostate                ";
  22.  
  23.  
  24. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  25.  
  26. void setup() {
  27.   pinMode(8, INPUT);
  28.   pinMode(9, INPUT);
  29.   pinMode(RelayPin, OUTPUT);
  30.   pinMode(Hyst, INPUT);
  31.   #define PinTempSensor 0
  32.   pinMode(PinTempSensor, INPUT_PULLUP);
  33.   Serial.begin(9600);
  34.   lcd.begin(16, 2);
  35.  
  36.   for (int letter = 0; letter <= strlen(LOGO) - 16; letter++)
  37.   {
  38.     showLetters(0, letter);
  39.   }
  40.   //delay(2000);
  41.   lcd.clear();
  42.   lcd.setCursor(12, 1);
  43.   lcd.print(temperature);
  44.   lcd.setCursor(14, 1);
  45.   lcd.print(" C");  
  46. }
  47. void showLetters(int printStart, int startLetter)
  48. {
  49.   lcd.setCursor(printStart, 0);
  50.   for (int letter = startLetter; letter <= startLetter + 15; letter++) // Print only 16 chars in Line #2 starting 'startLetter'
  51.   {
  52.     lcd.print(LOGO[letter]);
  53.   }
  54.   lcd.print(" ");
  55.   delay(100);
  56. }
  57.  
  58.  
  59. void loop() {
  60.  
  61.  buttonState1 = digitalRead(8);
  62.  buttonState2 = digitalRead(9);
  63.  if (lastButtonState1 < 1)
  64.  {
  65.   if (temperature > MinTemperature)
  66.      {
  67.        if (buttonState1 > 0)
  68.           {
  69.            temperature = temperature -0.5;
  70.            if (temperature < 10)
  71.               {
  72.                lcd.clear();
  73.                lcd.setCursor(14, 1);
  74.                lcd.print(" C");
  75.                lcd.setCursor(10, 1);
  76.               } else
  77.                 {
  78.                  lcd.clear();
  79.                  lcd.setCursor(14, 1);
  80.                  lcd.print(" C");
  81.                  lcd.setCursor(9, 1);
  82.                 }
  83.         lcd.print(temperature);
  84.         Serial.println(temperature);
  85.         lastButtonState1 = 1;
  86.               }
  87.             }
  88.       }
  89.  
  90. if (lastButtonState1> 0)
  91.       {
  92.        if (buttonState1 < 1)
  93.           {
  94.            lastButtonState1 = 0;
  95.           }
  96.        }
  97.    
  98.  if (lastButtonState2 < 1)
  99.  {
  100.   if (temperature < MaxTemperature)
  101.      {
  102.        if (buttonState2 > 0)
  103.           {
  104.            temperature = temperature +0.5;
  105.            if (temperature < 10)
  106.               {
  107.                lcd.clear();
  108.                lcd.setCursor(14, 1);
  109.                lcd.print(" C");
  110.                lcd.setCursor(10, 1);
  111.               } else
  112.                 {
  113.                  lcd.clear();
  114.                  lcd.setCursor(14, 1);
  115.                  lcd.print(" C");
  116.                  lcd.setCursor(9, 1);
  117.                 }
  118.         lcd.print(temperature);
  119.         Serial.println(temperature);
  120.         lastButtonState2 = 1;
  121.               }
  122.             }
  123.       }
  124. if (lastButtonState2> 0)
  125.       {
  126.        if (buttonState2 < 1)
  127.           {
  128.            lastButtonState2 = 0;
  129.           }
  130.        }
  131.   sensorInput = analogRead(A0);    
  132.   temp = (double)sensorInput / 1024;      
  133.   temp = temp * 5;                
  134.   temp = temp - 0.5;                
  135.   temp = temp * 100;              
  136.  
  137.  
  138.   if (temp >= 0 && temp < 10)  
  139.   {
  140.     lcd.setCursor(10,0);
  141.   } else
  142.   {
  143.     if (temp > 9 ) lcd.setCursor(9,0);
  144.   }
  145.   if (temp > 100) lcd.setCursor(8,0);
  146.   if (temp < 0 && temp > -10)
  147.      {
  148.      lcd.setCursor(9,0);
  149.      }
  150.   if (temp < -10)
  151.      {
  152.      lcd.setCursor(8,0);
  153.      }
  154.     lcd.print(temp);
  155.      
  156.   {
  157.           lcd.setCursor(14, 0);
  158.           lcd.print(" C");
  159.           }
  160.        
  161.     if (temp == PreviousTemp)
  162.     {
  163.      
  164.     } else
  165.         {
  166.          lcd.clear();
  167.          PreviousTemp = temp;
  168.  
  169.            if (temperature < 10)
  170.               {
  171.                lcd.clear();
  172.                lcd.setCursor(14, 1);
  173.                lcd.print(" C");
  174.                lcd.setCursor(10, 1);
  175.               } else
  176.                 {
  177.                  lcd.clear();
  178.                  lcd.setCursor(14, 1);
  179.                  lcd.print(" C");
  180.                  lcd.setCursor(9, 1);
  181.                 }
  182.         lcd.print(temperature);
  183.         lastButtonState2 = 1;
  184.               }
  185.     if (temp < temperature - Hystersensis)
  186.     {
  187.       digitalWrite(RelayPin,HIGH);
  188.     } else
  189.     {
  190.       digitalWrite(RelayPin,LOW);
  191.     }
  192.  
  193.  
  194.   buttonState = digitalRead(Hyst);
  195.  
  196.   if (buttonState != lastButtonState) {
  197.     if (buttonState == HIGH) {
  198.       buttonPushCounter += 1;
  199.       if (buttonPushCounter > 9) buttonPushCounter = 1;
  200.       Serial.println("on");
  201.       Serial.print("number of button pushes: ");
  202.       if (buttonPushCounter == 1) Hystersensis = 0.00;
  203.       if (buttonPushCounter == 2) Hystersensis = 0.25;
  204.       if (buttonPushCounter == 3) Hystersensis = 0.50;
  205.       if (buttonPushCounter == 4) Hystersensis = 0.75;
  206.       if (buttonPushCounter == 5) Hystersensis = 1.00;
  207.       if (buttonPushCounter == 6) Hystersensis = 1.25;
  208.       if (buttonPushCounter == 7) Hystersensis = 1.50;
  209.       if (buttonPushCounter == 8) Hystersensis = 1.75;
  210.       if (buttonPushCounter == 9) Hystersensis = 2.00;
  211.       lcd.setCursor(1, 1);
  212.       lcd.print(Hystersensis);
  213.       Serial.println(buttonPushCounter);
  214.     } else {
  215.       Serial.println("off");
  216.     }
  217.     delay(5);
  218.   }
  219.   lastButtonState = buttonState;
  220.   if (buttonPushCounter % 4 == 0) {
  221.     digitalWrite(13, HIGH);
  222.   } else {
  223.     digitalWrite(13, LOW);
  224.   }
  225.       lcd.setCursor(1, 1);
  226.       lcd.print(Hystersensis);
  227.   //delay(100);
  228. }
  229.  
  230.