Instellen van periode vr de distance sensor

Hallo

Kan iemand me met het volgende probleem helpen: mijn arduino robot (gebasseerd op: http://makezine.com/projects/building-a-simple-arduino-robot/) heeft het probleem dat deze niet breed genoeg kan kijken waardoor hij door zijn wiel kan vastzitten in bv. De poot van een stoel. Nu willen we dit instellen dat als hij een bepaalde tijd (bv. 10 seconden) een distance ziet die kleiner is dan een afstand (bv. 90 cm) dat hij dan achteruit rijdt. Zodat hij in feite doorheeft dat hij vastzit.
Kan iemand mij hiermee helpen? Ik ben namelijk nog redelijk nieuw in de arduino.

Alvast bedankt!

[tt]#define trigPin 12
#define echoPin 13
#include <Servo.h>

Servo myservo;
Servo myservo2;

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  myservo.attach(9);
  myservo2.attach(6);

}

void loop() {

  int duration, distance, pos = 0, i;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");
  if (distance < 10)
  {
    myservo.write(360);
    myservo2.write(360);
    delay(620);
  }
  else {
    myservo.write(360);
    myservo2.write(-360);
  }
}

[/tt]

Je kunt grbruik maken van twee ‘static’ variabelen om de laatst gemeten afstand en de laatste tijd dat de afstand veranderde bij te houden.

void loop() {
/***/
  // remember last measured distance
  static int lastdistance = 0;
  // remember time when distance last changed
  static unsigned long starttime = millis();
/***/


  int duration, distance, pos = 0, i;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");

/***/
  // if distance has changed
  if (distance != lastdistance)
  {
    // restart the timing
    starttime = millis();
    // remember last measured distance
    lastdistance = distance;
  }
  // if starttime was not reset in 10 seconds
  if(millis() - starttime >= 10000)
  {
    // reverse here
  }
/***/


  if (distance < 10)
  {
    myservo.write(360);
    myservo2.write(360);
    delay(620);
  }
  else {
    myservo.write(360);
    myservo2.write(-360);
  }
}

Niet getest, niet gecompileerd.

Gebruik de volgende keer alstublieft code tags; stukje makkelijker om te copieren.

sterretje:
Je kunt grbruik maken van twee ‘static’ variabelen om de laatst gemeten afstand en de laatste tijd dat de afstand veranderde bij te houden.

void loop() {

//
  // remember last measured distance
  static int lastdistance = 0;
  // remember time when distance last changed
  static unsigned long starttime = millis();
/
/

int duration, distance, pos = 0, i;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration / 2) / 29.1;
  Serial.print(distance);
  Serial.println(" cm");

//
  // if distance has changed
  if (distance != lastdistance)
  {
    // restart the timing
    starttime = millis();
    // remember last measured distance
    lastdistance = distance;
  }
  // if starttime was not reset in 10 seconds
  if(millis() - starttime >= 10000)
  {
    // reverse here
  }
/
/

if (distance < 10)
  {
    myservo.write(360);
    myservo2.write(360);
    delay(620);
  }
  else {
    myservo.write(360);
    myservo2.write(-360);
  }
}



Niet getest, niet gecompileerd.


Gebruik de volgende keer alstublieft code tags; stukje makkelijker om te copieren.

Dankuwel! Moet ik ergens nog getallen invullen?
Zegt hij nu bij static dat de lastdistance 0 is dat hij van richting moet veranderen? Trouwens de meetresultaten kunnen soms lichtjes verschillen als hij vast zit, daarom zou ik eerder opteren voor als de lastdistance kleiner is dan een bepaald getal?

Mvg
Stijn

ja dat kan zeker je hebt nu dus != staan en dat wordt dan ABS (distance-lastdistance ) >3