mirror of
https://github.com/brmlab/ledbar.git
synced 2025-06-09 13:24:01 +02:00
Various changes to host/ledbar.c
This commit is contained in:
parent
eb4da1bf77
commit
85a4b1c962
1 changed files with 111 additions and 10 deletions
121
host/ledbar.c
121
host/ledbar.c
|
@ -63,7 +63,7 @@ void programW(int i, int t, double *r, double *g, double *b)
|
||||||
void programE(int i, int t, double *r, double *g, double *b)
|
void programE(int i, int t, double *r, double *g, double *b)
|
||||||
{
|
{
|
||||||
static float pos = BOXES/2;
|
static float pos = BOXES/2;
|
||||||
static float dir = 0.01;
|
static float dir = 0.05;
|
||||||
*r = max(1 - fabsl((pos-i)/BOXES)*4, 0);
|
*r = max(1 - fabsl((pos-i)/BOXES)*4, 0);
|
||||||
*g = 0;
|
*g = 0;
|
||||||
*b = 0;
|
*b = 0;
|
||||||
|
@ -86,14 +86,23 @@ void programT(int i, int t, double *r, double *g, double *b)
|
||||||
// . -> 'x' - -> 'xxx' interelement -> ' '
|
// . -> 'x' - -> 'xxx' interelement -> ' '
|
||||||
// interletter -> ' ' interword -> ' '
|
// interletter -> ' ' interword -> ' '
|
||||||
// static const char *str = "brmlab rulez ";
|
// static const char *str = "brmlab rulez ";
|
||||||
static const char *str = "xxx x x x x xxx x xxx xxx x xxx x x x xxx xxx x x x x xxx x x x xxx x xxx x x x xxx xxx x x ";
|
static const char *str = "xxx x x x x xxx x xxx xxx x xxx x x x xxx xxx x x x "
|
||||||
|
"x xxx x x x xxx x xxx x x x xxx xxx x x ";
|
||||||
static int len;
|
static int len;
|
||||||
len = strlen(str);
|
len = strlen(str);
|
||||||
|
|
||||||
t /= 50;
|
int t1 = t/10;
|
||||||
|
int t2 = t%10;
|
||||||
*r = 0;
|
*r = 0;
|
||||||
*g = str[(i+t)%len]=='x' ? 1 : 0;
|
|
||||||
*b = 0;
|
*b = 0;
|
||||||
|
int c1 = str[(i+t1)%len] == 'x' ? 1 : 0;
|
||||||
|
int c2 = str[(i+t1+1)%len] == 'x' ? 1 : 0;
|
||||||
|
switch (2*c1+c2) {
|
||||||
|
case 0: *g = 0; break;
|
||||||
|
case 1: *g = t2/10.0; break;
|
||||||
|
case 2: *g = 1-t2/10.0; break;
|
||||||
|
case 3: *g = 1; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MiniPOV brmlab
|
// MiniPOV brmlab
|
||||||
|
@ -106,7 +115,7 @@ void programY(int i, int t, double *r, double *g, double *b)
|
||||||
"x x x x x x x x x x x x",
|
"x x x x x x x x x x x x",
|
||||||
"xx x x x x x xx xx "
|
"xx x x x x x xx xx "
|
||||||
};
|
};
|
||||||
t = t % 4;
|
t = t/10 % 4;
|
||||||
*r = 0;
|
*r = 0;
|
||||||
*g = t<4 && i<23 && bm[t][i]=='x' ? 1 : 0;
|
*g = t<4 && i<23 && bm[t][i]=='x' ? 1 : 0;
|
||||||
*b = 0;
|
*b = 0;
|
||||||
|
@ -120,9 +129,11 @@ void programU(int i, int t, double *r, double *g, double *b)
|
||||||
h = t/3600;
|
h = t/3600;
|
||||||
m = t/60%60;
|
m = t/60%60;
|
||||||
s = t%60;
|
s = t%60;
|
||||||
*r = i==0 || i ==BOXES-1 || ((h&16) && i==BOXES-21) || ((h& 8) && i==BOXES-20) || ((h&4) && i==BOXES-19) || ((h&2) && i==BOXES-18) || ((h&1) && i==BOXES-17) ? 1 : 0;
|
*r = *g = *b = 0;
|
||||||
*g = i==0 || i ==BOXES-1 || ((m&32) && i==BOXES-15) || ((m&16) && i==BOXES-14) || ((m&8) && i==BOXES-13) || ((m&4) && i==BOXES-12) || ((m&2) && i==BOXES-11) || ((m&1) && i==BOXES-10) ? 1 : 0;
|
if (i == 0 || i == 6 || i == 7 || i == 14 || i == 15 || i == 22) *r = *g = *b = 1;
|
||||||
*b = i==0 || i ==BOXES-1 || ((s&32) && i==BOXES- 8) || ((s&16) && i==BOXES- 7) || ((s&8) && i==BOXES- 6) || ((s&4) && i==BOXES- 5) || ((s&2) && i==BOXES- 4) || ((s&1) && i==BOXES- 3) ? 1 : 0;
|
else if (i < 6) *r = (h&(1<<( 5-i))) ? 1 : 0;
|
||||||
|
else if (i < 14) *g = (m&(1<<(13-i))) ? 1 : 0;
|
||||||
|
else if (i < 22) *b = (s&(1<<(21-i))) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clock - progressbar
|
// clock - progressbar
|
||||||
|
@ -137,8 +148,89 @@ void programI(int i, int t, double *r, double *g, double *b)
|
||||||
if (m<0) m = 0; else if (m>1) m = 1;
|
if (m<0) m = 0; else if (m>1) m = 1;
|
||||||
if (s<0) s = 0; else if (s>1) s = 1;
|
if (s<0) s = 0; else if (s>1) s = 1;
|
||||||
*r = h;
|
*r = h;
|
||||||
*g = i>7 ? m : 0;
|
*g = i>=7 ? m : 0;
|
||||||
*b = i>15 ? s : 0;
|
*b = i>=15 ? s : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// random moving lights
|
||||||
|
void programO(int i, int t, double *r, double *g, double *b)
|
||||||
|
{
|
||||||
|
#define PERIOD 1200
|
||||||
|
#define MAX_DIST 9
|
||||||
|
t += PERIOD;
|
||||||
|
unsigned int rnd, seed;
|
||||||
|
int t1;
|
||||||
|
double l, sel, dist, dir;
|
||||||
|
|
||||||
|
t1 = t/PERIOD;
|
||||||
|
seed = t1*3;
|
||||||
|
rnd = rand_r(&seed) % BOXES;
|
||||||
|
dir = (rand_r(&seed) % 1000)/10.0 - 50;
|
||||||
|
sel = fmod(rnd+t/(PERIOD/dir), BOXES);
|
||||||
|
if (sel < 0) sel += BOXES;
|
||||||
|
l = 1-abs((t-t1*PERIOD)-PERIOD/2)/((double) PERIOD/2);
|
||||||
|
l *= 3;
|
||||||
|
if (l > 1) l = 1;
|
||||||
|
dist = sel-i;
|
||||||
|
if (dist < 0) dist = dist+BOXES;
|
||||||
|
dist = fmin(dist, -dist+BOXES);
|
||||||
|
l *= (double)(MAX_DIST-dist)/MAX_DIST;
|
||||||
|
if (l < 0) l = 0;
|
||||||
|
*r = l;
|
||||||
|
|
||||||
|
t1 = (t-PERIOD/3)/PERIOD;
|
||||||
|
seed = t1*3+1;
|
||||||
|
rnd = rand_r(&seed) % BOXES;
|
||||||
|
dir = (rand_r(&seed) % 1000)/10.0 - 50;
|
||||||
|
sel = fmod(rnd+t/(PERIOD/dir), BOXES);
|
||||||
|
if (sel < 0) sel += BOXES;
|
||||||
|
l = 1-abs(fmod(t-PERIOD/3, PERIOD)-PERIOD/2)/((double) PERIOD/2);
|
||||||
|
l *= 3;
|
||||||
|
if (l > 1) l = 1;
|
||||||
|
dist = sel-i;
|
||||||
|
if (dist < 0) dist = dist+BOXES;
|
||||||
|
dist = fmin(dist, -dist+BOXES);
|
||||||
|
l *= (double)(MAX_DIST-dist)/MAX_DIST;
|
||||||
|
if (l < 0) l = 0;
|
||||||
|
*g = l;
|
||||||
|
|
||||||
|
t1 = (t-PERIOD*2/3)/PERIOD;
|
||||||
|
seed = t1*3+2;
|
||||||
|
rnd = rand_r(&seed) % BOXES;
|
||||||
|
dir = (rand_r(&seed) % 1000)/10.0 - 50;
|
||||||
|
sel = fmod(rnd+t/(PERIOD/dir), BOXES);
|
||||||
|
if (sel < 0) sel += BOXES;
|
||||||
|
l = 1-abs(fmod(t-PERIOD*2/3, PERIOD)-PERIOD/2)/((double) PERIOD/2);
|
||||||
|
l *= 3;
|
||||||
|
if (l > 1) l = 1;
|
||||||
|
dist = sel-i;
|
||||||
|
if (dist < 0) dist = dist+BOXES;
|
||||||
|
dist = fmin(dist, -dist+BOXES);
|
||||||
|
l *= (double)(MAX_DIST-dist)/MAX_DIST;
|
||||||
|
if (l < 0) l = 0;
|
||||||
|
*b = l;
|
||||||
|
#undef PERIOD
|
||||||
|
#undef MAX_DIST
|
||||||
|
}
|
||||||
|
|
||||||
|
// alternative rainbow
|
||||||
|
void programP(int i, int t, double *r, double *g, double *b)
|
||||||
|
{
|
||||||
|
double index = (double) i/BOXES;
|
||||||
|
double time = 0.01*t;
|
||||||
|
double phi = 6*index+time;
|
||||||
|
int phase = ((int) phi) % 6;
|
||||||
|
double part = fmod(phi, 1.0);
|
||||||
|
double inc = part;
|
||||||
|
double dec = 1-part;
|
||||||
|
switch (phase) {
|
||||||
|
case 0: *r=1; *g=inc; *b=0; break;
|
||||||
|
case 1: *r=dec; *g=1; *b=0; break;
|
||||||
|
case 2: *r=0; *g=1; *b=inc; break;
|
||||||
|
case 3: *r=0; *g=dec; *b=1; break;
|
||||||
|
case 4: *r=inc; *g=0; *b=1; break;
|
||||||
|
case 5: *r=1; *g=0; *b=dec; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,6 +261,8 @@ int main(int argc, char* argv[])
|
||||||
int quit = 0;
|
int quit = 0;
|
||||||
int t = 0;
|
int t = 0;
|
||||||
int size;
|
int size;
|
||||||
|
int lastUpdate = 0;
|
||||||
|
int sleep;
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) < 0) return 1;
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) return 1;
|
||||||
if (!(screen = SDL_SetVideoMode(RESX, RESY, BPP, SDL_HWSURFACE))) {
|
if (!(screen = SDL_SetVideoMode(RESX, RESY, BPP, SDL_HWSURFACE))) {
|
||||||
|
@ -199,12 +293,19 @@ int main(int argc, char* argv[])
|
||||||
case SDLK_y: program = programY; break;
|
case SDLK_y: program = programY; break;
|
||||||
case SDLK_u: program = programU; break;
|
case SDLK_u: program = programU; break;
|
||||||
case SDLK_i: program = programI; break;
|
case SDLK_i: program = programI; break;
|
||||||
|
case SDLK_o: program = programO; break;
|
||||||
|
case SDLK_p: program = programP; break;
|
||||||
case SDLK_ESCAPE: quit = 1; break;
|
case SDLK_ESCAPE: quit = 1; break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sleep = 25 - (SDL_GetTicks() - lastUpdate);
|
||||||
|
if (sleep > 0) {
|
||||||
|
SDL_Delay(sleep);
|
||||||
|
}
|
||||||
|
lastUpdate += 25;
|
||||||
}
|
}
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue