X-Git-Url: http://git.rrze.uni-erlangen.de/gitweb/?p=moodlight.git;a=blobdiff_plain;f=main.c;h=5e9fb2220793c5d30ceb9d2433888a70a1463bd2;hp=7ba7212cc28a39aa2c1977e66faeba3a8a6be6d3;hb=ddf1553f4f7cac2d6d4510e231b53d6b48028a14;hpb=32eb657a83c04b4a7499c590936da752e5b8c15e diff --git a/main.c b/main.c index 7ba7212..5e9fb22 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.3 2010/06/27 22:19:15 simimeie Exp $ +/* $Id: main.c,v 1.4 2010/06/30 19:39:28 simimeie Exp $ * Main file for the HaWo moodlight. * This is the main file that glues it all together. It also contains all * functionality that is too small to require an extra file. @@ -34,9 +34,14 @@ void get_mcusr(void) { wdt_disable(); } +#define IRSTATE_RED 1 +#define IRSTATE_GREEN 2 +#define IRSTATE_BLUE 3 +#define IRSTATE_WHITE 4 + int main(void) { - uint8_t i = 0; + uint8_t irstate = 0; /* Load settings from EEPROM */ #if 0 @@ -67,6 +72,84 @@ int main(void) while (1) { /* We should never exit */ wdt_reset(); + uint8_t k = ircontrol_getlastcommand(); + if (k != 0xff) { + switch (k) { + case 0x00: /* "Up" */ + if (irstate == IRSTATE_RED) { + if (ledpwm_re < 0xff) { ledpwm_re++; } + } else if (irstate == IRSTATE_GREEN) { + if (ledpwm_gr < 0xff) { ledpwm_gr++; } + } else if (irstate == IRSTATE_BLUE) { + if (ledpwm_bl < 0xff) { ledpwm_bl++; } + } else { + if (ledpwm_bri < 0xff) { ledpwm_bri++; } + } + break; + case 0x01: /* "Down" */ + if (irstate == IRSTATE_RED) { + if (ledpwm_re > 0) { ledpwm_re--; } + } else if (irstate == IRSTATE_GREEN) { + if (ledpwm_gr > 0) { ledpwm_gr--; } + } else if (irstate == IRSTATE_BLUE) { + if (ledpwm_bl > 0) { ledpwm_bl--; } + } else { + if (ledpwm_bri > 0) { ledpwm_bri--; } + } + break; + case 0x04: /* Red */ + if (irstate == IRSTATE_RED) { + ledpwm_re = 0xff; ledpwm_gr = 0; ledpwm_bl = 0; + irstate = 0; + } else { + irstate = IRSTATE_RED; + } + break; + case 0x05: /* Green */ + if (irstate == IRSTATE_GREEN) { + ledpwm_re = 0; ledpwm_gr = 0xff; ledpwm_bl = 0; + irstate = 0; + } else { + irstate = IRSTATE_GREEN; + } + break; + case 0x06: /* Blue */ + if (irstate == IRSTATE_BLUE) { + ledpwm_re = 0; ledpwm_gr = 0; ledpwm_bl = 0xff; + irstate = 0; + } else { + irstate = IRSTATE_BLUE; + } + break; + case 0x07: /* White */ + if (irstate == IRSTATE_WHITE) { + ledpwm_re = 0xff; ledpwm_gr = 0xff; ledpwm_bl = 0xff; + irstate = 0; + } else { + irstate = IRSTATE_WHITE; + } + break; + case 0x08: /* Dark orange */ + ledpwm_re = 0xff; ledpwm_gr = 0x40; ledpwm_bl = 0x00; + irstate = 0; + break; + case 0x0c: /* orange */ + ledpwm_re = 0xff; ledpwm_gr = 0x80; ledpwm_bl = 0x00; + irstate = 0; + break; + case 0x10: /* bright orange */ + ledpwm_re = 0xff; ledpwm_gr = 0xc0; ledpwm_bl = 0x00; + irstate = 0; + break; + case 0x14: /* yellow */ + ledpwm_re = 0xff; ledpwm_gr = 0xff; ledpwm_bl = 0x00; + irstate = 0; + break; + }; + ledpwm_setled(LEDPWM_REDLED, (((uint16_t)ledpwm_re * ledpwm_bri) / 255)); + ledpwm_setled(LEDPWM_GREENLED, (((uint16_t)ledpwm_gr * ledpwm_bri) / 255)); + ledpwm_setled(LEDPWM_BLUELED, (((uint16_t)ledpwm_bl * ledpwm_bri) / 255)); + } /* i++; console_printhex8(i); ledpwm_setled(LEDPWM_REDLED, i);