diff options
Diffstat (limited to 'usb-i2c-sl018/ledmatrix.c')
-rw-r--r-- | usb-i2c-sl018/ledmatrix.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/usb-i2c-sl018/ledmatrix.c b/usb-i2c-sl018/ledmatrix.c index c5d729a..ee057bf 100644 --- a/usb-i2c-sl018/ledmatrix.c +++ b/usb-i2c-sl018/ledmatrix.c @@ -30,9 +30,11 @@ #define LEDMATRIX_DDR DDRB #define LEDMATRIX_RED 6 #define LEDMATRIX_GREEN 7 +#define LEDMATRIX_NUM_LEDS 6 #define LEDMATRIX_MASK 0x3F ledmatrix_mode_t mode = off; +uint8_t moving_cnt = 0; void ledmatrix_start_timer(void) { @@ -65,12 +67,18 @@ void ledmatrix_red_init(void) void ledmatrix_red_moving_init(void) { - + ledmatrix_red_init(); + moving_cnt = 0; + LEDMATRIX_PORT = (LEDMATRIX_PORT & ~LEDMATRIX_MASK) | (LEDMATRIX_MASK & (1<<moving_cnt)); + ledmatrix_start_timer(); } void ledmatrix_red_moving_handle(void) { - + moving_cnt++; + if(moving_cnt >= LEDMATRIX_NUM_LEDS) + moving_cnt = 0; + LEDMATRIX_PORT = (LEDMATRIX_PORT & ~LEDMATRIX_MASK) | (LEDMATRIX_MASK & (1<<moving_cnt)); } @@ -95,12 +103,18 @@ void ledmatrix_green_init(void) void ledmatrix_green_moving_init(void) { - + ledmatrix_green_init(); + moving_cnt = 0; + LEDMATRIX_PORT = (LEDMATRIX_PORT & ~LEDMATRIX_MASK) | (LEDMATRIX_MASK & (1<<moving_cnt)); + ledmatrix_start_timer(); } void ledmatrix_green_moving_handle(void) { - + moving_cnt--; + if(moving_cnt >= LEDMATRIX_NUM_LEDS) + moving_cnt = LEDMATRIX_NUM_LEDS-1; + LEDMATRIX_PORT = (LEDMATRIX_PORT & ~LEDMATRIX_MASK) | (LEDMATRIX_MASK & (1<<moving_cnt)); } |