Skip to content

Instantly share code, notes, and snippets.

@avr-programmierung
Created May 14, 2019 10:26
Show Gist options
  • Save avr-programmierung/627d28aa0b944af8cdbe4053dc916873 to your computer and use it in GitHub Desktop.
Save avr-programmierung/627d28aa0b944af8cdbe4053dc916873 to your computer and use it in GitHub Desktop.
ATmega88 @ 1MHz Ampel
/* ampel_01.c ATmega88 @ 1MHz */
#include <avr/io.h>
#include <util/delay.h>
enum ampel {rot=1, rot_gelb, gelb, gruen}; // rot=1, rot_gelb=2, gelb=3, gruen=4
char zustand = 1; // Zustand beim Start definieren (globale Variable)
void ampel1(ampel) // Funktion ampel 1
{
switch (ampel)
{
case rot: PORTB = (1<<PB0); break;
case rot_gelb: PORTB = (1<<PB0)+(1<<PB1); break;
case gelb: PORTB = (1<<PB1); break;
case gruen: PORTB = (1<<PB2); break;
}
}
void ampel2(ampel) // Funktion ampel 2
{
switch (ampel)
{
case rot: PORTD = (1<<PD0); break;
case rot_gelb: PORTD = (1<<PD0)+(1<<PD1); break;
case gelb: PORTD = (1<<PD1); break;
case gruen: PORTD = (1<<PD2); break;
}
}
void state_machine(void) // Funktion state_machine
{
enum ampel ampel_1, ampel_2; // Deklaration ampel_1 und ampel_2 vom Typ enum ampel
switch (zustand)
{
case 1: ampel1 (ampel_1 = rot);
ampel2 (ampel_2 = gruen);
zustand = 2; // Neuer Zustand = 2
break;
case 2: ampel1 (ampel_1 = rot);
ampel2 (ampel_2 = gelb);
zustand = 3; // Neuer Zustand = 3
break;
case 3: ampel1 (ampel_1 = rot);
ampel2 (ampel_2 = rot);
zustand = 4; // Neuer Zustand = 4
break;
case 4: ampel1 (ampel_1 = rot_gelb);
ampel2 (ampel_2 = rot);
zustand = 5; // Neuer Zustand = 5
break;
case 5: ampel1 (ampel_1 = gruen);
ampel2 (ampel_2 = rot);
zustand = 6; // Neuer Zustand = 6
break;
case 6: ampel1 (ampel_1 = gelb);
ampel2 (ampel_2 = rot);
zustand = 7; // Neuer Zustand = 7
break;
case 7: ampel1 (ampel_1 = rot);
ampel2 (ampel_2 = rot);
zustand = 8; // Neuer Zustand = 8
break;
case 8: ampel1 (ampel_1 = rot);
ampel2 (ampel_2 = rot_gelb);
zustand = 1; // Neuer Zustand = 1
break;
}
}
int main(void)
{
DDRB = 0x07; // PB0, PB1, PB2 = Ausgang
DDRD = 0x07; // PD0, PD1, PD2 = Ausgang
while(1)
{
state_machine(); // Funktion state_machine aufrufen
_delay_ms(3000); // 3 Sekunden warten
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment