So, das is jetzt der verbesserte Code:

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;
}
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.

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