Mark van Renswoude
b4e971cc4a
Added placeholders for centered/right-aligned text Added text mode toggle for testing purposes Added serial debug option
111 lines
2.0 KiB
C++
111 lines
2.0 KiB
C++
#include "SegmentDisplay.h"
|
|
|
|
#define ASCIIUppercaseA 65
|
|
#define ASCIIUppercaseZ 90
|
|
|
|
SegmentDisplay* display;
|
|
|
|
char* text = new char[7];
|
|
|
|
|
|
void setup()
|
|
{
|
|
pinMode(2, INPUT_PULLUP);
|
|
pinMode(A3, INPUT);
|
|
|
|
display = new SegmentDisplay();
|
|
//display->setClockSpeed(4000000UL);
|
|
display->setClockPin(12);
|
|
display->setDataPin(11);
|
|
display->setLatchPin(10);
|
|
display->setDigits(6);
|
|
display->begin();
|
|
|
|
text[0] = '\0';
|
|
text[1] = '\0';
|
|
text[2] = '\0';
|
|
text[3] = '\0';
|
|
text[4] = '\0';
|
|
text[5] = '\0';
|
|
text[6] = '\0';
|
|
}
|
|
|
|
unsigned long currentTime;
|
|
unsigned long lastCounterTime = 0;
|
|
uint32_t counter = 0;
|
|
uint32_t delayValue;
|
|
|
|
bool showChars = true;
|
|
byte character = ASCIIUppercaseA - 1;
|
|
|
|
int buttonValue;
|
|
bool buttonDown = false;
|
|
unsigned long lastButtonChange = 0;
|
|
|
|
|
|
|
|
void loop()
|
|
{
|
|
currentTime = millis();
|
|
|
|
buttonValue = digitalRead(2);
|
|
if (buttonValue == LOW)
|
|
{
|
|
if (!buttonDown && (currentTime - lastButtonChange) > 50)
|
|
{
|
|
buttonDown = true;
|
|
showChars = !showChars;
|
|
lastButtonChange = currentTime;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (buttonDown && (currentTime - lastButtonChange) > 50)
|
|
{
|
|
buttonDown = false;
|
|
lastButtonChange = currentTime;
|
|
}
|
|
}
|
|
|
|
if (showChars)
|
|
{
|
|
if (lastCounterTime == 0 || currentTime - lastCounterTime > 250UL)
|
|
{
|
|
character++;
|
|
if (character > ASCIIUppercaseZ)
|
|
character = ASCIIUppercaseA;
|
|
|
|
lastCounterTime = currentTime;
|
|
|
|
delayValue = ((uint32_t)analogRead(A3) * 100);
|
|
display->setDigitDelayMicroseconds(delayValue);
|
|
}
|
|
|
|
for (byte c = 0; c < 6; c++)
|
|
{
|
|
if (character + c > ASCIIUppercaseZ)
|
|
text[c] = ' ';
|
|
else
|
|
text[c] = character + c;
|
|
}
|
|
|
|
display->writeTextLeft(text);
|
|
}
|
|
else
|
|
{
|
|
if (currentTime - lastCounterTime > 100UL)
|
|
{
|
|
counter++;
|
|
if (counter > 999999)
|
|
counter = 0;
|
|
|
|
lastCounterTime = currentTime;
|
|
|
|
delayValue = ((uint32_t)analogRead(A3) * 100);
|
|
display->setDigitDelayMicroseconds(delayValue);
|
|
}
|
|
|
|
display->writeNumber(counter);
|
|
}
|
|
}
|