mirror of
https://github.com/zzzzDev4/IAS-Better-Tea.git
synced 2025-04-21 07:31:20 +02:00
Added steeping timer
This commit is contained in:
parent
e75dc39664
commit
b61c79f4d5
6 changed files with 135 additions and 72 deletions
|
@ -13,5 +13,4 @@ platform = espressif8266
|
||||||
board = d1
|
board = d1
|
||||||
framework = arduino
|
framework = arduino
|
||||||
lib_deps =
|
lib_deps =
|
||||||
contrem/arduino-timer@^3.0.1
|
|
||||||
adafruit/Adafruit SSD1306@^2.5.9
|
adafruit/Adafruit SSD1306@^2.5.9
|
||||||
|
|
|
@ -1,39 +1,12 @@
|
||||||
#include <Servo.h>
|
#include "SmartServo.hpp"
|
||||||
#include <arduino-timer.h>
|
|
||||||
|
|
||||||
class SmartServo
|
SmartServo::SmartServo(int pin)
|
||||||
{
|
|
||||||
public:
|
|
||||||
SmartServo(int pin)
|
|
||||||
{
|
{
|
||||||
myservo.attach(pin);
|
myservo.attach(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool bounceServo(SmartServo *servo)
|
|
||||||
{
|
|
||||||
if (servo->toggle)
|
|
||||||
{
|
|
||||||
servo->moveServoToZero();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
servo->moveServoTo180();
|
|
||||||
}
|
|
||||||
servo->toggle = !servo->toggle;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void moveServoToZero()
|
|
||||||
{
|
|
||||||
moveServoTo(0, 10);
|
|
||||||
}
|
|
||||||
void moveServoTo180()
|
|
||||||
{
|
|
||||||
moveServoTo(180, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: This blocks execution until servo finished moving.
|
// Note: This blocks execution until servo finished moving.
|
||||||
void moveServoTo(int pos, int stepSize)
|
void SmartServo::moveServoTo(int pos, int stepSize)
|
||||||
{
|
{
|
||||||
int currentPos = myservo.read();
|
int currentPos = myservo.read();
|
||||||
for (int p = currentPos; p < pos; p += stepSize)
|
for (int p = currentPos; p < pos; p += stepSize)
|
||||||
|
@ -48,7 +21,12 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
void SmartServo::moveServoToZero()
|
||||||
Servo myservo;
|
{
|
||||||
bool toggle = false;
|
moveServoTo(0, 10);
|
||||||
};
|
}
|
||||||
|
|
||||||
|
void SmartServo::moveServoTo180()
|
||||||
|
{
|
||||||
|
moveServoTo(180, 5);
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <Servo.h>
|
||||||
|
|
||||||
class SmartServo
|
class SmartServo
|
||||||
{
|
{
|
||||||
|
@ -7,5 +8,8 @@ public:
|
||||||
void moveServoTo(int pos, int stepSize);
|
void moveServoTo(int pos, int stepSize);
|
||||||
void moveServoToZero();
|
void moveServoToZero();
|
||||||
void moveServoTo180();
|
void moveServoTo180();
|
||||||
bool bounceServo(void *);
|
|
||||||
|
private:
|
||||||
|
Servo myservo;
|
||||||
|
bool toggle = false;
|
||||||
};
|
};
|
37
src/TeaTimer.cpp
Normal file
37
src/TeaTimer.cpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include "TeaTimer.hpp"
|
||||||
|
|
||||||
|
void TeaTimer::init(SmartServo *t_servo)
|
||||||
|
{
|
||||||
|
m_servo = t_servo;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move servo down, start timer.
|
||||||
|
void TeaTimer::beginSteeping(unsigned long t_steepingDuration)
|
||||||
|
{
|
||||||
|
if (m_isSteeping)
|
||||||
|
return;
|
||||||
|
m_servo->moveServoTo180();
|
||||||
|
m_endSteepingTime = millis() + t_steepingDuration;
|
||||||
|
m_isSteeping = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move servo up, stop timer immediately.
|
||||||
|
void TeaTimer::end_steeping()
|
||||||
|
{
|
||||||
|
m_servo->moveServoToZero();
|
||||||
|
m_isSteeping = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called at start of update.
|
||||||
|
void TeaTimer::tick()
|
||||||
|
{
|
||||||
|
if (millis() >= m_endSteepingTime)
|
||||||
|
{
|
||||||
|
end_steeping();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long TeaTimer::remainingSteepTimeSeconds()
|
||||||
|
{
|
||||||
|
return (m_endSteepingTime - millis()) / 1000;
|
||||||
|
}
|
26
src/TeaTimer.hpp
Normal file
26
src/TeaTimer.hpp
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#pragma once
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "SmartServo.hpp"
|
||||||
|
|
||||||
|
class TeaTimer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void init(SmartServo *t_servo);
|
||||||
|
// Move servo down, start timer.
|
||||||
|
void beginSteeping(unsigned long t_steepingDuration);
|
||||||
|
// Move servo up, stop timer immediately.
|
||||||
|
void end_steeping();
|
||||||
|
// Called at start of update.
|
||||||
|
void tick();
|
||||||
|
unsigned long remainingSteepTimeSeconds();
|
||||||
|
bool isSteeping()
|
||||||
|
{
|
||||||
|
return m_isSteeping;
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_isSteeping = false;
|
||||||
|
// The time in millis when steeping is done.
|
||||||
|
unsigned long m_endSteepingTime;
|
||||||
|
SmartServo *m_servo;
|
||||||
|
};
|
65
src/main.cpp
65
src/main.cpp
|
@ -1,14 +1,11 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <arduino-timer.h>
|
|
||||||
#include <Servo.h>
|
|
||||||
|
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <Adafruit_GFX.h>
|
#include <Adafruit_GFX.h>
|
||||||
#include <Adafruit_SSD1306.h>
|
#include <Adafruit_SSD1306.h>
|
||||||
|
|
||||||
#include "main.hpp"
|
#include "TeaTimer.hpp"
|
||||||
#include "SmartServo.cpp"
|
#include "SmartServo.hpp"
|
||||||
|
|
||||||
#define WIRE Wire
|
#define WIRE Wire
|
||||||
|
|
||||||
|
@ -18,14 +15,15 @@
|
||||||
|
|
||||||
auto display = Adafruit_SSD1306(128, 32, &WIRE);
|
auto display = Adafruit_SSD1306(128, 32, &WIRE);
|
||||||
|
|
||||||
auto timer = timer_create_default();
|
|
||||||
|
|
||||||
SmartServo smartServo(SERVO_PIN);
|
SmartServo smartServo(SERVO_PIN);
|
||||||
|
TeaTimer teaTimer;
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
// Serial.begin(9600);
|
// Serial.begin(9600);
|
||||||
|
|
||||||
|
teaTimer.init(&smartServo);
|
||||||
|
|
||||||
pinMode(LED_BUILTIN, OUTPUT);
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
pinMode(TOUCH_BTN_PIN, INPUT);
|
pinMode(TOUCH_BTN_PIN, INPUT);
|
||||||
|
|
||||||
|
@ -34,35 +32,56 @@ void setup()
|
||||||
// Since the buffer is intialized with an Adafruit splashscreen
|
// Since the buffer is intialized with an Adafruit splashscreen
|
||||||
// internally, this will display the splashscreen.
|
// internally, this will display the splashscreen.
|
||||||
display.display();
|
display.display();
|
||||||
|
delay(1000);
|
||||||
// Clear the buffer.
|
|
||||||
// display.clearDisplay();
|
|
||||||
// display.display();
|
|
||||||
|
|
||||||
smartServo.moveServoToZero();
|
smartServo.moveServoToZero();
|
||||||
|
|
||||||
// timer.every(1000, toggle_led);
|
|
||||||
// timer.every(2000, reinterpret_cast<Timer<>::handler_t>(SmartServo::bounceServo), &smartServo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printMsg(const String &s)
|
||||||
|
{
|
||||||
|
display.clearDisplay();
|
||||||
|
display.setTextColor(WHITE);
|
||||||
|
display.setTextSize(2);
|
||||||
|
display.setCursor(0, 10);
|
||||||
|
display.println(s);
|
||||||
|
display.display();
|
||||||
|
}
|
||||||
|
void printMsg(unsigned long l)
|
||||||
|
{
|
||||||
|
display.clearDisplay();
|
||||||
|
display.setTextColor(WHITE);
|
||||||
|
display.setTextSize(2);
|
||||||
|
display.setCursor(0, 10);
|
||||||
|
display.println(l);
|
||||||
|
display.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isBtnPressed()
|
||||||
|
{
|
||||||
|
if (millis() < 10000) return false;
|
||||||
|
return digitalRead(TOUCH_BTN_PIN) == HIGH;
|
||||||
|
}
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
timer.tick();
|
teaTimer.tick();
|
||||||
|
|
||||||
if (digitalRead(TOUCH_BTN_PIN) == HIGH)
|
if (isBtnPressed())
|
||||||
{
|
{
|
||||||
digitalWrite(LED_BUILTIN, HIGH);
|
printMsg("BUTTON");
|
||||||
|
teaTimer.beginSteeping(5000);
|
||||||
|
}
|
||||||
|
else if (!teaTimer.isSteeping())
|
||||||
|
{
|
||||||
|
printMsg("Default");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
digitalWrite(LED_BUILTIN, LOW);
|
auto r = teaTimer.remainingSteepTimeSeconds();
|
||||||
|
printMsg(r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// display.display();
|
void toggle_led()
|
||||||
}
|
|
||||||
|
|
||||||
bool toggle_led(void *)
|
|
||||||
{
|
{
|
||||||
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
||||||
return true; // repeat? true
|
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue