diff --git a/ROFLS_Arena_LED_Strip_Clock/LED_Driving_functions.ino b/ROFLS_Arena_LED_Strip_Clock/LED_Driving_functions.ino index 3720b32..be007dc 100644 --- a/ROFLS_Arena_LED_Strip_Clock/LED_Driving_functions.ino +++ b/ROFLS_Arena_LED_Strip_Clock/LED_Driving_functions.ino @@ -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(, , , , ) 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 diff --git a/ROFLS_Arena_LED_Strip_Clock/ROFLS_Arena_LED_Strip_Clock.ino b/ROFLS_Arena_LED_Strip_Clock/ROFLS_Arena_LED_Strip_Clock.ino index b7d7f4d..7fbfb1b 100644 --- a/ROFLS_Arena_LED_Strip_Clock/ROFLS_Arena_LED_Strip_Clock.ino +++ b/ROFLS_Arena_LED_Strip_Clock/ROFLS_Arena_LED_Strip_Clock.ino @@ -1,5 +1,8 @@ // ROFLS+ Arena Controller +// MAC address of the MCU: +// 48:27:E2:50:86:84 + #include #include // automatically installed for ESP32 boards, I think? #include // 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(leds_TIMER, NUM_LEDS_TIMER); // GRB ordering is typical + //FastLED.addLeds(leds_TIMER, NUM_LEDS_TIMER); // GRB ordering is typical + FastLED.addLeds(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 } diff --git a/Test/LED_Strip_send_test/LED_Strip_send_test.ino b/Test/LED_Strip_send_test/LED_Strip_send_test.ino new file mode 100644 index 0000000..5a3ad08 --- /dev/null +++ b/Test/LED_Strip_send_test/LED_Strip_send_test.ino @@ -0,0 +1,106 @@ +// ROFLS+ Arena Controller + +#include +#include // automatically installed for ESP32 boards, I think? +#include // automatically installed for ESP32 boards +#include // https://github.com/RobTillaart/CountDown +#include // https://github.com/RobTillaart/StopWatch_RT + + +const int countdownTIME = 3; // countdown timer length in minutes +const int countdownToFight = 3; // countdown timer length in seconds +const int PITreleaseTime = 90; // automatic pit release time in seconds until end of countdown +bool countdownPAUSED = false; +CountDown FightCountDown[1]; + +// Rumble stopwatch +StopWatch rumbleTIME; + +int CLOCK_LED_BRIGHTNESS = 16; // 64 is okay + +// REPLACE WITH YOUR RECEIVER MAC Address +uint8_t broadcastAddress[] = {0x48, 0x27, 0xE2, 0x5D, 0xB6, 0x84}; +// ESP-NOW config + +// Structure example to send data +// Must match the receiver structure +typedef struct struct_message { + int sendMinutes; + int sendSeconds; + int sendREDchannel; + int sendGREENchannel; + int sendBLUEchannel; + int sendBrightness; +} struct_message; + +// Create a struct_message called remoteDATA +struct_message sendDATA; + +esp_now_peer_info_t peerInfo; + +// callback when data is sent + +void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) { + Serial.print("\r\nLast Packet Send Status:\t"); + Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail"); +} + + +void setup() { + // Serial.begin(115200); + // Set device as a Wi-Fi Station + WiFi.mode(WIFI_STA); + + // Init ESP-NOW + if (esp_now_init() != ESP_OK) { + Serial.println("Error initializing ESP-NOW"); + return; + } + // Once ESPNow is successfully Init, we will register for Send CB to + // get the status of Trasnmitted packet + esp_now_register_send_cb(OnDataSent); + + // Register peer + memcpy(peerInfo.peer_addr, broadcastAddress, 6); + peerInfo.channel = 0; + peerInfo.encrypt = false; + // Add peer + if (esp_now_add_peer(&peerInfo) != ESP_OK){ + Serial.println("Failed to add peer"); + return; + } + + // set rumble stopwatch resolution to seconds + + esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &sendDATA, sizeof(sendDATA)); + sendDATA.sendMinutes = 88; + sendDATA.sendSeconds = 88; + sendDATA.sendREDchannel = 63; + sendDATA.sendGREENchannel = 0; + sendDATA.sendBLUEchannel = 0; + sendDATA.sendBrightness = 32; +} + + + +void loop() { + + esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &sendDATA, sizeof(sendDATA)); + sendDATA.sendMinutes = 88; + sendDATA.sendSeconds = 88; + sendDATA.sendREDchannel = 63; + sendDATA.sendGREENchannel = 0; + sendDATA.sendBLUEchannel = 0; + sendDATA.sendBrightness = 32; + delay(2000); + + // if (result == ESP_OK) { + // Serial.println("Sent with success"); + // } + // else { + // Serial.println("Error sending the data"); + // } + + //showTimeDisplay((FightCountDown[0].remaining()/60%10), (FightCountDown[0].remaining()%60), 0, XDAS, 0); + +} diff --git a/Test/LED_Strip_test/LED_Strip_test.ino b/Test/LED_Strip_test/LED_Strip_test.ino deleted file mode 100644 index 69d3da2..0000000 --- a/Test/LED_Strip_test/LED_Strip_test.ino +++ /dev/null @@ -1,35 +0,0 @@ -/// @file Blink.ino -/// @brief Blink the first LED of an LED strip -/// @example Blink.ino - -#include - -// How many leds in your strip? -#define NUM_LEDS 3 - -// For led chips like WS2812, which have a data line, ground, and power, you just -// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock, -// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN -// Clock pin only needed for SPI based chipsets when not using hardware SPI -#define DATA_PIN 3 -//#define CLOCK_PIN 13 - -// Define the array of leds -CRGB leds[NUM_LEDS]; - -#define POTI_PIN 2 -int POTI_VALUE = 0; - -void setup() { - FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is typical -} - -void loop() { - leds[0] = CRGB::Red; - leds[1] = CRGB::Blue; - leds[2] = CRGB::Green; - FastLED.setBrightness(map(analogRead(POTI_PIN), 0, 8191, 8, 255)); - FastLED.show(); - delay(1); - //POTI_VALUE = map(analogRead(POTI_PIN), 0, 8191, 0, 255); -}