]> www.fi.muni.cz Git - bike-lights.git/commitdiff
patterns implemented
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 28 Aug 2012 21:43:43 +0000 (23:43 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 28 Aug 2012 21:43:43 +0000 (23:43 +0200)
Makefile
lights.h
main.c
pattern.c
tmr.c

index e7b6355cd2086cfca28cfc5884dd983a2f7a9f94..d51e72d90008d523db3a6266f0ac4d1b7842b31c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 
 PROGRAM=lights
-SRC=main.c logging.c adc.c pwm.c tmr.c pwmled.c gpio.c ambient.c
+SRC=main.c logging.c adc.c pwm.c tmr.c pwmled.c gpio.c ambient.c pattern.c
 OBJ=$(SRC:.c=.o)
 
 
index 74e887d671eb3bcdd75f7c74a024f70cc08daccd..2559e57e534339a62ebd648031ce045d9c688099 100644 (file)
--- a/lights.h
+++ b/lights.h
@@ -49,8 +49,12 @@ void gpio_set(unsigned char n, unsigned char on);
 
 /* ambient.c */
 void ambient_init();
-extern unsigned char ambient_zone;
+extern volatile unsigned char ambient_zone;
 void ambient_adc(uint16_t adc_val);
 
+/* pattern.c */
+void pattern_init();
+void patterns_next_tick();
+
 #endif /* !LIGHTS_H__ */
 
diff --git a/main.c b/main.c
index 7b63ad824f5f83f3db8865a7123497a376b4af68..0953063de92e264c8308b98c60d75e1b308f24b1 100644 (file)
--- a/main.c
+++ b/main.c
@@ -17,6 +17,7 @@ int main(void)
        pwmled_init();
        gpio_init();
        ambient_init();
+       pattern_init();
 
        log_set_state(3);
 
index 386f9df9938ea959f3ca83a2f3b6e5b6ee46830c..0245c3b679cb8e08080b67c1f08f38193cf9b02c 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -1,3 +1,5 @@
+#include <avr/io.h>
+
 #include "lights.h"
 
 typedef struct {
@@ -15,8 +17,30 @@ pattern_t off_pattern[] = {
 };
 
 pattern_t blink_pattern[] = {
-       { 1, 5 },
-       { 0, 5 },
+       { 1, 0x4 },
+       { 0, 0x8 },
+       PATTERN_END
+};
+
+pattern_t pattern_num[] = {
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x4 },
+       { 1, 0x1 },
+       { 0, 0x1F },
        PATTERN_END
 };
 
@@ -30,6 +54,27 @@ void pattern_init()
        }
 }
 
+static inline pattern_t *pattern_select(unsigned char n)
+{
+       log_byte(ambient_zone);
+       return pattern_num + sizeof(pattern_num)/sizeof(pattern_t)
+               - 1 - 2*(1+ambient_zone);;
+}
+
+static void inline led_off(unsigned char n)
+{
+       if (n == N_PWMLEDS) {
+               gpio_set(GPIO_LED2, 0);
+       }
+}
+
+static void inline led_set_level(unsigned char n, unsigned char level)
+{
+       if (n == N_PWMLEDS) {
+               gpio_set(GPIO_LED2, 1);
+       }
+}
+
 void patterns_next_tick()
 {
        unsigned char i;
diff --git a/tmr.c b/tmr.c
index b8fb50294c357a1eb0bd942296596a4ed72667b3..2d521890797a01fa651759a21d402d0eb4806190 100644 (file)
--- a/tmr.c
+++ b/tmr.c
@@ -4,6 +4,8 @@
 #include "lights.h"
 
 volatile uint16_t jiffies;
+#define PATTERN_DIV 5  // clk/10
+static unsigned char pattern_div;
 
 void init_tmr()
 {
@@ -13,13 +15,18 @@ void init_tmr()
        TIMSK |= _BV(OCIE0A);
 
        jiffies = 0;
+       pattern_div = PATTERN_DIV;
 }
 
 ISR(TIMER0_COMPA_vect)
 {
        ++jiffies;
 
-       // patterns_next_tick();
+       if (--pattern_div == 0) {
+               patterns_next_tick();
+               pattern_div = PATTERN_DIV;
+       }
+
        timer_start_adcs();
 }