added tap out to the display firmware, added a test firmware for sending to the display via ESP-NOW

This commit is contained in:
2025-02-23 01:57:53 +01:00
parent fe9173ca88
commit 9e708d461a
4 changed files with 134 additions and 51 deletions

View File

@@ -23,6 +23,10 @@ const int LitArray9 [] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,2
// colon
const int COLONArray [] = {224,225,226,227,228,229,230,231};
// tap out
const int LitArrayTap [] = {0,1,2,3,4,5,6,7,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151};
const int LitArrayOut [] = {0,1,2,3,4,5,6,7,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159};
// set digits of the timer/clock, use: setDIGIT(<digit ID>, <Number>, <red channel intensity 0-255>, <green channel intensity 0-255>, <blue channel intensity 0-255>)
void setDIGIT(int DIGIT_ID, int DIGIT, int RED, int GREEN, int BLUE) {
@@ -98,14 +102,23 @@ void setCOLON(int RED, int GREEN, int BLUE) {
}
}
void showTimeDisplay(int MINUTES, int SECONDS, int RED, int GREEN, int BLUE, int BRIGHTNESS) {
// set all digits
setDIGIT(1, ((MINUTES/10)%10), RED, GREEN, BLUE);
setDIGIT(2, (MINUTES%10), RED, GREEN, BLUE);
setDIGIT(3, ((SECONDS/10)%10), RED, GREEN, BLUE);
setDIGIT(4, (SECONDS%10), RED, GREEN, BLUE);
setCOLON(RED, GREEN, BLUE);
if (MINUTES == 99) {
for (int i : LitArrayTap) {
leds_TIMER[i].setRGB(RED,GREEN,BLUE);
}
} else if (SECONDS == 99) {
for (int i : LitArrayOut) {
leds_TIMER[i].setRGB(RED,GREEN,BLUE);
}
} else {
setDIGIT(1, ((MINUTES/10)%10), RED, GREEN, BLUE);
setDIGIT(2, (MINUTES%10), RED, GREEN, BLUE);
setDIGIT(3, ((SECONDS/10)%10), RED, GREEN, BLUE);
setDIGIT(4, (SECONDS%10), RED, GREEN, BLUE);
setCOLON(RED, GREEN, BLUE);
}
// actually display the digits
FastLED.show(BRIGHTNESS);
// clear the arrays

View File

@@ -1,5 +1,8 @@
// ROFLS+ Arena Controller
// MAC address of the MCU:
// 48:27:E2:50:86:84
#include <WiFi.h>
#include <esp_now.h> // automatically installed for ESP32 boards, I think?
#include <Preferences.h> // automatically installed for ESP32 boards
@@ -33,6 +36,7 @@ struct_message receiveDATA;
// callback function that will be executed when data is received
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&receiveDATA, incomingData, sizeof(receiveDATA));
showTimeDisplay(receiveDATA.receiveMinutes, receiveDATA.receiveSeconds, receiveDATA.receiveREDchannel, receiveDATA.receiveGREENchannel, receiveDATA.receiveBLUEchannel, receiveDATA.receiveBrightness);
}
void setup() {
@@ -51,21 +55,16 @@ void setup() {
// sanity check delay - allows reprogramming if accidently blowing power w/leds
delay(2000);
// This function sets up the leds and tells the controller about them
FastLED.addLeds<WS2811Controller800Khz, LED_DATA_PIN_TIMER, GRB>(leds_TIMER, NUM_LEDS_TIMER); // GRB ordering is typical
//FastLED.addLeds<WS2811Controller800Khz, LED_DATA_PIN_TIMER, GRB>(leds_TIMER, NUM_LEDS_TIMER); // GRB ordering is typical
FastLED.addLeds<WS2812B, LED_DATA_PIN_TIMER, GRB>(leds_TIMER, NUM_LEDS_TIMER); // GRB ordering is typical
//FastLED.setMaxRefreshRate(10, true);
FastLED.setMaxPowerInVoltsAndMilliamps(5,2000); // Limit to 10W of output power
// set default values
receiveDATA.receiveMinutes = 12;
receiveDATA.receiveSeconds = 34;
receiveDATA.receiveREDchannel = 128;
receiveDATA.receiveGREENchannel = 128;
receiveDATA.receiveBLUEchannel = 128;
receiveDATA.receiveBrightness = 16;
// default screen, just to show it's up and running but hasn't received any data, should display 00:00 in blue
showTimeDisplay(0, 0, 0, 0, 255, 32);
}
void loop() {
// update the LED Display
showTimeDisplay(receiveDATA.receiveMinutes, receiveDATA.receiveSeconds, receiveDATA.receiveREDchannel, receiveDATA.receiveGREENchannel, receiveDATA.receiveBLUEchannel, receiveDATA.receiveBrightness);
// showTimeDisplay(12, 34, 150, 0, 150, 16);
// nothing to see here, everything get's handled by the callback function
}