Hello,
I hope someone can help because I am really confused :(
I have some code that I am ruining on an Arduino to start a race - Take your marks, Get set, Go - type of thing and some LED's that act in a very similar way to the light tree for drag racing. Everything is working ok at the moment, on one Arduino board, with wires connecting the peripherals. However, I would like to separate the lightshow using 2 ESP-32's and ESP-NOW, so that I can go wireless on the lights.
Currently, I have a couple of .h and .cpp files to handle both the sequencing and the FastLED's. What I am trying to achieve is to have the ESP-32 receiver as a dumb node that just receives the serial output data that would normally go to the defined PIN via ESP-NOW.
The documentation for ESP-NOW shows using a typedef struct{} to transmit the data and if I use something like -
typedef struct RGB_steps {
byte Red;
byte Green;
byte Blue;
byte steps[NUMSTEPS];
} RGB_steps;
and
for (led=0; led<NUMLEDS; led++) {
if (seq[led].steps[p] == 1)
neopixel.setPixelColor(led, seq[led].Red, seq[led].Green, seq[led].Blue);
else
neopixel.setPixelColor(led, 0, 0, 0);
}
Including everything in the main.ino, I am able to populate the struct for transition (taken from the example Click Here). This seems to work by sending the individual colors to each LED along with the sequence pattern.
However, I can't seem to get my switch case() to a struct for some reason, I hope it's just me being an idiot :) The sequence.cpp is
Sequence::Sequence(LightShow* lightshowOb) {
lightshow = lightshowOb;
}
void Sequence::begin_sequence() {
uint8_t step = 0;
uint32_t offset;
uint32_t now = 0;
int8_t val;
offset = millis();
while(step < count) {
// a tight loop that waits the target amount of time
while (target[step] > now) {
now = millis() - offset;
}
for (int i=0; i<3; i++){
val = seq[step][i];
// -1 means ignore
if (val >= 0){
// 0 = lighSHOW
if (i == 0){
lightshow->light_set(val);
}
}
}
step++;
}
}
And the lightshow.cpp is
void LightShow::light_set(int step) {
serial_print_val("Set LED ", step);
#if (LIGHT_SHOW_STRIP)
int position = 4-step; // bottom of strip up
// int position = step-1; // top of strip down
switch (step) {
case 1:
// set team Red LEDs
for(int i=0;i<team_size;i++) {
leds[i+position*team_size] = CRGB::Red;
}
break;
case 2:
// set team Orange LEDs
for(int i=0;i<team_size;i++) {
leds[i+position*team_size] = CRGB::Yellow;
}
break;
case 3:
// set 2nd team Orange LEDs
for(int i=0;i<team_size;i++) {
leds[i+position*team_size] = CRGB::Orange;
}
break;
case 4:
//set team Green LEDs
for(int i=0;i<team_size;i++) {
leds[i+position*team_size] = CRGB::Green;
}
break;
default:
led_reset();
}
FastLED.show();
#endif
}
When I run the code on a single board and view the serial monitor it reads
Set LED 1
Set LED 2
Set LED 3
Set LED 4
with the sequence and timing attached. What is confusing me is that in the example above that I am able to get working, I am just sending individual colors to individual LED's whereas, my code assigns a color to a group of LED's based on team_size. The typedef struct {} above doesn't seem to work as it is just single colors or am I missing something? Basically, I am just trying to send the serial output data that would normally go the the defined output pin over ESP-NOW.
Any help would be greatly appreciated.
Thanks