Hallo
Ich hbae mir einen roboter selbst gebaut, die Hardware funktioniert (mehrmals getestet). Ich habeals Motor treiber schaltung einfach die von dem robot rover von robotschop.com abgekupfert. Alls abstandssensoren habe ich den GP2Y0D810ZOF (digitaler ir entfernungsmesser von sharp) genommen. Ansosten habe ich noch den Arduino Uno in verwendung. Die aufgabe von dem Programme ist: durch die Gegend zu fahren ohne anzustoßen. Doch es funktioniert einfach nicht! Ich habe alles mögliche ausprobiert aber es wiel nicht. Kann mir vielleicht jemand helfen?
Der MotorSpeed gibt an wie schnel der Motor sich drehen soll. Wenn MotorControll LOW ist dreht sich der Motor vorwährts, bei HIGH ist das gegenteil.
Dies ist eine vereinfachte Version von dem fertigen Programm:
Der Roboter fehrt und fert einfach und reagiert nicht. Die LED leute die ganze zeit.
int MotorSpeedL = 5;
int MotorSpeedR = 6;
int MotorControlL = 7;
int MotorControlR = 4;
volatile boolean Gegenstand_links;
volatile boolean Gegenstand_rechts;
int led = 13;
volatile int state = LOW;
void setup()
{
pinMode(led, OUTPUT);
attachInterrupt(0, setze_status_Gegenstand_links, FALLING);
attachInterrupt(1, setze_status_Gegenstand_rechts, FALLING);
Gegenstand_links = false;
Gegenstand_rechts = false;
}
void loop()
{
if(Gegenstand_rechts == true);{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, LOW);
digitalWrite (MotorSpeedL, 200);
digitalWrite (MotorSpeedR, 200);
delay(600);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
Gegenstand_rechts = false;
Gegenstand_links = false;
digitalWrite(led, LOW);
}
if(Gegenstand_links == true);{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, LOW);
digitalWrite (MotorSpeedL, 200);
digitalWrite (MotorSpeedR, 200);
delay(600);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
Gegenstand_rechts = false;
Gegenstand_links = false;
digitalWrite(led, LOW);
}
}
void setze_status_Gegenstand_links(){
digitalWrite(led, HIGH);
Gegenstand_links = true;
}
void setze_status_Gegenstand_rechts(){
digitalWrite(led, HIGH);
Gegenstand_rechts = true;
}
Dies ist das eig. fertige Programm:
Der Roboter fährt immer gerade aus und reagiert nicht.
int led = 13;
int MotorSpeedL = 5;
int MotorSpeedR = 6;
int MotorControlL = 7;
int MotorControlR = 4;
int sensorLinks = 3;
int sensorRinks = 2;
volatile boolean Gegenstand_links;
volatile boolean Gegenstand_rechts;
void setup(){
pinMode (MotorSpeedL, OUTPUT);
pinMode (MotorSpeedR, OUTPUT);
pinMode (MotorControlL, OUTPUT);
pinMode (MotorControlR, OUTPUT);
attachInterrupt(0,setze_status_Gegenstand_rechts, CHANGE);
attachInterrupt(1,setze_status_Gegenstand_links, CHANGE);
Gegenstand_links = false;
Gegenstand_rechts = false;
}
void loop(){
vorwaerts_fahren(100, 255);
if(Gegenstand_links == true){
zurueck_fahren(300, 200);
rechts_schwenk(2500, 200);
Gegenstand_links = false;
digitalWrite(led, LOW);
}
if(Gegenstand_rechts == true){
zurueck_fahren(300, 200);
links_schwenk(2500, 200);
Gegenstand_rechts = false;
digitalWrite(led, LOW);
}
}
int zurueck_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, HIGH);
digitalWrite (MotorSpeedL, geschwindigkeit);
digitalWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
return 0;
}
int vorwaerts_fahren(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, LOW);
digitalWrite (MotorSpeedL, geschwindigkeit);
digitalWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
return 0;
}
int rechts_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, HIGH);
digitalWrite (MotorControlR, LOW);
digitalWrite (MotorSpeedL, geschwindigkeit);
digitalWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
return 0;
}
int links_schwenk(int dauer, int geschwindigkeit)
{
digitalWrite (MotorControlL, LOW);
digitalWrite (MotorControlR, HIGH);
digitalWrite (MotorSpeedL, geschwindigkeit);
digitalWrite (MotorSpeedR, geschwindigkeit);
delay(dauer);
digitalWrite (MotorSpeedL, 0);
digitalWrite (MotorSpeedR, 0);
return 0;
}
void setze_status_Gegenstand_links(){
digitalWrite(led, HIGH);
//Gegenstand_links = true;
}
void setze_status_Gegenstand_rechts(){
digitalWrite(led, HIGH);
//Gegenstand_rechts = true;
}
Hoffe jemand hat eine Idee was das Problemm sein könnte. Freue und bedanke mich jetzt schon für und auf die Antworten LG Seykool