Skip to content

Commit 650c0bf

Browse files
Add gamma correction to vor_rgbled.
1 parent e0b0188 commit 650c0bf

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

vor-arduino/vor_rgbled.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ VorRgbLed::~VorRgbLed() {
2525
}
2626

2727
void VorRgbLed::writeRed(int value) {
28-
_red->write(MAX_ANALOG_OUTPUT_VALUE - value);
28+
_red->write(pgm_read_byte(&GAMMA[MAX_ANALOG_OUTPUT_VALUE - value]));
2929
}
3030

3131
void VorRgbLed::writeGreen(int value) {
32-
_green->write(MAX_ANALOG_OUTPUT_VALUE - value);
32+
_green->write(pgm_read_byte(&GAMMA[MAX_ANALOG_OUTPUT_VALUE - value]));
3333
}
3434

3535
void VorRgbLed::writeBlue(int value) {
36-
_blue->write(MAX_ANALOG_OUTPUT_VALUE - value);
36+
_blue->write(pgm_read_byte(&GAMMA[MAX_ANALOG_OUTPUT_VALUE - value]));
3737
}
3838

3939
void VorRgbLed::write(int red, int green, int blue) {

vor-arduino/vor_rgbled.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,26 @@
99
#include "vor_actuator.h"
1010
#include "env.h"
1111

12+
// Gamma correction lookup table
13+
// https://learn.adafruit.com/led-tricks-gamma-correction/the-quick-fix
14+
const uint8_t PROGMEM GAMMA[] = {
15+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
17+
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
18+
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
19+
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
20+
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
21+
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
22+
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
23+
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
24+
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
25+
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
26+
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
27+
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
28+
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
29+
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
30+
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 };
31+
1232
class VorRgbLed{
1333
public:
1434
VorRgbLed(int redPin, int greenPin, int bluePin);
@@ -23,6 +43,7 @@ class VorRgbLed{
2343
VorActuator* _red;
2444
VorActuator* _green;
2545
VorActuator* _blue;
46+
2647
};
2748

2849
#endif

0 commit comments

Comments
 (0)