mirror of
https://github.com/zzzzDev4/IAS-Better-Tea.git
synced 2025-04-21 07:31:20 +02:00
219 lines
No EOL
5.6 KiB
C++
219 lines
No EOL
5.6 KiB
C++
#include "SmartDisplay.hpp"
|
|
#include "SmartTime.hpp"
|
|
#include "TeaLoadingFrames.h"
|
|
#include "RfidWaitAnim.h"
|
|
|
|
SmartDisplay::SmartDisplay(Adafruit_SSD1306 *display)
|
|
{
|
|
m_display = display;
|
|
}
|
|
|
|
// Note: This blocks execution.
|
|
void SmartDisplay::playTeaAnimation()
|
|
{
|
|
resetDisplay();
|
|
|
|
for (int i = 0; i < epd_bitmap_allArray_LEN; i++)
|
|
{
|
|
m_display->clearDisplay();
|
|
m_display->drawBitmap(0, 0, epd_bitmap_allArray[i], 128, 32, WHITE);
|
|
m_display->display();
|
|
delay(100);
|
|
}
|
|
}
|
|
|
|
// Note: This blocks execution.
|
|
void SmartDisplay::playRfidWaitAnimation(int frame)
|
|
{
|
|
frame = frame % epd_bitmap_RfidWait_allArray_LEN;
|
|
resetDisplay();
|
|
m_display->println("Waiting for RFID scan");
|
|
m_display->drawBitmap(0, 0, epd_bitmap_RfidWait_allArray[frame], 128, 32, WHITE);
|
|
m_display->display();
|
|
}
|
|
|
|
// Note: First part of tea animation
|
|
void SmartDisplay::playTeaAnimationPartOne(int xoffset, String line1, String line2, String line3, String line4)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
resetDisplay();
|
|
m_display->println(line1);
|
|
m_display->println(line2);
|
|
m_display->println(line3);
|
|
m_display->println(line4);
|
|
m_display->drawBitmap(xoffset, 0, epd_bitmap_allArray[i], 128, 32, WHITE);
|
|
m_display->display();
|
|
delay(100);
|
|
}
|
|
}
|
|
|
|
void SmartDisplay::wipe()
|
|
{
|
|
for (int y = 0; y <= 32; y += 2)
|
|
{
|
|
m_display->drawFastHLine(0, y, 128, WHITE);
|
|
m_display->display();
|
|
delay(5);
|
|
m_display->drawFastHLine(0, y, 128, BLACK);
|
|
m_display->drawFastHLine(0, y + 1, 128, BLACK);
|
|
}
|
|
}
|
|
|
|
// Note: Second part of tea animation
|
|
void SmartDisplay::playTeaAnimationPartTwo(int xoffset, String line1, String line2, String line3, String line4)
|
|
{
|
|
for (int i = 6; i < epd_bitmap_allArray_LEN; i++)
|
|
{
|
|
resetDisplay();
|
|
m_display->println(line1);
|
|
m_display->println(line2);
|
|
m_display->println(line3);
|
|
m_display->println(line4);
|
|
m_display->drawBitmap(xoffset, 0, epd_bitmap_allArray[i], 128, 32, WHITE);
|
|
m_display->display();
|
|
delay(100);
|
|
}
|
|
}
|
|
|
|
void SmartDisplay::displayLoadingAnimationFrame(int xoffset)
|
|
{
|
|
m_display->clearDisplay();
|
|
m_display->drawBitmap(xoffset, 0, epd_bitmap_allArray[5], 128, 32, WHITE);
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printTeaConfigScreen(TeaData tea)
|
|
{
|
|
resetDisplay();
|
|
|
|
m_display->println(tea.m_teaName);
|
|
|
|
m_display->setCursor(128 - 35, m_display->getCursorY());
|
|
|
|
if (tea.m_waterTemp > 0)
|
|
{
|
|
m_display->print(tea.m_waterTemp);
|
|
m_display->drawCircle(m_display->getCursorX() + 4, m_display->getCursorY(), 1, WHITE);
|
|
m_display->println(" C");
|
|
}
|
|
else
|
|
{
|
|
m_display->println("");
|
|
}
|
|
|
|
m_display->setTextSize(2);
|
|
String steepingTime = SmartTime::formatSeconds(tea.m_steepingSeconds);
|
|
m_display->print(steepingTime);
|
|
m_display->setTextSize(1);
|
|
m_display->setCursor(m_display->getCursorX(), m_display->getCursorY() + 7);
|
|
m_display->println(" min");
|
|
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::displayTeaNotes(TeaData tea) {
|
|
resetDisplay();
|
|
|
|
m_display->println(tea.m_teaName);
|
|
|
|
m_display->writeFastHLine(0, m_display->getCursorY(), 128, WHITE);
|
|
|
|
m_display->setCursor(m_display->getCursorX(), m_display->getCursorY() + 3);
|
|
m_display->print(tea.m_teaNotes);
|
|
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printTeaSteepingProgressScreen(TeaData tea, int remainingSeconds)
|
|
{
|
|
resetDisplay();
|
|
|
|
m_display->println(tea.m_teaName);
|
|
// m_display->println("(Steeping)");
|
|
m_display->println();
|
|
|
|
m_display->setTextSize(2);
|
|
String remainingTime = SmartTime::formatSeconds(remainingSeconds);
|
|
m_display->print(remainingTime);
|
|
m_display->setTextSize(1);
|
|
m_display->setCursor(m_display->getCursorX(), m_display->getCursorY() + 7);
|
|
m_display->println(" min");
|
|
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printWaitForRFIDScreen()
|
|
{
|
|
}
|
|
|
|
void SmartDisplay::printRequestFeedbackScreen(TeaData tea)
|
|
{
|
|
resetDisplay();
|
|
|
|
m_display->println(" Feedback ");
|
|
m_display->setCursor(0, m_display->getCursorY() + 4);
|
|
m_display->println("< >");
|
|
m_display->setCursor(0, m_display->getCursorY() + 4);
|
|
m_display->println("shorter ok longer");
|
|
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printAddNewTeaConfigScreen(TeaData tea, u_int *flicker)
|
|
{
|
|
resetDisplay();
|
|
|
|
m_display->println(" New Tea");
|
|
m_display->println("Steeping time:");
|
|
|
|
if (*flicker % 12 == 0)
|
|
{
|
|
toggle = !toggle;
|
|
}
|
|
if (toggle)
|
|
{
|
|
m_display->display();
|
|
*flicker += 3;
|
|
return;
|
|
}
|
|
|
|
m_display->setTextSize(2);
|
|
String steepingTime = SmartTime::formatSeconds(tea.m_steepingSeconds);
|
|
m_display->print(steepingTime);
|
|
m_display->setTextSize(1);
|
|
m_display->setCursor(m_display->getCursorX(), m_display->getCursorY() + 7);
|
|
m_display->println(" min");
|
|
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printMsg(const String &s)
|
|
{
|
|
resetDisplay();
|
|
m_display->setCursor(0, 10);
|
|
m_display->println(s);
|
|
m_display->display();
|
|
}
|
|
void SmartDisplay::printMsg(unsigned long l)
|
|
{
|
|
resetDisplay();
|
|
m_display->setCursor(0, 10);
|
|
m_display->println(l);
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::printMsgAt(int16_t x, int16_t y, const String &s)
|
|
{
|
|
m_display->setCursor(x, y);
|
|
m_display->println(s);
|
|
m_display->display();
|
|
}
|
|
|
|
void SmartDisplay::resetDisplay()
|
|
{
|
|
m_display->clearDisplay();
|
|
m_display->setTextColor(WHITE);
|
|
m_display->setTextSize(1);
|
|
m_display->setCursor(0, 0);
|
|
} |