Guest User

Keurig/Arduino Coffee Maker

a guest
Dec 9th, 2014
1,351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1.  
  2. #include <avr/eeprom.h>
  3.  
  4. void setup()
  5. {
  6.   analogReference(EXTERNAL);
  7.  
  8.   pinMode(A0, INPUT);
  9.   pinMode(11, OUTPUT);
  10.   pinMode(12, OUTPUT);
  11.   pinMode(13, OUTPUT);
  12. }
  13.  
  14. uint16_t readUserTemp()
  15. {
  16.   return eeprom_read_word(0);
  17. }
  18.  
  19. void writeUserTemp(uint16_t v)
  20. {
  21.   eeprom_write_word(0, v);
  22. }
  23.  
  24. boolean user_heater_on = false;
  25. uint32_t last_button = 0;
  26. uint32_t last_relay_engage = 0;
  27. boolean debounce = false;
  28.  
  29. void loop()
  30. {
  31.   boolean bt_on = !digitalRead(2);
  32.   boolean bt_down = !digitalRead(3);
  33.   boolean bt_up = !digitalRead(4);
  34.   boolean bt_pump = !digitalRead(5);
  35.  
  36.   if (debounce && !(bt_on | bt_down | bt_up | bt_pump))
  37.     debounce = false;
  38.  
  39.   if (!debounce &&
  40.       millis() - last_button > 250 &&
  41.       (bt_on | bt_down | bt_up | bt_pump))
  42.   {
  43.     debounce = true;
  44.     last_button = millis();
  45.     if (bt_on)
  46.       user_heater_on = !user_heater_on;
  47.     else if (bt_down)
  48.       writeUserTemp(readUserTemp() - 1);
  49.     else if (bt_up)
  50.       writeUserTemp(readUserTemp() + 1);
  51.   }
  52.  
  53.   uint16_t ntc = analogRead(A0);
  54.   Serial.print("A0 = ");
  55.   Serial.print(ntc);
  56.   Serial.print(", USER = ");
  57.   Serial.println(readUserTemp());
  58.  
  59.   if (ntc > readUserTemp() && millis() - last_relay_engage > 1000)
  60.   {
  61.     Serial.println("ABOVE USER TEMP, HEAT OFF");
  62.     digitalWrite(12, LOW);
  63.     last_relay_engage = millis();
  64.   }
  65.   else if (user_heater_on && ntc < readUserTemp() && millis() - last_relay_engage > 3000)
  66.   {
  67.     Serial.println("HEAT ON");
  68.     digitalWrite(12, HIGH);
  69.     last_relay_engage = millis();
  70.   }
  71.   else if (!user_heater_on)
  72.   {
  73.     digitalWrite(12, LOW);
  74.   }
  75.  
  76.   Serial.print("Time: ");
  77.   Serial.print(millis());
  78.   Serial.print(", last relay: ");
  79.   Serial.println(last_relay_engage);
  80.  
  81.   // LED blinks
  82.   if (user_heater_on)
  83.   {
  84.     if (ntc > readUserTemp())
  85.       digitalWrite(13, (millis() / 50) % 10 > 0);
  86.     else
  87.       digitalWrite(13, HIGH);
  88.   }
  89.   else
  90.   {
  91.     if (ntc > readUserTemp())
  92.       digitalWrite(13, (millis() / 50) % 10 == 0);
  93.     else
  94.       digitalWrite(13, LOW);
  95.   }
  96.  
  97.   if (bt_pump)
  98.   {
  99.     user_heater_on = false;
  100.     analogWrite(11, 96);
  101.   }
  102.   else
  103.     analogWrite(11, 0);
  104.  
  105.   delay(50);
  106. }
Advertisement
Add Comment
Please, Sign In to add comment