Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro soll den Fleck meiden
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, 22: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
hallo
die schleife soll den asuro ein stück zurück fahren lassen
ich gebe das programm morgen rein
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.
Ja danke
das kann sein
habe gestern meinen robi nicht ausgeschaltet und jetzt sind die akkus leer
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
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.
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.