/* *********************************************************
* TeaBot V1.0 by SnakeP
* ********************************************************
* Code based on: https://www.youtube.com/c/CarloStramaglia
* Thanks ;)
* ********************************************************
* Single click - set time in minutes
* Double click - start timer
* Long click - reset
*/
#include <Servo.h>
#include <TM1637.h>
#include "OneButton.h"
Servo myservo;
//Servo position value definition
int POS_UP = 120; //Up-position
int POS_MIDDLE = 85; //Middle-position
int POS_DOWN = 35; //Down-position
int minutes=00;
int seconds=0;
int i=0;
// Display Pins configurations
// Pin 3 - > DIO
// Pin 2 - > CLK
TM1637 tm1637(2, 3);
// Push Button PIN definition
#define PIN_INPUT A2
OneButton button(PIN_INPUT, true);
void setup() {
Serial.begin(115200);
myservo.attach(2);
myservo.write(POS_DOWN);
tm1637.init();
tm1637.setBrightness(4);
button.attachClick(singleClick);
button.attachDoubleClick(doubleClick);
button.attachLongPressStart(longPressStart);
tm1637.clearScreen();
tm1637.colonOn();
tm1637.display("0000");
tm1637.colonOn();
delay(100);
}
void loop() {
button.tick();
delay (10);
}
void singleClick()
{
Serial.println("x1");
minutes++;
Serial.println(minutes);
if (minutes < 10)
tm1637.display(minutes,1,0,1);
else
tm1637.display(minutes);
delay(100);
} // singleClick Add minutes
void doubleClick()
{
Serial.println("x2");
Serial.println(minutes);
if (minutes == 0) return;
Serial.println("First Down");
for (i=POS_UP;i>POS_DOWN;i--)
{
myservo.write(i);
delay (10);
}
delay (1000);
Serial.println("Middle Pos");
for (i=POS_DOWN;i<POS_MIDDLE;i++)
{
myservo.write(i);
delay (10);
}
Serial.println("Second Down");
for (i=POS_MIDDLE;i>POS_DOWN;i--)
{
myservo.write(i);
delay (25);
}
minutes--;
for (minutes ; minutes >= 0; minutes--)
{
for (int seconds = 59; seconds >= 0; seconds--) {
if (minutes < 10 && minutes >0)
tm1637.display(seconds + minutes*100,1,0,1);
else if (minutes == 0 && seconds >=10)
tm1637.display(seconds + minutes*100,1,0,2);
else if (minutes == 0 && seconds < 10)
tm1637.display(seconds + minutes*100,1,0,3);
else
tm1637.display(seconds + minutes*100);
tm1637.switchColon();
Serial.println(seconds);
delay(1000);
}
}
for (i=POS_DOWN;i<POS_UP;i++)
{
myservo.write(i);
delay (10);
}
tm1637.colonOn();
tm1637.display("0000");
minutes = 0;
tm1637.colonOn();
delay(100);
} // doubleClick Timer Start
void longPressStart()
{
Serial.println("long Press");
minutes = 0;
tm1637.colonOn();
tm1637.display("0000");
tm1637.colonOn();
delay(100);
} // longPressStart Timer Reset