Last active
April 20, 2017 16:51
-
-
Save serverwentdown/3b043cec2589d13024e748558a6fd4f6 to your computer and use it in GitHub Desktop.
https://www.instagram.com/p/BTHUAkggVJy/ cdtea based on github.com/achilikin/cdtea
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define PIN_MDOWN D0 | |
#define PIN_MUP D3 | |
#define PIN_MSPEED D1 | |
#define MSPEED 255 | |
#define PIN_BUTTON D4 | |
typedef enum { | |
TRAY_OPEN, | |
TRAY_OPENING, | |
TRAY_CLOSE, | |
TRAY_CLOSING | |
} tray_state_type; | |
tray_state_type tray_state = TRAY_CLOSE; | |
unsigned long tray_start = 0; | |
#define TRAY_OPEN_TIME 1160 | |
typedef enum { | |
BREW_IDLE, | |
BREW_STARTING, | |
BREW_PRESOAK, | |
BREW_RUNNING, | |
BREW_STOPPING | |
} brew_state_type; | |
brew_state_type brew_state = BREW_IDLE; | |
unsigned long brew_presoak_start = 0; | |
#define BREW_PRESOAK_TIME 10000 | |
unsigned long brew_cycle_start = 0; | |
#define BREW_CYCLE_TIME 5000 | |
typedef enum { | |
BUTTON_UNPRESSED, | |
BUTTON_PRESSING, | |
BUTTON_PRESSED, | |
BUTTON_UNPRESSING | |
} button_state_type; | |
button_state_type button_state = BUTTON_UNPRESSED; | |
void setup() { | |
pinMode(PIN_MDOWN, OUTPUT); | |
pinMode(PIN_MUP, OUTPUT); | |
pinMode(PIN_MSPEED, OUTPUT); | |
pinMode(PIN_BUTTON, INPUT_PULLUP); | |
analogWrite(PIN_MSPEED, MSPEED); | |
Particle.subscribe("ambrose_cdtea", event); | |
Particle.publish("ambrose_cdtea_ready"); | |
// Serial.begin(); | |
} | |
void loop() { | |
if (digitalRead(PIN_BUTTON) == LOW) { | |
if (button_state == BUTTON_UNPRESSED) { | |
button_state = BUTTON_PRESSING; | |
} | |
} else { | |
if (button_state == BUTTON_PRESSED) { | |
//button_state = BUTTON_UNPRESSING; | |
button_state = BUTTON_UNPRESSED; | |
} | |
} | |
if (brew_state == BREW_STARTING) { | |
if (tray_state == TRAY_CLOSE) { | |
Particle.publish("ambrose_cdtea_tray_opening"); | |
tray_state = TRAY_OPENING; | |
} | |
if (button_state == BUTTON_PRESSING) { | |
button_state = BUTTON_PRESSED; | |
brew_state = BREW_PRESOAK; | |
Particle.publish("ambrose_cdtea_presoak"); | |
} | |
} else if (brew_state == BREW_PRESOAK) { | |
if (tray_state == TRAY_OPEN) { | |
tray_state = TRAY_CLOSING; | |
} else if (tray_state == TRAY_CLOSE) { | |
if (millis() - brew_presoak_start >= BREW_PRESOAK_TIME) { | |
brew_state = BREW_RUNNING; | |
Particle.publish("ambrose_cdtea_running"); | |
} | |
} | |
} else if (brew_state == BREW_RUNNING) { | |
if (tray_state == TRAY_CLOSE) { | |
if (millis() - brew_cycle_start >= BREW_CYCLE_TIME) { | |
tray_state = TRAY_OPENING; | |
Particle.publish("ambrose_cdtea_tray_opening"); | |
} | |
} else { | |
brew_cycle_start = millis(); | |
} | |
if (tray_state == TRAY_OPEN) { | |
tray_state = TRAY_CLOSING; | |
Particle.publish("ambrose_cdtea_tray_closing"); | |
} | |
} else if (brew_state == BREW_STOPPING) { | |
if (tray_state == TRAY_CLOSE) { | |
Particle.publish("ambrose_cdtea_tray_opening"); | |
tray_state = TRAY_OPENING; | |
} | |
if (button_state == BUTTON_PRESSING) { | |
button_state = BUTTON_PRESSED; | |
tray_state = TRAY_CLOSING; | |
brew_state = BREW_IDLE; | |
Particle.publish("ambrose_cdtea_idle"); | |
} | |
} | |
if (brew_state != BREW_PRESOAK) { | |
brew_presoak_start = millis(); | |
} | |
if (tray_state == TRAY_OPENING) { | |
digitalWrite(PIN_MUP, HIGH); | |
digitalWrite(PIN_MDOWN, LOW); | |
if (millis() - tray_start >= TRAY_OPEN_TIME) { | |
tray_state = TRAY_OPEN; | |
digitalWrite(PIN_MUP, LOW); | |
digitalWrite(PIN_MDOWN, LOW); | |
} | |
} else if (tray_state == TRAY_CLOSING) { | |
digitalWrite(PIN_MUP, LOW); | |
digitalWrite(PIN_MDOWN, HIGH); | |
if (millis() - tray_start >= TRAY_OPEN_TIME) { | |
tray_state = TRAY_CLOSE; | |
digitalWrite(PIN_MUP, LOW); | |
digitalWrite(PIN_MDOWN, LOW); | |
} | |
} | |
if (tray_state != TRAY_CLOSING && tray_state != TRAY_OPENING) { | |
tray_start = millis(); | |
} | |
} | |
void event(const char *event, const char *data) { | |
if (data[0] == 's') { | |
brew_state = BREW_STARTING; | |
Particle.publish("ambrose_cdtea_starting"); | |
} else if (data[0] == 'x') { | |
brew_state = BREW_STOPPING; | |
Particle.publish("ambrose_cdtea_stopping"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment