Teal Tracker
Hardware- 4 Devlogs
- 3 Total hours
i am building a money tracker that lets you add 10,20 of any currency or subtract 10,20 of any currency.
i am building a money tracker that lets you add 10,20 of any currency or subtract 10,20 of any currency.
ladies and gentlemen i hv killed my screen and i no dont hv any other screen to continue the project i hv no clue on what to do now
devlog 1.6(i hv ate): i did not really do that much so i dont want to code an entire paragraph in markdown but what i hv done is that i have created a system where when i hold the second button for more than 5 seconds i can reset my bidget and savongs goal i also had to differentiate from a press and a hold and add a failsafe. i also need to go study social science BYE👋👋👋👋
In this update for Teal Tracker, we made a major visual upgrade by ditching the old display setup for a clean OLED layout, fixed input responsiveness, and made accidental resets impossible with a new hold gesture.
Hardware Migration (7-Segment Removal):
Fixed Input Lag & Missing Taps:
delay() calls in the button loop in favor of non-blocking millis() timing logic.5-Second Hold-to-Reset Requirement:
Live Progress & Countdown UI:
BTN_CONFIRM)
Digital Input
Single tap to apply value; Hold (>500ms) for auto-repeat
Pin 4 (BTN_SECOND)
Digital Input
Tap (<5s) = Goal Screen; Hold (>=5s) = Reset Budget
Pin A0 (POT_PIN)
Analog Input
Dynamic preset selector (-$50 to +$50) with wake-on-move
Pin 3 (BUZZER_PIN)
PWM Output
Frequency-based audio cues
Initially, I wanted to build a simple 4-button macropad with a volume knob using an Arduino Uno. But as I started thinking about what would actually be useful day-to-day, I pivoted the idea into a Physical Money Tracker—a desktop device that lets me quickly log financial transactions with the twist of a dial and the press of a single button.
I decided to challenge myself: Ax the PC and PyCharm entirely. I wanted a 100% standalone hardware device that works on raw micro-controller logic and remembers my balance even if I unplug it.
Instead of hiding data on a computer screen, I dug out a 5461AS 4-digit 7-segment display to show my data directly on my desk.
The control flow is clean and tactile:
-20, -10, 0, +10, +20).Because I wanted it to be standalone, I utilized the Arduino’s EEPROM memory so my balance data survives power loss.
The hardest part of the prototype was figuring out the routing for the 5461AS display. Without a dedicated driver chip, it requires 12 independent pin connections. I mapped out a custom configuration to keep the standard digital pins (D2 and D3) free for my tactile inputs:
D12, D13, A1, A2
D4, D5, D6, D7, D8, D9, D10, D11
A0, Button on D2, Buzzer on D3
I integrated the SevSeg library to handle the rapid background multiplexing needed to keep the display lit without flickering. Here is the core operational loop of the system:
void loop() {
int potValue = analogRead(POT_PIN);
int potZone = potValue / 205;
switch(potZone) {
case 0: selectedAction = -20; break;
case 1: selectedAction = -10; break;
case 2: selectedAction = 0; break;
case 3: selectedAction = 10; break;
case 4: selectedAction = 20; break;
}
// Handle Button Press and Save to EEPROM
int buttonState = digitalRead(BUTTON_PIN);
if (buttonState == LOW && lastButtonState == HIGH) {
currentBalance += selectedAction;
saveBalance(currentBalance); // EEPROM storage
sevSeg.blank();
tone(BUZZER_PIN, 2700); delay(80); noTone(BUZZER_PIN);
delay(40);
tone(BUZZER_PIN, 2700); delay(80); noTone(BUZZER_PIN);
}
lastButtonState = buttonState;
if (buttonState == HIGH) {
sevSeg.setNumber(selectedAction);
} else {
sevSeg.setNumber(currentBalance);
}
sevSeg.refreshDisplay();
}