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
Lesezeichen