//PC0 = Taster Start (Eingang) //PC1 = Mund Rot (Ausgang) //PC2 = Mund Gruen (Ausgang) //PC3 = Mund Blau (Ausgang) //PC4 = MP3 Player Start (Ausgang) //PB0 = Sensor Vogel (Eingang) //PB1 = Motor Hand Spannung (Ausgang) //PB2 = Motor Hand Dreh (Ausgang) //PB3 = Motor Kopf Spannung (Ausgang) //PB4 = Motor Kopf Dreh (Ausgang) #include #define F_CPU 1000000UL #include #include inline uint8_t debounce(volatile uint8_t *port, uint8_t pin) { if ( ! (*port & (1 << pin)) ) { _delay_ms(50); _delay_ms(50); if ( *port & (1 << pin) ) { _delay_ms(50); _delay_ms(50); return 1; } } return 0; } int main(void) { DDRB &= ~( 1 << PB0 ); PORTB |= ( 1 << PB0 ); DDRC &= ~( 1 << PC0 ); PORTC |= ( 1 << PC0 ); DDRC |= (1 << PC1) | (1 << PC2) | (1 << PC3) | (PC4); PORTC |= (1 << PC1) | (1 << PC2) | (1 << PC3); if (debounce(&PINC, PC0)) { _delay_ms(150); PORTC |= (1 << PC4); _delay_ms(10); PORTC &= ~(1<< PC4); //Ende Zeile 1 _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(220); //Anfang Zeile 2 PORTC &= ~(1 << PC2); delay10s(); delay1s(); delay1s(); delay1s(); delay1s(); _delay_ms(70); PORTC |= (1 << PC2); //Ende Zeile 5 delay10s(); delay1s(); _delay_ms(10); //Anfang Zeile 10 } if (debounce(&PINB, PB0)) { PORTC &= ~ (1 << PC2) | (1 << PC3); delay5s(); delay1s(); delay1s(); _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(200); _delay_ms(80); //Ende Zeile 11 PORTC |= (1 << PC2) | (1 << PC3); delay5s(); delay1s(); delay1s(); _delay_ms(70); PORTC &= ~(1 << PC2); delay1s(); _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(170); //Anfang Zeile 15 PORTC |= (1 << PC2); PORTC &= ~(1 << PC1); delay10s(); _delay_ms(60); PORTC |= (1 << PC1); //Ende Zeile 16 _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(190); PORTC &= ~(1 << PC2); //Anfang Zeile 17 delay10s(); delay10s(); delay10s(); delay10s(); delay10s(); _delay_ms(200); PORTC |= (1 << PC2); //Ende Zeile 19 _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(130); //Anfang Zeile 20 delay10s(); delay10s(); delay5s(); _delay_ms(70); //Anfang Zeile 30 PORTC &= ~(1 << PC1); delay10s(); delay1s(); delay1s(); _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(200); _delay_ms(80); PORTC |= (1 << PC1); //Ende Zeile 31 _delay_ms(250); _delay_ms(250); _delay_ms(200); _delay_ms(190); PORTC &= ~(1 << PC2); //Anfang Zeile 32 delay1s(); delay1s(); delay1s(); delay1s(); delay1s(); delay1s(); PORTC |= (1 << PC2); } } int delay1s() { _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250); return; } int delay5s() { _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250); return; } int delay10s() { _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250), _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250); return; }