main.c
1 | /*
| 2 | * christmas_lights3.c
| 3 | *
| 4 | * Created: 12.12.2020 20:52:29
| 5 | * Author : joachim
| 6 | */
| 7 |
| 8 | #include <avr/io.h>
| 9 | #include<util/delay.h>
| 10 |
| 11 | #define TIME0 1
| 12 | #define TIME1 3
| 13 | #define TIME2 15
| 14 | #define LOOPTIME 7
| 15 | #define WAITTIME 500
| 16 |
| 17 | #define LED_COUNT 20
| 18 | #define DDR_BYTE 0
| 19 | #define PORT_BYTE 1
| 20 |
| 21 | uint8_t l;
| 22 |
| 23 | // Achtung! Hoer andere Reihenfolge als bei Christmas-Lights!
| 24 |
| 25 | uint8_t matrix[LED_COUNT][2] = {
| 26 | // DDR_BYTE PORT_BYTE
| 27 | // ABCD ABCD
| 28 | { 0b00000011, 0b00000001 }, // AB 0
| 29 | { 0b00000011, 0b00000010 }, // BA 1
| 30 | { 0b00000110, 0b00000010 }, // BC 2
| 31 | { 0b00000110, 0b00000100 }, // CB 3
| 32 | { 0b00000101, 0b00000001 }, // AC 4
| 33 | { 0b00000101, 0b00000100 }, // CA 5
| 34 | { 0b00001001, 0b00000001 }, // AD 6
| 35 | { 0b00001001, 0b00001000 }, // DA 7
| 36 | { 0b00001010, 0b00000010 }, // BD 8
| 37 | { 0b00001010, 0b00001000 }, // DB 9
| 38 | { 0b00001100, 0b00000100 }, // CD 10
| 39 | { 0b00001100, 0b00001000 }, // DC 11
| 40 | { 0b00010001, 0b00000001 }, // AE 12
| 41 | { 0b00010001, 0b00010000 }, // EA 13
| 42 | { 0b00010010, 0b00000010 }, // BE 14
| 43 | { 0b00010010, 0b00010000 }, // EB 15
| 44 | { 0b00010100, 0b00000100 }, // CE 16
| 45 | { 0b00010100, 0b00010000 }, // EC 17
| 46 | { 0b00011000, 0b00001000 }, // DE 18
| 47 | { 0b00011000, 0b00010000 } // ED 19
| 48 | };
| 49 |
| 50 | void turnOn(uint8_t led ) {
| 51 | DDRB = matrix[led][DDR_BYTE];
| 52 | PORTB = matrix[led][PORT_BYTE];
| 53 | }
| 54 |
| 55 | void turnOff(void)
| 56 | {
| 57 | DDRB = 0b00000000;
| 58 | PORTB = 0b00000000;
| 59 | }
| 60 |
| 61 | void load(int8_t led1, uint8_t led2, uint8_t led3)
| 62 | {
| 63 | for(l = 1; l < LOOPTIME;l++)
| 64 | {
| 65 | turnOn(led1);
| 66 | _delay_ms(TIME0);
| 67 | if(led2 < 19 )
| 68 | {
| 69 | turnOn(led2);
| 70 | _delay_ms(TIME1);
| 71 | }
| 72 | if(led2 == 19)
| 73 | {
| 74 | turnOn(led2);
| 75 | _delay_ms(TIME2);
| 76 | }
| 77 | if(led3 < 20)
| 78 | {
| 79 | turnOn(led3);
| 80 | _delay_ms(TIME2);
| 81 | }
| 82 | }
| 83 | }
| 84 |
| 85 | void fadeout(void)
| 86 | {
| 87 | uint8_t counter = LOOPTIME * 4;
| 88 |
| 89 | while(counter > LOOPTIME *3)
| 90 | {
| 91 | turnOn(19);
| 92 | _delay_ms(3*TIME1);
| 93 | turnOff();
| 94 | _delay_ms(TIME1);
| 95 | counter--;
| 96 | }
| 97 |
| 98 | while(counter > LOOPTIME * 2)
| 99 | {
| 100 | turnOn(19);
| 101 | _delay_ms(2*TIME1);
| 102 | turnOff();
| 103 | _delay_ms(2*TIME1);
| 104 | counter--;
| 105 | }
| 106 |
| 107 | while (counter > LOOPTIME)
| 108 | {
| 109 | turnOn(19);
| 110 | _delay_ms(TIME1);
| 111 | turnOff();
| 112 | _delay_ms(3*TIME1);
| 113 | counter--;
| 114 | }
| 115 |
| 116 | while(counter > 0)
| 117 | {
| 118 | turnOn(19);
| 119 | _delay_ms(TIME1/2);
| 120 | turnOff();
| 121 | _delay_ms(4*TIME1);
| 122 | counter--;
| 123 | }
| 124 | }
| 125 |
| 126 |
| 127 | int main(void)
| 128 | {
| 129 |
| 130 | while(1)
| 131 | {
| 132 | _delay_ms(TIME2);
| 133 | load(0,1,2);
| 134 | load(1,2,3);
| 135 | load(2,3,4);
| 136 | load(3,4,5);
| 137 | load(4,5,6);
| 138 | load(5,6,7);
| 139 | load(6,7,8);
| 140 | load(7,8,9);
| 141 | load(8,9,10);
| 142 | load(9,10,11);
| 143 | load(10,11,12);
| 144 | load(11,12,13);
| 145 | load(12,13,14);
| 146 | load(13,14,15);
| 147 | load(14,15,16);
| 148 | load(15,16,17);
| 149 | load(16,17,18);
| 150 | load(17,18,19);
| 151 | load(18,19,20);
| 152 |
| 153 |
| 154 | fadeout();
| 155 | }
| 156 | }
|
|