Anweisung "Problem"

Hallo

mein "Problem" wird für die meisten von Euch Trivial klingen aber ich komme ohne Eure Hilfe nicht weiter.

Folgendes:
Ich benutze die New Ping Library ( seit heute) um meine Ultraschallsensoren anzusprechen alles Prima so weit so gut.
Nur komme ich aus dem Max Distance Bereich bekomme ich ne 0 auch nicht schlecht aber meine Anweisungen an die Motoren Steuerung lauten wenn der Gegenstand sich weniger bzw. kleiner als 20 cm von dir aus befindet drehe nach links , rechts usw.
Mein Problem ist dass ich immer wieder aus dem Bereich rauskomme.
Klar ich könnte dem Range vergrößern doch das packen meine Sensoren nicht und das ist auch nicht der Sinn des ganzen sondern.....
Wie schaffe ich das mein Programm mir die0 ignoriert ? bzw. Wenn ich die 0 erhalte wie sage ich ihm nee es sind vom mir aus bei einer 0 -- 50 cm ??

Ich hoffe Ihr könnt mir hier weiterhelfen.

Gruß

Chris

i; // Rückgabewert von der Ping Lib
j; // Distanz
if(i > 0 && i < j) …

Vielen Dank für die Schnelle Antwort.

Aber :wink:

j = Distanz die Distanz steht aber in der Anweisung
if ( j <20 ) {

drehe links/rechts
}

diese ist teilweise von Anweisung zu Anweisung anders zb
if ( j < 10 ){

dann stopp - rückwärts und dann nach links
}
wie löse ich das ganze hier ??
kann ich nicht den wert 0 eine feste größe zuweisen ? ( wie )

und was wenn ich schon in der if Anweisung sage dass alles was mit 0 zu tun hat nicht zu weniger als 20 bzw 10 gezählt werden soll

Gruß

Dann machste (j<10 && j>0)

Es funktioniert so nicht die Motoren laufen nur gerade aus .... dh keine Reaktion bei 20 cm bis 1 cm :frowning:

Dann poste einmal deinen ganzen Sketch. Sicher dass du nicht ggf. erst einmal die Basics durcharbeit solltest?

kann gut sein dass ich Basics durcharbeiten sollte …

hier der Test -Code

#include <NewPing.h>

#define TRIGGER_PIN  27  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     26  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 50 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.



void setup() {    
 //Setup Channel A
  pinMode(12, OUTPUT); //Initiates Motor Channel A pin
  pinMode(9, OUTPUT); //Initiates Brake Channel A pin

  //Setup Channel B
  pinMode(13, OUTPUT); //Initiates Motor Channel A pin
  pinMode(8, OUTPUT);  //Initiates Brake Channel A pin  
 
  Serial.begin(9600);   

}

void loop() {
 delay(29);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  Serial.print("Ping: ");
  Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");


 delay(100);
 //Motor A forward @ full speed
  digitalWrite(12, HIGH); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed

  //Motor B forward @ full speed
  digitalWrite(13, HIGH);  //Establishes forward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 255);    //Spins the motor on Channel B at full speed
  
  if ( uS < 20 && uS >0 ){                         //wenn der abstand groesser gleich 100 dann drehen nach rechts 
     
  //Motor A forward @ full speed
  digitalWrite(12, LOW); //Establishes forward direction of Channel A
  digitalWrite(9, LOW);   //Disengage the Brake for Channel A
  analogWrite(3, 255);   //Spins the motor on Channel A at full speed

  //Motor B backward @ half speed
  digitalWrite(13, HIGH);  //Establishes backward direction of Channel B
  digitalWrite(8, LOW);   //Disengage the Brake for Channel B
  analogWrite(11, 255);    //Spins the motor on Channel B at full speed


  delay(10);

  
  }
  else {
 

 delay(10);
  }
 }

if ( uS < 20 && uS >0 ){ //wenn der abstand groesser gleich 100 dann drehen nach rechts

???

unsigned int uS; // ist immer >= 0

Korrigiere doch bitte die Kommentare,
erzähle, was die Testausgaben Serial.print( … ) ergeben
und bau evtl. selbständig weitere Ausgaben ein, die dir sagen, was passiert …

Ja wie gesagt es handelt sich um Test Programm.
Sorry für die nicht korrigierten Kommentare!

Die Ausgaben sagen folgendes:

solange sich ein Gegenstand in einer Entfernung von 50 cm vom Sensor befindet wird der Abstand in cm ausgegeben sprich 30cm 20cm 26 cm usw.
Verlasse ich den Bereich also Entfernung ist größer als 50cm bekomme ich ne 0 cm Ausgabe (out of range )

Da ich mein Vehikel auch draußen fahren lassen will ist auch die Max Distance Erhöhung nicht sinnvoll denn dort bin ich irgend wann auch out of range

Mein Problem ist, dass ich die 0 cm nicht umgehen kann.

Wenn dein

sonar.ping()

bei out-of-range 0 zurückliefert, und du dann dasselbe wie bei > 100 cm machst (beide Motoren vorwärts),
sehe ich deine Logik eher so:

  unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
  unsigned int dist = uS / US_ROUNDTRIP_CM;  // Distanz in cm

  // Print result (0 = outside set distance range)
  Serial.print("Ping: ");
  Serial.print(dist); 
  Serial.println(" cm");
 
  if (dist == 0 || dist > 100)
  {
      // volle Kraft voraus ...
  }
  else 
  {
     // Ausweichmanöver
  }