septillion:
That looks correct. I did notice an error but for all the world, that would just turn all three on... Can you try:#include <FadeLed.h>
//91 step sine table 0 = 0 degree, 90 = 90 degree
const flvar_t SineTable[91] PROGMEM = {
0, 4, 9, 13, 18, 22, 27, 31, 35, 40,
44, 49, 53, 57, 62, 66, 70, 75, 79, 83,
87, 91, 96, 100, 104, 108, 112, 116, 120, 124,
127, 131, 135, 139, 143, 146, 150, 153, 157, 160,
164, 167, 171, 174, 177, 180, 183, 186, 190, 192,
195, 198, 201, 204, 206, 209, 211, 214, 216, 219,
221, 223, 225, 227, 229, 231, 233, 235, 236, 238,
240, 241, 243, 244, 245, 246, 247, 248, 249, 250,
251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
255};
//Make FadeLed object with a sine lookup table of 91 (0 to 90 including)
FadeLed sines[3] = {{3, SineTable, 90}, {5, SineTable, 90}, {9, SineTable, 90}};
const byte NrSines = sizeof(sines)/sizeof(sines[0]);
void setup(){
Serial.begin(115200);
for(byte i = 0; i < NrSines; i++){
sines[i].setTime(1000); //halve period, 0% to 90% or 90% to 0%
}
for(byte i = 0; i < NrSines; i++){
sines[i].beginOn();
delay(1000);
sines[i].begin(0);
}
//start the first
sines[0].on();
Serial.println(NrSines);
Serial.println();
for(byte i =0; i < NrSines; i++){
Serial.println(sines[i].get());
Serial.println(sines[i].getCurrent());
Serial.println(sines[i].done());
Serial.println();
}
}
void loop(){
FadeLed::update();
for(byte i = 0; i < NrSines; i++){
//for all but last (who has no next)
if(i < (NrSines - 1)){
//if >50% (45 degree) and next is not fading and is off
if((sines[i].get() >= 45) && !sines[i + 1].done() && (sines[i + 1].get() == 0)){
sines[i + 1].on();
}
}
//if sin is 100% (90 degree), fade back down
if(sines[i].done() && sines[i].get()){
sines[i].off();
}
}
}
That should turn on one by one the leds at first. Do all three leds light up in order?
This causes LED1 to blink, then LED2 to blink, then LED3. One by one.