-/* $Id: ledpwm.c,v 1.1 2010/06/26 19:08:18 simimeie Exp $
+/* $Id: ledpwm.c,v 1.2 2010/06/30 19:39:28 simimeie Exp $
* Functions for led brightness control via PWM (pulse width modulation).
*/
/* Select between Phase correct PWM and Fast PWM mode.
* setting this to 1 selects phase correct mode, everything else is Fast PWM. */
#define PHASECORRECTPWM 1
+
/*
* Our hardware connections are as follows:
* Red -> PD6 / OC0A
* Green -> PD5 / OC0B
* Blue -> PD3 / OC2B
*/
+
+uint8_t ledpwm_re = 0xff, ledpwm_gr = 0xff, ledpwm_bl = 0xff;
+uint8_t ledpwm_bri = 128;
+
void ledpwm_init(void)
{
/* Set OC2B, OC0A and OC0B to output */
-/* $Id: ledpwm.h,v 1.1 2010/06/26 19:08:18 simimeie Exp $
+/* $Id: ledpwm.h,v 1.2 2010/06/30 19:39:28 simimeie Exp $
* Functions for led brightness control via PWM (pulse width modulation).
*/
#define LEDPWM_GREENLED 2
#define LEDPWM_BLUELED 3
+extern uint8_t ledpwm_re;
+extern uint8_t ledpwm_gr;
+extern uint8_t ledpwm_bl;
+extern uint8_t ledpwm_bri;
+
/* Init PWM (pins and timers) */
void ledpwm_init(void);
-/* $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.
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
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);