PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro soll den Fleck meiden



Problem
21.11.2010, 19:09
Ich habe da eine sache die voll komisch ist


und zwar

Wenn ich über Hyper Terminal die Werte messe hat das
weiße papier den Wert von 400-440
der Schwarze Fleck den Wert von 10-30

Ich möchte, dass er den schwarzen Fleck meidet und hier das Programm:


if (data[1] > 350 ) //hab gedacht 350 ist groß genug damit er schneller reagiert oder so ist aber auch umstonst
{
MotorDir(FWD,FWD);
MotorSpeed(95,90);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(150,100);
}
for(z=0 ; z < 80 ; z++){Sleep(216);}



ich habe bei ROT schon viele Werte getestet und mit keinen war ich so richtig zufrieden. Hat jemand eine Idee was ich da reinschreiben soll


versteh ich nicht bei gewissen Werten funkt es ein par mal und dann fährt er auf den Fleck


(Fortsetzung von Asuro soll die Helligkeitswerte über Hyper terminal ausgeben )

Che Guevara
21.11.2010, 21:43
Hallo,

ich habe zwar keinen Asuro und C kann ich auch nicht, aber was mir auffällt ist:
Die for(...)-Schleife bremst meiner Meinung nach das ganze Programm aus. Warum hast du die da?
Außerdem wäre es interresant zu wissen, wie das restlichte (/ganze) Programm aussieht. Den der Rest sieht für mich eig gut aus.

Wird eig data[1] automatisch neu beschrieben, oder ist das nur hier nicht zu sehen oder hast du das vielleicht vergessen?

Gruß
Chris

Problem
21.11.2010, 22:24
hallo

die schleife soll den asuro ein stück zurück fahren lassen

ich gebe das programm morgen rein

Arkon
22.11.2010, 07:32
Die for-Schleife wird bei jedem Durchlauf ausgeführt. Also auch im Vorwärtsgang. Wenn diese jetzt erreicht wird kurz bevor deine Sensoren den Fleck erfassen fährt er ein Stück drauf.

Steck deine for-Schleife doch mal mit in die else-Anweisung.

Problem
22.11.2010, 17:03
Ja danke
das kann sein
habe gestern meinen robi nicht ausgeschaltet und jetzt sind die akkus leer

Problem
22.11.2010, 20:09
Wenn ich die schleife nach for stelle färht er immer RWD




#include "asuro.h"
#include "stdlib.h"

int main(void)
{
unsigned int data[2];
char data0[5], data1[5];
int t=0,z=0;


Init();
StatusLED (GREEN);
FrontLED (ON);


while (1)
{
LineData (data);

itoa (data[0], data0, 5);
itoa (data[1], data1, 5);

SerWrite (data0, 4);
SerWrite (" links\n\r", 8); //Damit sehe ich am hyper T wie groß die werte sind

SerWrite (data1, 4);
SerWrite (" rechts\n\r", 9);

for (t=0; t< 50; t++)
{
Sleep (72);
}

if (data[1] > 50 )
{MotorDir(FWD,FWD);
MotorSpeed(105,100);}
else for(z=0 ; z < 80 ; z++){Sleep(216);}
{MotorDir(RWD,RWD);
MotorSpeed(250,200);}




}
return 0;
}



Es Funkt nicht irgendwie Der will mich verarschen glaub ich



mfg

Arkon
22.11.2010, 20:40
Auch hier wird die Schleife mit der sleep-Funktion jedes Mal aufgerufen. Was ich sagen wollte ist, dass du die for-Schleife mit der Sleepfunktion in den else-Block setzt



if (data[1] > 50 )
{
MotorDir(FWD,FWD);
MotorSpeed(105,100);
}
else
{
MotorDir(RWD,RWD);
MotorSpeed(250,200);
for (t=0; t< 50; t++)
{
Sleep (72);
}
}

So fragt er den Wert ab. Wenn er über 50 liegt (kein Fleck) fährt er vorwärts. Sollte der Wert <50 liegen schaltet er die Motoren in den Rückwärtsgang. Die for-Schleife mit der sleep-Funktion hält den Rückwärtsgang einen Moment lang "fest". Ohne die Schleife würde der Asuro, sobald er vom Fleck runter ist, wieder sofort wieder in den Vorwärtsgang schalten.

Problem
23.11.2010, 12:39
Ohne die Schleife würde der Asuro, sobald er vom Fleck runter ist, wieder sofort wieder in den Vorwärtsgang schalten.


Hab eich auch schon probiert


Danke für die hilfe ich gebe s mal ein und schau was er macht


mfg