Ich habe nicht viel mit dem Asuro gemacht, und es ist schon etwas her.
Aber ich habe Deinen Code erst mal etwas besser lesbar formatiert.
Über fähig und undfähig sollte man nicht entscheiden, wenn man grade erst anfängt etwas zu lernen.
Wenn nach längerer Zeit, intensiven Befassen mit einem Thema keinerlei Verbesserung der Fähigkeiten messbar ist, dann kann man von Unfähigkeit sprechen.
Momentan von, noch unwissend und noch unerfahren.
Da es eine Referenz gibt, kann man dort nachlesen was die Befehle machen, das ist immer ganz hilfreich um sich über die Möglichkeiten die man hat zu informieren.
http://www.asurowiki.de/pmwiki/pub/html/asuro_8h.html
Die folgenden Asuro spezifischen Befehle nutzt Du:
FrontLED (unsigned char status)
Steuert die vorne, nach unten zeigende, Front-LED.
LineData (unsigned int *data)
Liest die Daten der beiden Linienverfolgungssensoren.
Die Linien-Beleuchtungs-LED kann sowohl an- als auch ausgeschaltet sein.
MotorDir (unsigned char left_dir, unsigned char right_dir)
Steuert die Drehrichtung der Motoren.
MotorSpeed (unsigned char left_speed, unsigned char right_speed)
Steuert die Geschwindigkeit der Motoren.
Msleep (int ms)
Wartefunktion in ms.Alleine durch das Einrücken bekommt man schon mal ein Gefühl für die Struktur des Codes.Code:01#include <avr/io.h> 02#include "asuro.h" 03 04int main(void) 05{ 06 Init(); 07 unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander 08 FrontLED(ON); 09 10 Msleep(1000); 11 while (1) 12 { 13 LineData(data); 14 if ((data[0]<700) && (data [1]<700)) 15 { 16 MotorDir(FWD,FWD); //beide Motoren vorwärts 17 MotorSpeed(85,0); //linker Motor speed 85 18 Msleep(160); 19 MotorSpeed(0,0); //beide Motoren halt 20 Msleep(3000); 21 MotorDir(RWD,RWD); //beide Motoren rückwärts 22 MotorSpeed(85,0); // linker Motor speed 85 23 Msleep(160); 24 MotorSpeed(0,0); //beide Motoren halt 25 } 26 if ((data[0]>700) && (data[1]>700)) 27 { 28 MotorDir(FWD,FWD); //beide Motoren vorwärts 29 MotorSpeed(0,0); //beide Motoren halt 30 } 31 if ((data[0]>700) && (data[1]<700)) 32 { 33 MotorDir(RWD,RWD); //beide Motoren rückwärts 34 MotorSpeed(85,0); // linker Motor speed 85 35 Msleep(160); 36 MotorSpeed(0,0); //beide Motoren halt 37 Msleep(3000); 38 MotorDir(FWD,FWD); //beide Motoren vorwärts 39 MotorSpeed(85,0); // linker Motor speed 85 44 Msleep(160); 41 MotorSpeed(0,0); //beide Motoren halt 42 } 43 MotorDir(FWD,FWD); !!!!!!!!!!!! //beide Motoren vorwärts 44 MotorSpeed(0,100); // rechter Motor speed 100 45 Msleep(480); 46 MotorSpeed(0,0); //beide Motoren halt 47 } 48}
Was einem sofort ins Auge springt, sind in Zeile 14, 26 und 32 die IF Anweisungen die direkt aufeinander folgen.
Man könnte jetzt in Zeile 26 und 31 aus IF ein ELESE IF machen.
Dann hat jedes Asuro Codebeispiel das ich habe ein return (0); nach der while (1); Schleife.
Also:
Das hat jetz noch nichts mit der Funktion Deines Codes zu tun, hilft aber sauberen Code zu produzieren, der Dir nicht Später mal mit unerwarteten Fehlern um die Ohren fliegt.Code:47 } 48 return (0); 49}
Soweit ich das sehe nimmst Du die FrontLed als Lichtquelle und die beiden Linienfolger Sensoren LineData um mit den IF Konstruken 3 Zustände zu unterscheiden.
Dort findet dann eine reine Zeitsteuerung des linken Motors statt.
Immer 0,16 Sekunden Fahren mit rund 33% der möglichen Motorgeschwindigkeit (85 von 255) und 3 Sekunden Stillstand.
Am Ende lässt Du den rechten Motor für 0,48 Sekunden mit rund 39% der möglichen Motorgeschwindigkeit (100 von 255) laufen.
Der rechte Motor wird nun außerhalb des IF Konstrukts angesteuert. Also unabhängig davon was für Werte LineData hat.
Ergänz Doch mal Deinen Coder zuert um das return (0);
und dann definier doch mal ein Motor Halt am Anfang der WHILE Schleife, damit die Motoren erst mal sicher gestoppt sind.
Code:. . . 11 while (1) 12 { 13 MotorDir(FWD,FWD); 14 MotorSpeed(0,0); //beide Motoren halt 15 LineData(data); . . . 45 MotorDir(FWD,FWD); !!!!!!!!!!!! //beide Motoren vorwärts 46 MotorSpeed(0,100); // rechter Motor speed 100 47 Msleep(480); 48 MotorSpeed(0,0); //beide Motoren halt 49 } 50 return (0); 51}







Zitieren


Lesezeichen