PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauche hilfe für projekt für US Asuro



marth
23.01.2010, 05:34
guten tag liebe leute ich brauche dringend hilfe .

ich habe zur zeit ein asuro projekt .
mein roboter soll folgendes machen .
ultraschall so in 10 cm ein hinderniss erkennen soll rückwärts fahren und dann 90grad nach links biegen 5cm fahren und dann 90grad nach rechts biegen und dann gucken ob da ein hinderniss ist wenn nicht dann grade aus weiter fahren .
also kurz gesagt er muss um diesen hinderniss drum rum fahren . ich habe zwar diesen code hier.

[/code]

#include "asuro.h"
#include "ultrasonic.h"

int i,j,abstand=200; // Variablen deklarieren




int main(void) // Hier beginnt das Programm
{
Init();
while (1) //Endlosschleife
{
abstand = Chirp();
SerPrint("\r\n distanz in cm: ");
PrintInt(abstand);

while (abstand>10)
{
MotorDir(FWD,FWD);
MotorSpeed(180,180);
StatusLED(GREEN);
abstand = Chirp();
SerPrint("\r\n distanz in cm: ");
PrintInt(abstand);

} // Bei Kollision:

for (j=0;j<100;j++) // kurz warten
{
MotorDir(FREE,FREE);
Sleep(255);
}

for (i=0;i<200;i++)
{
MotorDir(RWD,RWD); // rückwärts drehen
MotorSpeed(120,0);
BackLED(ON,ON);
StatusLED(RED);
Sleep(255);
}
for (j=0;j<100;j++) // kurz warten
{
MotorDir(FREE,FREE);
Sleep(255);
}

}

}




aber mit dem hier fährt der nur nach rechts und weiter grade aus bis ein hinderniss kommt .

ich hoffe ihr habt erstens verstanden was ich sage und zweiten hoffe ich das ihr mir den quellcode sagen könnt . das wäre eine grosse hilfe .
danke voraus

Arexx-Henk
24.01.2010, 10:29
Hallo,

vielleicht geht's so: (etwas cryptisch...)



while(1){

abstand messen

if ( abstand > 10 ) {

forwarts fahren

}

else {

ruckwarts

warte

90 grad links

5 cm forwarts fahren

90 grad rechts

}

}


Gruss,

Arexx-Henk

Valen
24.01.2010, 11:37
Mart:

Dein program sendet die abstand-werten doch zu deinem rechner. Was hat er zuruck gemeldet? Einiger extra SerWrite kommandos vor und nach das "kurz warten" und ''rückwärts drehen" wird das weiter klar machen welcher program stellen er genau durchlaufen hat.

Ausserdem, MotorDir(FREE,FREE) ist kein bremsen. Free meinst das kein strom fliesst durch den motor. Ähnlich die reibund wie beim oder (MotorSpeed(0,0) ) Er wird dadurch nur weiterfahren und bremsen durch getriebe reibung und so. Richtig bremsen geht mit MotorDir(BREAK,BREAK).

ffmboy
25.01.2010, 16:53
ich hab da so ein ähnliches problem wie marth

ich hab bemerkt, dass der erste abstand der gesendet wird "0" ist egal ob etwas vor dem sensoren ist oder nicht.
beim USTest programm liefert das hyperterminal zb in so einer reiehfolge die werte: (halte beim einschalten etwas vor den sensor und bewege es vor und zurück sobald ich das hinderniss komplett entferne stoppt der asuro das senden kommt mir vor als ob er sich aufhängt)???
entfernung... : 0
" : 13
" : 10
" : 15
" : 8
wie erwähnt sobald der gegenstand entfernt wird wird nichts mehr angezeigt!

dadurch führt er dann beim US-Programm bei mir zuerst die drehung durch anstatt erstmal geradeaus zu fahren!
wie krieg ich das denn hin das der sensor von anfang an die richtige entfernung sendet?