#include #include #include #include LiquidCrystal lcd(9, 3, 8, 7, 6, 5, 4); Encoder rotEnc(A0, A1); long encVal = 0; int activeTimer=0; int timerLens[3]; bool updateDisplay=false; int eeAddr1 = 0; int eeAddr2 = 5; int eeAddr3 = 10; void EEPROMWriteInt(int p_address, int p_value) { byte lowByte = ((p_value >> 0) & 0xFF); byte highByte = ((p_value >> 8) & 0xFF); EEPROM.write(p_address, lowByte); EEPROM.write(p_address + 1, highByte); } unsigned int EEPROMReadInt(int p_address) { byte lowByte = EEPROM.read(p_address); byte highByte = EEPROM.read(p_address + 1); return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00); } bool buttonLeftPressed=false; void buttonLeft() { buttonLeftPressed=true; } bool buttonRightPressed=false; void buttonRight() { buttonRightPressed=true; } bool buttonMidPressed=false; void buttonMid() { buttonMidPressed=true; } bool turnedLeft=false; void turnLeft() { turnedLeft=true; } bool turnedRight=false; void turnRight() { turnedRight=true; } bool rotPressed=false; void pressRot() { rotPressed=true; } void lcdPut(char* text) { char str[35]; sprintf(str, "%s", text); lcd.clear(); lcd.home(); lcd.print(str); } void grind(int time) { lcdPut("grinding..."); digitalWrite(2, HIGH); delay(time); digitalWrite(2, LOW); lcdPut("Fin..."); delay(550); updateDisplay=true; } void boilerplate() { if(rotEnc.read() < encVal) { encVal = rotEnc.read(); turnLeft(); return; } else if(rotEnc.read() > encVal) { encVal = rotEnc.read(); turnRight(); return; } if( digitalRead(A2) == LOW) { for(int i=0; i<10; i++) { if( digitalRead(A2) != LOW ) return; delay(150); } pinMode(A2, INPUT); digitalWrite(A2, LOW); grind( timerLens[activeTimer] ); pinMode(A2, INPUT); digitalWrite(A2, HIGH); delay(25); } if( digitalRead(A3) == LOW ) { buttonLeft(); delay(25); } if( digitalRead(A4) == LOW ) { buttonMid(); delay(25); } if( digitalRead(A5) == LOW ) { buttonRight(); delay(25); } } void loop() { boilerplate(); if(buttonLeftPressed) { buttonLeftPressed=false; activeTimer=0; updateDisplay=true; } if(buttonRightPressed) { buttonRightPressed=false; activeTimer=2; updateDisplay=true; } if(buttonMidPressed) { buttonMidPressed=false; activeTimer=1; updateDisplay=true; } if(turnedLeft) { turnedLeft=false; timerLens[activeTimer] -= 5; updateDisplay=true; } if(turnedRight) { turnedRight=false; timerLens[activeTimer] += 5; updateDisplay=true; } if(rotPressed) { rotPressed=false; grind(timerLens[activeTimer]); updateDisplay=true; } if(updateDisplay) { char str[16]; sprintf(str, "T%1d:%5d", activeTimer, timerLens[activeTimer]); lcdPut(str); updateDisplay=false; if(EEPROMReadInt(eeAddr1) != timerLens[0]) EEPROMWriteInt(eeAddr1, timerLens[0]); if(EEPROMReadInt(eeAddr2) != timerLens[1]) EEPROMWriteInt(eeAddr2, timerLens[1]); if(EEPROMReadInt(eeAddr3) != timerLens[2]) EEPROMWriteInt(eeAddr3, timerLens[2]); } } void setup() { //Serial.begin(9600); // EEPROMWriteInt(eeAddr1, 4500); // EEPROMWriteInt(eeAddr2, 500); // EEPROMWriteInt(eeAddr3, 10000); timerLens[0] = EEPROMReadInt(eeAddr1); timerLens[1] = EEPROMReadInt(eeAddr2); timerLens[2] = EEPROMReadInt(eeAddr3); pinMode(A2, INPUT); digitalWrite(A2,HIGH); pinMode(A3, INPUT); digitalWrite(A3,HIGH); pinMode(A4, INPUT); digitalWrite(A4,HIGH); pinMode(A5, INPUT); digitalWrite(A5,HIGH); pinMode(2, OUTPUT); digitalWrite(2, LOW); lcd.clear(); lcd.home(); lcd.print("INIT"); delay(2500); updateDisplay=true; }