2023-05-29 13:03:05 +03:00
|
|
|
#include "SevenSegment.h"
|
|
|
|
|
2023-05-29 21:40:49 +03:00
|
|
|
SevenSegment::SevenSegment(uint16_t digitWidth,
|
|
|
|
uint16_t digitHeight,
|
|
|
|
uint16_t digitGap,
|
|
|
|
uint16_t segmentThickness,
|
|
|
|
uint16_t segmentGap)
|
|
|
|
: m_digitWidth(digitWidth),
|
|
|
|
m_digitHeight(digitHeight),
|
|
|
|
m_digitGap(digitGap),
|
|
|
|
m_segmentThickness(segmentThickness),
|
|
|
|
m_segmentGap(segmentGap)
|
2023-05-29 13:03:05 +03:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2023-05-29 21:40:49 +03:00
|
|
|
void SevenSegment::DrawDigit(GxEPD2_BW<WatchyDisplayBase,
|
|
|
|
WatchyDisplayBase::HEIGHT> & display,
|
|
|
|
uint8_t digit,
|
|
|
|
uint16_t x,
|
|
|
|
uint16_t y,
|
|
|
|
uint8_t color)
|
2023-05-29 13:03:05 +03:00
|
|
|
{
|
2023-05-29 14:09:08 +03:00
|
|
|
if (digit > 9) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2023-05-29 13:03:05 +03:00
|
|
|
uint16_t digitX = x;
|
|
|
|
uint16_t digitY = y;
|
2023-05-29 21:40:49 +03:00
|
|
|
uint8_t drawcolors[] = { (uint8_t) (color ^ 0xFF) ,
|
|
|
|
(uint8_t) color };
|
2023-05-29 13:03:05 +03:00
|
|
|
|
|
|
|
// top top-right bottom-right bottom bottom-left top-left middle
|
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
const bool drawSegments[10][7] = {
|
|
|
|
{ true, true, true, true, true, true, false },
|
|
|
|
{ false, true, true, false, false, false, false },
|
|
|
|
{ true, true, false, true, true, false, true },
|
|
|
|
{ true, true, true, true, false, false, true },
|
|
|
|
{ false, true, true, false, false, true, true },
|
|
|
|
{ true, false, true, true, false, true, true },
|
|
|
|
{ false, false, true, true, true, true, true },
|
|
|
|
{ true, true, true, false, false, false, false },
|
|
|
|
{ true, true, true, true, true, true, true },
|
|
|
|
{ true, true, true, true, false, true, true }
|
|
|
|
};
|
|
|
|
|
|
|
|
const bool * segments = drawSegments[digit];
|
2023-05-29 13:03:05 +03:00
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Top
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX + m_segmentThickness,
|
|
|
|
digitY,
|
|
|
|
m_digitWidth - 2 * m_segmentThickness,
|
|
|
|
m_segmentThickness,
|
|
|
|
drawcolors[segments[0]]);
|
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Top-right
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX + m_digitWidth - m_segmentThickness,
|
|
|
|
digitY + m_segmentThickness,
|
|
|
|
m_segmentThickness,
|
|
|
|
m_digitHeight / 2 - m_segmentThickness * 2,
|
|
|
|
drawcolors[segments[1]]);
|
2023-05-29 13:03:05 +03:00
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Bottom-right
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX + m_digitWidth - m_segmentThickness,
|
|
|
|
digitY + m_digitHeight / 2, m_segmentThickness,
|
|
|
|
m_digitHeight / 2 - m_segmentThickness * 2,
|
|
|
|
drawcolors[segments[2]]);
|
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Bottom
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX + m_segmentThickness,
|
|
|
|
digitY + m_digitHeight - m_segmentThickness * 2,
|
|
|
|
m_digitWidth - 2 * m_segmentThickness,
|
|
|
|
m_segmentThickness,
|
|
|
|
drawcolors[segments[3]]);
|
2023-05-29 13:03:05 +03:00
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Bottom-left
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX,
|
|
|
|
digitY + m_digitHeight / 2,
|
|
|
|
m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2,
|
|
|
|
drawcolors[segments[4]]);
|
2023-05-29 13:03:05 +03:00
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Top-left
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX,
|
|
|
|
digitY + m_segmentThickness,
|
|
|
|
m_segmentThickness,
|
|
|
|
m_digitHeight / 2 - m_segmentThickness * 2,
|
|
|
|
drawcolors[segments[5]]);
|
2023-05-29 13:03:05 +03:00
|
|
|
|
2023-05-29 14:09:08 +03:00
|
|
|
// Middle
|
2023-05-29 21:40:49 +03:00
|
|
|
display.fillRect(digitX + m_segmentThickness,
|
|
|
|
digitY + m_digitHeight / 2 - m_segmentThickness,
|
|
|
|
m_digitWidth - 2 * m_segmentThickness,
|
|
|
|
m_segmentThickness,
|
|
|
|
drawcolors[segments[6]]);
|
|
|
|
}
|