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