Hallo,
ich habe für meine US-Kalibrierung den Code von ehenkes verwendet:
Code:
#include "asuro.h"
int abstand=0;
int main(void)
{
Init();
SerWrite("\r\n --- ultrasonic test ---",29);
Msleep(1000);
do
{
abstand = Chirp();
SerWrite("\r\n distanz in cm: ",20);
Msleep(500);
PrintInt(abstand);
}
while(1);
return 0;
}
mit diesen Messergebnissen:
Code:
distanz in cm: 0
distanz in cm: 05
distanz in cm: 14
distanz in cm: 15
distanz in cm: 15
distanz in cm: 14
distanz in cm: 05
distanz in cm: 15
distanz in cm: 15
distanz in cm: 14
distanz in cm: 15
distanz in cm: 14
distanz in cm: 15
distanz in cm: 14
distanz in cm: 15
distanz in cm: 04
distanz in cm: 0
distanz in cm: 0
distanz in cm: 0
distanz in cm: 0
distanz in cm: 0
distanz in cm: 0
distanz in cm: 0
distanz in cm: 697
distanz in cm: 698
distanz in cm: 698
distanz in cm: 698
distanz in cm: 498
distanz in cm: 597
distanz in cm: 697
distanz in cm: 697
distanz in cm: 675
distanz in cm: 697
distanz in cm: 697
distanz in cm: 671
distanz in cm: 698
distanz in cm: 713
distanz in cm: 0
distanz in cm: 14
distanz in cm: 19
distanz in cm: 19
distanz in cm: 09
distanz in cm: 19
distanz in cm: 19
distanz in cm: 19
Wenn ich nun diesen US-Code lade:
Code:
/*
Bewegung auf Basis Ultraschallortung
Dr. Erhard Henkes, Mai 2007
*/
#include "asuro.h" // incl. der Funktionen InitUltrasonics, RestoreAsuro, Chirp von "dopez" (roboternetz)
#define MAXDIFF 80 // Sehr große Sprünge zunächst ausblenden
int main(void)
{
int abstand, abstand_alt, diff, zaehler=0;
Init();
abstand = Chirp();
while(TRUE)
{
abstand_alt = abstand;
abstand = Chirp();
++zaehler;
diff = abstand - abstand_alt;
if( (abstand>15) && (abs(diff)<MAXDIFF) )
{
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(150, 150);
}
else if( (abstand>10) && (abstand<=15) && (abs(diff)<MAXDIFF) )
{
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(150, 100);
Msleep(30);
}
else
{
StatusLED(RED);
MotorDir(RWD, RWD);
MotorSpeed(100, 150);
Msleep(100);
}
if (zaehler > 400)
{
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD, RWD);
MotorSpeed(250, 200);
Msleep(10);
BackLED(OFF,OFF);
}
if (zaehler > 405)
{
StatusLED(RED);
BackLED(ON,ON);
MotorDir(RWD, RWD);
MotorSpeed(200, 250);
Msleep(10);
BackLED(OFF,OFF);
if(zaehler > 410)
zaehler = 0;
}
}
return 0;
}
Nun dreht sich der Asuro ruckartig rückwärts im Kreis. Kann mir jemand einen Tip geben?
Danke
Pinsel
Lesezeichen