diff --git a/ledcontroller.c b/ledcontroller.c index 3092196..cfcbddb 100644 --- a/ledcontroller.c +++ b/ledcontroller.c @@ -29,29 +29,89 @@ static uint16_t ledbuffer[NUM_LED_CHANNELS]; static int8_t map_lednum_to_channels(uint8_t lednum, uint8_t *channel_r, uint8_t *channel_g, uint8_t *channel_b) { - uint8_t ret; + uint8_t ret=0; - if (lednum < 15) { - *channel_r = 3*lednum; - *channel_g = 3*lednum+1; - *channel_b = 3*lednum+2; - if ( lednum >= 10 ) { - *channel_r += 2; - *channel_g += 2; - *channel_b += 2; - } - else if ( lednum >= 5 ) { - *channel_r += 1; - *channel_g += 1; - *channel_b += 1; - } + if (lednum < 14) { ret = 1; - } - else { - ret = 0; + switch (lednum) { + case 0: + *channel_r = 13; + *channel_g = 14; + *channel_b = 15; + break; + case 1: + *channel_r = 33; + *channel_g = 34; + *channel_b = 35; + break; + case 2: + *channel_r = 36; + *channel_g = 37; + *channel_b = 38; + break; + case 3: + *channel_r = 45; + *channel_g = 46; + *channel_b = 47; + break; + case 4: + *channel_r = 42; + *channel_g = 43; + *channel_b = 44; + break; + case 5: + *channel_r = 39; + *channel_g = 40; + *channel_b = 41; + break; + case 6: + *channel_r = 29; + *channel_g = 30; + *channel_b = 31; + break; + case 7: + *channel_r = 26; + *channel_g = 27; + *channel_b = 28; + break; + case 8: + *channel_r = 23; + *channel_g = 24; + *channel_b = 25; + break; + case 9: + *channel_r = 20; + *channel_g = 21; + *channel_b = 22; + break; + case 10: + *channel_r = 17; + *channel_g = 18; + *channel_b = 19; + break; + case 11: + *channel_r = 10; + *channel_g = 11; + *channel_b = 12; + break; + case 12: + *channel_r = 4; + *channel_g = 5; + *channel_b = 6; + break; + case 13: + *channel_r = 7; + *channel_g = 8; + *channel_b = 9; + break; + default: + ret = 0; + break; + } } return ret; + } @@ -157,9 +217,9 @@ void led_flush(void) write_no_command(ledbuffer[channel+16]); write_data_latch(ledbuffer[channel+32]); } - write_no_command(ledbuffer[NUM_LED1642GW_CHANNELS-3]); - write_no_command(ledbuffer[NUM_LED1642GW_CHANNELS-2]); - write_global_latch(ledbuffer[NUM_LED1642GW_CHANNELS-1]); + write_no_command(ledbuffer[NUM_LED_CHANNELS-3]); + write_no_command(ledbuffer[NUM_LED_CHANNELS-2]); + write_global_latch(ledbuffer[NUM_LED_CHANNELS-1]); } @@ -173,3 +233,8 @@ void ledcontroller_set_channel(uint8_t channel, uint16_t value) } +void ledcontroller_clear(void) +{ + memset(ledbuffer, 0x00, sizeof(ledbuffer)); + led_flush(); +} diff --git a/ledcontroller.h b/ledcontroller.h index d07d2b4..79ce37a 100644 --- a/ledcontroller.h +++ b/ledcontroller.h @@ -24,6 +24,8 @@ void led_flush(void); void ledcontroller_turn_all_on(void); void ledcontroller_turn_all(void); void ledcontroller_set_channel(uint8_t channel, uint16_t value); +void ledcontroller_clear(void); + #endif // LEDCONTROLLER_H diff --git a/rgbyteclock.c b/rgbyteclock.c index fb9ff96..3c55fe8 100644 --- a/rgbyteclock.c +++ b/rgbyteclock.c @@ -24,37 +24,40 @@ void rgbyteclock(void) while (1) { PORTC ^= (1<