Hi, nachdem die ersten light_ws2812 bastelein funktionieren würde ich gerne Led's ein/aus faden. Ein ganz stupider Ansatz wie der hier:
1 | #include <util/delay.h> |
2 | #include <avr/io.h> |
3 | #include <avr/interrupt.h> |
4 | #include "light_ws2812.h" |
5 | |
6 | |
7 | //const uint8_t NUM_LEDS = 24; // Anzahl Leds |
8 | #define NUM_LEDS 1 |
9 | struct cRGB leds[NUM_LEDS]; |
10 | |
11 | int main(void) |
12 | { |
13 | while(1) |
14 | { |
15 | for(uint8_t step = 0; step < 255; step++) |
16 | { |
17 | // Led einschalten |
18 | leds[0].r = 0; |
19 | leds[0].g = 0; |
20 | leds[0].b = step; |
21 | ws2812_setleds(leds, NUM_LEDS); |
22 | |
23 | _delay_ms(100); |
24 | |
25 | } |
26 | } |
27 | } |
funktioniert natürlich nich. In diesem Artikel: https://www.mikrocontroller.net/articles/LED-Fading wird beschrieben wie man Leds vernünftig ein/aus faded. Funktioniert auch für eine Led ganz toll, da aber der ws2812 controller die Leuchtdauer/Intensität der Led kontrolliert kann man nicht einfach +5v des Led Streifens kontrollieren. Eine Idee wäre in der Funktion:
1 | void pwm_up_down (const uint16_t pwm_table[], int16_t size, uint16_t delay) |
2 | { |
3 | int16_t tmp; |
4 | |
5 | for (tmp = 0; tmp < size; tmp++) |
6 | { |
7 | OCR1A = pgm_read_word (& pwm_table[tmp]); |
8 | ws2812_setleds(leds, NUM_LEDS); |
9 | my_delay (delay); |
10 | } |
11 | |
12 | for (tmp = size-1; tmp >= 0; tmp--) |
13 | { |
14 | OCR1A = pgm_read_word (& pwm_table[tmp]); |
15 | ws2812_setleds(leds, NUM_LEDS); |
16 | my_delay (delay); |
17 | } |
18 | } |
ws2812_setleds(leds, NUM_LEDS); einzubauen, und damit die Led komplett ein/auszuschalten. bin mir hier aber nicht ganz sicher wie man den festen PWM Pin mit dem Pin der für ws2812 definiert wird kombinieren kann?
1 | #define ws2812_port B // Data port |
2 | #define ws2812_pin 1 // Data out pin |
Hat da jemand eine Idee?