NerfStatTrak/NerfStatTrek.ino

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