So, das is jetzt der verbesserte Code:
Jetzt leuchten die ersten 2 Leds aber die dritte nach dem Tastendruck nicht. d.h. er erkennt den Tastendruck nicht. Warum? Die Taster sind an den Pins 2-5 angeschlossen und sie sziehen die Pins nach Masse.Code:#define F_CPU 1000000UL #include <avr/io.h> #include <util/delay.h> int x; //############################################################### int main (void) { DDRB=0x07; DDRC=0x0f; DDRD=0x00; PORTD=0x0f; PORTB=0x01; //Led1 ein while(1) { PORTB &= ~(1<<PB2); //Led3 aus PORTB |= (1<<PB1); //Led2 ein x=0; motor_right(1); motor_left(1); int taster(); if (x==1) //Schalter rechts außen gedrückt { PORTB &= ~(1<<PB1); //Led2 aus PORTB |= (1<<PB2); //Led3 ein motor_right(-1); motor_left(-1); _delay_ms(1000); motor_right(1); _delay_ms(700); } if (x==2) //Schalter rechts mitte gedrückt { PORTB &= ~(1<<PB1); //Led2 aus PORTB |= (1<<PB2); //Led3 ein motor_right (-1); motor_left (-1); _delay_ms(1000); motor_right(1); _delay_ms(700); } if (x==3) //Schalter links mitte gedrückt { PORTB &= ~(1<<PB1); //Led2 aus PORTB |= (1<<PB2); //Led3 ein motor_right(-1); motor_left(-1); _delay_ms(1000); motor_left(1); _delay_ms(700); } if (x==4) //Schalter links außen gedrückt { PORTB &= ~(1<<PB1); //Led2 aus PORTB |= (1<<PB2); //Led3 ein motor_right(-1); motor_left(-1); _delay_ms(1000); motor_left(1); _delay_ms(700); } else { } } return 0; } //############################################################### int motor_right (int mr) //mr=1=vorwärts mr=0=aus mr=-1=rückwärts { if (mr==0) { PORTC &= ~( (1<<PC0) | (1<<PC1) ); //Pins PC0 und PC1 "low" } if (mr==1) { PORTC &= ~(1<<PC1); //PC1 aus PORTC |= (1<<PC0); //PC0 ein } if (mr==-1) { PORTC &= ~(1<<PC0); //PC0 aus PORTC |= (1<<PC1); //PC1 ein } return 0; } //############################################################### int motor_left (int ml) //ml=1=vorwärts ml=0=aus ml=-1=rückwärts { if (ml==0) { PORTC &= ~( (1<<PC3) | (1<<PC4) ); //Pins PC3 und PC4 "low" } if (ml==1) { PORTC &= ~(1<<PC4); //PC4 aus PORTC |= (1<<PC3); //PC3 ein } if (ml==-1) { PORTC &= ~(1<<PC3); //PC3 aus PORTC |= (1<<PC4); //PC4 ein } return 0;} //############################################################### int taster (void) { if (bit_is_clear(PIND,0)) //Schalter rechts außen { x=1; } if (bit_is_clear(PIND,1)) //Schalter rechts mitte { x=2; } if (bit_is_clear(PIND,2)) //Schalter links mitte { x=3; } if (bit_is_clear(PIND,3)) //Schalter links außen { x=4; } return x; }
Ich hoffe ihr könnt mir helfen.
Mit freundlichen Grüßen
Edit:
Den Schaltplan habe ich ja ganz vergessen:
http://danielfrank.bplaced.net/bilde...er/roboter.png







Zitieren

Lesezeichen