Hi!
Erstmal Danke für das Lob!

Zitat von
NXTbotFreak
Ein Problem wird doch aber sein, dass der Roboter wen er vorne anstößt, beim Rückwärtsfahren hinten gegen eine Wand stößt oder???

Ja das is ein Problem, aber vllt werde ich hinten auch noch einen Schalter dranbauen.
Der Code ist auch schon fertig:
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<<PB3); //Led3 aus
PORTB |= (1<<PB2); //Led2 ein
x=0;
motor_right(1);
motor_left(1);
int taster();
if (x==1) //Schalter rechts außen gedrückt
{
PORTB &= ~(1<<PB2); //Led2 aus
PORTB |= (1<<PB3); //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<<PB2); //Led2 aus
PORTB |= (1<<PB3); //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<<PB2); //Led2 aus
PORTB |= (1<<PB3); //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<<PB2); //Led2 aus
PORTB |= (1<<PB3); //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;
}
Aber er funktioniert nicht ganz richtig. Ich hab 3 Kontroll-Leds. Eine Leuchtet immer wenn der Controller aktiv ist (das funktioniert auch), die 2 leuchtet wenn er im Forwärts-Fahr-Modus ist (die leuchtet nie, warum?), und eine die dann leuchtet, wenn der Roboter gerade das Ausweichmanöver macht (die leuchtet komischerweise immer, warum?).
Ob der µC die H-Brücken richtig ansteuert, weiß ich noch nicht, aber die H-Brücken selbst funktionieren (die eine nur theoretisch, weil noch Transen fehlen).
Ich hoffe ihr findet den Fehler im Code.
MfG
Edit: Ich hab den Fehler gefunden und ich stelle den Code bald hier rein.
Lesezeichen