#include "SevenSegment.h" 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) { } void SevenSegment::DrawDigit(GxEPD2_BW & display, uint8_t digit, uint16_t x, uint16_t y, uint8_t color) { if (digit > 9) { return; } uint16_t digitX = x; uint16_t digitY = y; uint8_t drawcolors[] = { (uint8_t) (color ^ 0xFF) , (uint8_t) color }; // top top-right bottom-right bottom bottom-left top-left middle 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 }, { true, 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]; // Top display.fillRect(digitX + m_segmentThickness, digitY, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, drawcolors[segments[0]]); // Top-right display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, drawcolors[segments[1]]); // Bottom-right display.fillRect(digitX + m_digitWidth - m_segmentThickness, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, drawcolors[segments[2]]); // Bottom display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight - m_segmentThickness * 2, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, drawcolors[segments[3]]); // Bottom-left display.fillRect(digitX, digitY + m_digitHeight / 2, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, drawcolors[segments[4]]); // Top-left display.fillRect(digitX, digitY + m_segmentThickness, m_segmentThickness, m_digitHeight / 2 - m_segmentThickness * 2, drawcolors[segments[5]]); // Middle display.fillRect(digitX + m_segmentThickness, digitY + m_digitHeight / 2 - m_segmentThickness, m_digitWidth - 2 * m_segmentThickness, m_segmentThickness, drawcolors[segments[6]]); }