#include //Grundfunktionen #ifndef F_CPU //Vordefinieren für delay.h #define F_CPU 1000000UL //Definition von F_CPU in Hertz #endif #include //Warteschleifen /* Portbelegung: PD0 =Blau PD1 =Rot PD2 =Grün Hier an eigene Portbelegung anpassen. */ #define Rot 0b00000010 #define Blau 0b00000001 #define Gruen 0b00000100 #define Rotgruen 0b00000110 #define Rotblau 0b00000011 #define Blaugruen 0b00000101 #define Alle 0b00000111 #define Keine 0b00000000 char table[101] = {0,0,0,0,0,0,0,0,0,0, //DutyCycle Tabelle mit der die LEDs gedimmt werden. 0,0,0,0,1,2,2,3,3,4, //Leicht logarithmisch, aber im unteren Bereich angepasst. 4,4,4,5,5,5,6,6,7,7, //Die Werte sind Prozentwerte. 8,8,9,9,10,11,11,12,13,13, 14,15,16,16,17,18,19,20,21,22, 23,24,25,26,27,28,29,30,31,33, 34,35,36,37,39,40,41,43,44,46, 47,49,50,52,53,55,56,59,60,61, 63,64,66,68,70,72,74,75,77,79, 81,83,85,87,89,91,94,96,98,100, 100}; void Wechsel (char Ist, char Soll, int Sekunden, char On, char Off) /* Wechselfunktion. Die LED-Kanäle werden mithilfe der DC-Tabelle (table Array) gedimmt Ist = Wert von dem ausgegangen wird Soll = Wert zu dem gewechselt wird Sekunden= Wert wie lange der Effekt dauert On = Impulsdauer der On-Zeit Off = Impulsdauer der Off-Zeit */ { int i,v,w,x,y,z; for (i=100; i>0; i--) { for (z=Sekunden; z>0; z--) { x=table[i]; y=100-table[i]; PORTD=Ist; while (x) { for (v=On; v>0; v--) { _delay_ms(0.1); } x--; } PORTD=Soll; while (y) { for (w=Off; w>0; w--) { _delay_ms(0.1); } y--; } } } } void Farbe (char Soll, int Sekunden) /* Zeigt eine Standfarbe/kombination Soll = Farbwahl Sekunden= Dauer */ { int x; PORTD=Soll; for (x=Sekunden; x>0; x--) { _delay_ms(1000); } } int main (void) { DDRD=0b00000111; //PD2,1,0 Ausgang while (1) { Farbe (Rot, 10); Wechsel (Rot, Blau, 5, 1, 1); Farbe (Blau, 10); Wechsel (Blau, Gruen, 5, 1, 1); Farbe (Gruen, 10); Wechsel (Gruen, Rotgruen, 5, 1, 1); Farbe (Rotgruen, 10); Wechsel (Rotgruen, Rotblau, 5, 1, 1); Farbe (Rotblau, 10); Wechsel (Rotblau, Blaugruen, 5, 1, 1); Farbe (Blaugruen, 10); Wechsel (Blaugruen, Alle, 5, 1, 1); Farbe (Alle, 10); Wechsel (Alle, Rot, 5, 1, 1); } }