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.
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}
Alleine durch das Einrücken bekommt man schon mal ein Gefühl für die Struktur des Codes.
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:
Code:
47 }
48 return (0);
49}
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.
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}
Lesezeichen