You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The sketch shows a bug I have seen in dimmable_lights.h
What I see is this:
If half the lamps are set to value X, and half are set to X+1,
and digitalRead() is in the sketch (even uncalled!)
then the ones set to X are displayed dark.
In this sketch I set them alternating ABABABAB, but I've
seen same behavior for AAAABBBB; likely any order.
If they're not half-and-half, the one with fewer
works ok. (or maybe one with greater, my observations
got confused)
Conditions:
Using 8 lamps on a Krida controller, on Arduino Uno
and ONLY if a digitalRead() function call is present,
even if the digitalRead() hasn't been called.
(Perhaps digitalRead() has some setup code or interrupt contention... ?)
Hardware and software used
Library version: 1.6.1
Arduino core: 1.8.6
Enviroment/IDE: Arduino IDE 2.2.1
Dimmer board: Krida 8
Board: Arduino UNO, the classic
Using board 'uno' from platform in folder: /Users/poly/Library/Arduino15/packages/arduino/hardware/avr/1.8.6
Using core 'arduino' from platform in folder: /Users/poly/Library/Arduino15/packages/arduino/hardware/avr/1.8.6
I'm pasting the sketch in here, apologies if that isn't the convention, this is my first github bug report! :)
This sketch shows a bug I have seen in dimmable_lights.h
What I see is this:
If half the lamps are set to value X, and half are set to X+1,
then the ones set to X are displayed dark.
In this sketch I set them alternating ABABABAB, but I've
seen same behavior for AAAABBBB; likely any order.
If they're not half-and-half, the one with fewer
works ok. (or maybe one with greater, my observations
got confused)
Conditions:
Using 8 lamps on a Krida controller, on Arduino Uno
and ONLY if a digitalRead() function call is present,
even if the digitalRead() hasn't been called.
Serial.begin(115200);
delay(200);
Serial.print("\n\n");
Serial.print("Dimmable Light bug with Krida 8 channel controller\n\n");
#if INCLUDE_A_DIGITAL_READ
Serial.println("digitalRead() is linked in, we see bug of half lamps off in some cases");
#else
Serial.println("no digitalRead(), all lamps appear on as desired & expected");
#endif
}
/// set lamps alternating brightnesses a and b
void setEm(uint8_t a, uint8_t b, uint16_t wait) {
Serial.print("lamps ");
Serial.print(a, HEX);
Serial.print(", ");
Serial.print(b, HEX);
Serial.println("");
#if INCLUDE_A_DIGITAL_READ
// this wont actually do a read for a long, long time
// but just linking in the function seems
// to cause the four-lights-dark bug.
if(loops == 6000)
{
Serial.println("------> digital read happening! <------");
digitalRead(READPIN);
}
#endif
setEm(0x81, 0x80, 2000); // different by 1 step -- one lamp off
setEm(0x80, 0x81, 2000);
setEm(0x82, 0x80, 2000); // different by 2 steps, works ok
Serial.print(loops);
Serial.println(" completed. let's go again.");
}
The text was updated successfully, but these errors were encountered:
Completely acceptable workaround is to use FastGPIO library instead of the default arduino gpio functions.
But even still, I found some instability (slight occasional flicker) when lamps were near brightness to each other, especially trying to sweep them all together to a new brightness. A further workaround that helped is setBrightness(br & 0xfe), so lamps are not as close to each other in the interrupt timing.
Describe the bug
The sketch shows a bug I have seen in dimmable_lights.h
What I see is this:
If half the lamps are set to value X, and half are set to X+1,
and digitalRead() is in the sketch (even uncalled!)
then the ones set to X are displayed dark.
In this sketch I set them alternating ABABABAB, but I've
seen same behavior for AAAABBBB; likely any order.
If they're not half-and-half, the one with fewer
works ok. (or maybe one with greater, my observations
got confused)
Conditions:
Using 8 lamps on a Krida controller, on Arduino Uno
and ONLY if a digitalRead() function call is present,
even if the digitalRead() hasn't been called.
(Perhaps digitalRead() has some setup code or interrupt contention... ?)
Hardware and software used
Using board 'uno' from platform in folder: /Users/poly/Library/Arduino15/packages/arduino/hardware/avr/1.8.6
Using core 'arduino' from platform in folder: /Users/poly/Library/Arduino15/packages/arduino/hardware/avr/1.8.6
I'm pasting the sketch in here, apologies if that isn't the convention, this is my first github bug report! :)
/**
[email protected] 2024-02-23
This sketch shows a bug I have seen in dimmable_lights.h
What I see is this:
If half the lamps are set to value X, and half are set to X+1,
then the ones set to X are displayed dark.
In this sketch I set them alternating ABABABAB, but I've
seen same behavior for AAAABBBB; likely any order.
If they're not half-and-half, the one with fewer
works ok. (or maybe one with greater, my observations
got confused)
Conditions:
Using 8 lamps on a Krida controller, on Arduino Uno
and ONLY if a digitalRead() function call is present,
even if the digitalRead() hasn't been called.
*/
#include <dimmable_light.h> // library "Dimmable Light" 1.6
#define ALL_EIGHT_LAMPS 1 // bug happens if using 8 lamps. fewer works ok.
#define READPIN 12
#define INCLUDE_A_DIGITAL_READ 1
// the 8 pins used by the Krida 8-channel dimmer
DimmableLight dl1(11);
DimmableLight dl2(10);
DimmableLight dl3(9);
DimmableLight dl4(8);
#if ALL_EIGHT_LAMPS
DimmableLight dl5(7);
DimmableLight dl6(6);
DimmableLight dl7(5);
DimmableLight dl8(4);
#endif
void setup() {
DimmableLight::setSyncPin(3);
DimmableLight::begin();
pinMode(READPIN, INPUT_PULLUP);
Serial.begin(115200);
delay(200);
Serial.print("\n\n");
Serial.print("Dimmable Light bug with Krida 8 channel controller\n\n");
#if INCLUDE_A_DIGITAL_READ
Serial.println("digitalRead() is linked in, we see bug of half lamps off in some cases");
#else
Serial.println("no digitalRead(), all lamps appear on as desired & expected");
#endif
}
/// set lamps alternating brightnesses a and b
void setEm(uint8_t a, uint8_t b, uint16_t wait) {
Serial.print("lamps ");
Serial.print(a, HEX);
Serial.print(", ");
Serial.print(b, HEX);
Serial.println("");
dl1.setBrightness(a);
dl2.setBrightness(b);
dl3.setBrightness(a);
dl4.setBrightness(b);
#if ALL_EIGHT_LAMPS
dl5.setBrightness(a);
dl6.setBrightness(b);
dl7.setBrightness(a);
dl8.setBrightness(b);
#endif
delay(wait);
}
static int loops = 0;
void loop() {
loops++;
#if INCLUDE_A_DIGITAL_READ
// this wont actually do a read for a long, long time
// but just linking in the function seems
// to cause the four-lights-dark bug.
if(loops == 6000)
{
Serial.println("------> digital read happening! <------");
digitalRead(READPIN);
}
#endif
setEm(0x81, 0x80, 2000); // different by 1 step -- one lamp off
setEm(0x80, 0x81, 2000);
setEm(0x82, 0x80, 2000); // different by 2 steps, works ok
Serial.print(loops);
Serial.println(" completed. let's go again.");
}
The text was updated successfully, but these errors were encountered: