HC-SR04 Probleem.

Arduino specifieke Software
Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

HC-SR04 Probleem.

Berichtdoor maxgrin » 25 Dec 2016, 18:25

Hoi,
Dit is mijn derde forum post over mijn robot project. Nu loop ik weer ergens tegen aan wat ik niet opgelost.
Ik heb dus een HC-SR04 afstandsmeter om ervoor te zorgen dat hij nergens tegenaan botst. Maar soms blijft hij toch draaien terwijl hij vooruit moet. heb al een aantal dingen geprobeerd maar ik krijg het niet opgelost. Ik gebruik een Arduino Mega. Mijn code:
Code: Alles selecteren
long duration, distance;
int mode;
#define Green 24
#define Red 25
#define trigPin 22
#define echoPin 23
#include <AFMotor.h>
#include <IRremote.h>
int IRpin = 44;
int PotPin = A8;
IRrecv irrecv(IRpin);
decode_results results;
AF_DCMotor motorR(1);
AF_DCMotor motorL(2);

void setup() {
  irrecv.enableIRIn();
  Serial.begin(9600);
  motorR.setSpeed(100);
  motorL.setSpeed(103);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(Green, OUTPUT);
  pinMode(Red, OUTPUT);
pinMode(PotPin, INPUT);
}

void loop() {
checkMode();
}

void Forward() {
  motorR.run(FORWARD);
  motorL.run(FORWARD);
}
void Backward() {
  motorR.run(BACKWARD);
  motorL.run(BACKWARD);
  delay(250);
}

void Right() {
  motorL.run(BACKWARD);
  motorR.run(FORWARD);
  delay(375);
}

void Left() {
  motorL.run(FORWARD);
  motorR.run(BACKWARD);
  delay(375);
}
void Brake() {
  motorR.run(RELEASE);
  motorL.run(RELEASE);
  delay(100);
}

void auto_mode() {
 
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  delay(1);
  distance = (duration / 2) / 29.1;
  if (distance <= 25) {
    Brake();
    digitalWrite(Green, LOW);
    digitalWrite(Red, HIGH);
    Backward();
    Brake();
    Right();
  }
  else if(distance >=26) {
    digitalWrite(Red, LOW);
    digitalWrite(Green, HIGH);
    Forward();

  }
}

void manual_mode() {
  if (irrecv.decode(&results)) {
   
    Serial.print("irCode: ");           

    Serial.print(results.value, HEX);

    Serial.print(",  bits: ");           

    Serial.println(results.bits);

    irrecv.resume(); 
  }
delay(10);
  if (results.value == 0xC796DFC || results.value == 0xB10C7C8B) {
    Forward();
  } else if (results.value == 0xDB510F56) {
    Backward();
  }
  else if(results.value == 0x4B12992B|| results.value == 0x7E16B93A){
   
  motorL.run(BACKWARD);
  motorR.run(FORWARD);
    delay(375);
    results.value == 0xC796DFC;
    delay(10);
  }
  else if(results.value == 0x1BE8C80D || results.value == 0x8ECEA106 || results.value == 0xC2A82EEA
){
 
    motorR.run(BACKWARD);
  motorL.run(FORWARD);
    delay(375);
results.value == 0xC796DFC;
delay(10);
  } 
   else if(results.value == 0xEFF8316D|| results.value == 0xF4704794){
   Brake();
  }
  else if(results.value == 0x37FF1DB2 || results.value == 0xE5EDF8D7){
   Right();
}
}

void checkMode(){
  mode = analogRead(PotPin);
  if(mode <= 512){
    manual_mode();
  }
  else if(mode >= 513){
    auto_mode();
    Serial.println(distance);
  }
 
 
}

Op de plek void auto_mode() zit de HC-SR04.

Advertisement

Berichten: 4079
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: HC-SR04 Probleem.

Berichtdoor shooter » 26 Dec 2016, 22:09

het lijkt allemaal goed, welke distances zie je verschijnen, want dat is de enige if die er zit.
paul deelen
shooter@home.nl

Berichten: 11
Geregistreerd: 23 Dec 2016, 14:35

Re: HC-SR04 Probleem.

Berichtdoor maxgrin » 26 Dec 2016, 22:11

Soms kreeg ik 2000+. Ik heb het opgelost met de NewPing library en dan de ping median functie. Hij neemt nu 5 metingen en gooit als het ware de afstanden die nooit juist kunnen zijn eruit.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: evupakijojil, ezeqeminozap en 30 gasten