mirror of
https://github.com/brmlab/ledbar.git
synced 2025-06-10 05:44:01 +02:00
autonomous: Bracket channels by cmin[] in addition to cmax[]; red channel requires some minimal trigger level
This commit is contained in:
parent
953095583a
commit
d5f7f7f52b
2 changed files with 48 additions and 18 deletions
|
@ -15,7 +15,7 @@ void setup()
|
||||||
lb[i].begin(B1100000 | i);
|
lb[i].begin(B1100000 | i);
|
||||||
for (led = 0; led < cpinsets; led++) {
|
for (led = 0; led < cpinsets; led++) {
|
||||||
for (i = 0; i < CH; i++) {
|
for (i = 0; i < CH; i++) {
|
||||||
c[led][i] = cmax[led][i] / 2;
|
c[led][i] = map(5, 0, 10, cmin[led][i], cmax[led][i]);
|
||||||
lb[cpin[led][i] >> 4].setPinMode(cpin[led][i] & 0xf, LPM_PWM);
|
lb[cpin[led][i] >> 4].setPinMode(cpin[led][i] & 0xf, LPM_PWM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,15 @@ void random_walk(int led)
|
||||||
if (g[led][i] < -cmaxgrad[i]) g[led][i] = -cmaxgrad[i] + r(maxbounce); else if (g[led][i] > cmaxgrad[i]) g[led][i] = cmaxgrad[i] - r(maxbounce);
|
if (g[led][i] < -cmaxgrad[i]) g[led][i] = -cmaxgrad[i] + r(maxbounce); else if (g[led][i] > cmaxgrad[i]) g[led][i] = cmaxgrad[i] - r(maxbounce);
|
||||||
|
|
||||||
c[led][i] += g[led][i];
|
c[led][i] += g[led][i];
|
||||||
if (c[led][i] < 0) { c[led][i] = 0; g[led][i] = -g[led][i] + r(maxbounce)-maxbounce/2; } else if (c[led][i] > cmax[led][i]) { c[led][i] = cmax[led][i]; g[led][i] = -g[led][i] + r(maxbounce)-maxbounce/2; }
|
|
||||||
|
/* bounce */
|
||||||
|
if (c[led][i] < cmin[led][i]) {
|
||||||
|
c[led][i] = cmin[led][i];
|
||||||
|
g[led][i] = -g[led][i] + r(maxbounce)-maxbounce/2;
|
||||||
|
} else if (c[led][i] > cmax[led][i]) {
|
||||||
|
c[led][i] = cmax[led][i];
|
||||||
|
g[led][i] = -g[led][i] + r(maxbounce)-maxbounce/2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,15 +77,15 @@ void rainbow(int led)
|
||||||
|
|
||||||
{ int huephase = huephases[led], huephase_i = huephases_i[led];
|
{ int huephase = huephases[led], huephase_i = huephases_i[led];
|
||||||
|
|
||||||
#define huephase_to_c_inc(cc) (uint32_t) huephase_i * cmax[led][cc] / HUEPHASE_LEN
|
#define huephase_to_c_inc(cc) map(huephase_i, 0, HUEPHASE_LEN, cmin[led][cc], cmax[led][cc])
|
||||||
#define huephase_to_c_dec(cc) (cmax[led][cc] - (uint32_t) huephase_i * cmax[led][cc] / HUEPHASE_LEN)
|
#define huephase_to_c_dec(cc) map(HUEPHASE_LEN - huephase_i, 0, HUEPHASE_LEN, cmin[led][cc], cmax[led][cc])
|
||||||
switch (huephase) {
|
switch (huephase) {
|
||||||
case 0: c[led][0] = cmax[led][0]; c[led][1] = huephase_to_c_inc(1); c[led][2] = 0; break;
|
case 0: c[led][0] = cmax[led][0]; c[led][1] = huephase_to_c_inc(1); c[led][2] = cmin[led][2]; break;
|
||||||
case 1: c[led][0] = huephase_to_c_dec(0); c[led][1] = cmax[led][1]; c[led][2] = 0; break;
|
case 1: c[led][0] = huephase_to_c_dec(0); c[led][1] = cmax[led][1]; c[led][2] = cmin[led][2]; break;
|
||||||
case 2: c[led][0] = 0; c[led][1] = cmax[led][1]; c[led][2] = huephase_to_c_inc(2); break;
|
case 2: c[led][0] = cmin[led][0]; c[led][1] = cmax[led][1]; c[led][2] = huephase_to_c_inc(2); break;
|
||||||
case 3: c[led][0] = 0; c[led][1] = huephase_to_c_dec(1); c[led][2] = cmax[led][2]; break;
|
case 3: c[led][0] = cmin[led][0]; c[led][1] = huephase_to_c_dec(1); c[led][2] = cmax[led][2]; break;
|
||||||
case 4: c[led][0] = huephase_to_c_inc(0); c[led][1] = 0; c[led][2] = cmax[led][2]; break;
|
case 4: c[led][0] = huephase_to_c_inc(0); c[led][1] = cmin[led][1]; c[led][2] = cmax[led][2]; break;
|
||||||
case 5: c[led][0] = cmax[led][0]; c[led][1] = 0; c[led][2] = huephase_to_c_dec(2); break;
|
case 5: c[led][0] = cmax[led][0]; c[led][1] = cmin[led][1]; c[led][2] = huephase_to_c_dec(2); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
huephase_i++;
|
huephase_i++;
|
||||||
|
@ -96,20 +104,21 @@ void white(int led)
|
||||||
int i;
|
int i;
|
||||||
int mask = 1|2|4; // R, G, B
|
int mask = 1|2|4; // R, G, B
|
||||||
for (i = 0; i < CH; i++) {
|
for (i = 0; i < CH; i++) {
|
||||||
c[led][i] = mask & (1 << i) ? cmax[led][i] : 0;
|
c[led][i] = mask & (1 << i) ? map(255, 0, 255, cmin[led][i], cmax[led][i]) : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void custom(int led)
|
void custom(int led)
|
||||||
{
|
{
|
||||||
long red = 100 - abs (led-9) * 10;
|
int mled = cpinsets - 1 - led;
|
||||||
long green = 30;
|
int red = map( led, 0, cpinsets - 1, 0, 100);
|
||||||
long blue = 100 - abs(led-1) * 10;
|
int green = map(mled, 0, cpinsets - 1, 0, 100);;
|
||||||
|
int blue = 0;
|
||||||
|
|
||||||
c[led][0] = red * cmax[led][0] / 100;
|
c[led][0] = map(red, 0, 100, cmin[led][0], cmax[led][0]);
|
||||||
c[led][1] = green* cmax[led][1] / 100;
|
c[led][1] = map(green, 0, 100, cmin[led][1], cmax[led][1]);
|
||||||
c[led][2] = blue * cmax[led][2] / 100;
|
c[led][2] = map(blue, 0, 100, cmin[led][2], cmax[led][2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,7 +131,7 @@ void grey(int led)
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < CH; i++) {
|
for (i = 0; i < CH; i++) {
|
||||||
c[led][i] = (uint32_t) cmax[led][i] * s / steps;
|
c[led][i] = map(s, 0, steps, cmin[led][i], cmax[led][i]);
|
||||||
}
|
}
|
||||||
if (s == steps) {
|
if (s == steps) {
|
||||||
d = -1;
|
d = -1;
|
||||||
|
|
|
@ -93,6 +93,27 @@ const int cpin[LEDS_PER_TLC * NUM_TLCS][CH] = {
|
||||||
#define cpinsets (sizeof(cpin)/sizeof(cpin[0]))
|
#define cpinsets (sizeof(cpin)/sizeof(cpin[0]))
|
||||||
|
|
||||||
/* cca 2.7ohm resistor per channel */
|
/* cca 2.7ohm resistor per channel */
|
||||||
|
const int cmin[cpinsets][CH] = {
|
||||||
|
{ 4, 0, 0 }, /* box 11 */
|
||||||
|
{ 5, 0, 0 }, /* box 2 */
|
||||||
|
{ 5, 0, 0 }, /* box 3 */
|
||||||
|
{ 5, 0, 0 }, /* box 4 */
|
||||||
|
{ 5, 0, 0 }, /* box 5 */
|
||||||
|
|
||||||
|
{ 5, 0, 0 }, /* box 6 */
|
||||||
|
{ 4, 0, 0 }, /* box 7 */
|
||||||
|
{ 5, 0, 0 }, /* box 8 */
|
||||||
|
{ 5, 0, 0 }, /* box 9 */
|
||||||
|
{ 5, 0, 0 }, /* box 10 */
|
||||||
|
#if 0
|
||||||
|
|
||||||
|
{ 100, 250, 138 },
|
||||||
|
{ 100, 250, 138 },
|
||||||
|
{ 100, 250, 138 },
|
||||||
|
{ 100, 240, 230 },
|
||||||
|
{ 100, 230, 188 },
|
||||||
|
#endif
|
||||||
|
};
|
||||||
const int cmax[cpinsets][CH] = {
|
const int cmax[cpinsets][CH] = {
|
||||||
{ 120, 250, 190 }, /* box 11 */
|
{ 120, 250, 190 }, /* box 11 */
|
||||||
{ 100, 250, 180 }, /* box 2 */
|
{ 100, 250, 180 }, /* box 2 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue