4
0
Fork 0
mirror of https://github.com/zzzzDev4/IAS-Better-Tea.git synced 2025-04-21 07:31:20 +02:00
firmware/src/SmartDisplay.cpp
2024-06-26 15:23:32 +02:00

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);
}