sensor HC-SR04

Kan je de code bekijken , voor een auto met twee sensor.
met een sensor geen probleem , met twee lukt het niet

altijd problemen bij duration = pulseIn( echoPin1, HIGH );

const int trigPin1 = 9 ;
const int echoPin1 = 10 ;
const int trigPin2 = 11 ;
const int echoPin2 = 12 ;

const int revright = 3; //REVerse motion of Left motor
const int fwdleft = 6; //ForWarD motion of Left motor
const int revleft = 5; //REVerse motion of Right motor
const int fwdright = 4;

void setup() {
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT );
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT );

Serial.begin(9600);

}

void loop() {

digitalWrite(trigPin1 , LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration = pulseIn( echoPin1, HIGH );
distance = (duration * 0.0343) / 2;

digitalWrite(trigPin2 , LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration = pulseIn( echoPin2, HIGH );
distance = (duration * 0.0343) / 2;
if (distance < 25)

{

digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(1000);

digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
delay(500);

digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(2000);

digitalWrite(3, LOW );
digitalWrite(4, LOW );
digitalWrite(5, HIGH );
digitalWrite(6, LOW );
delay(500);

digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(1000);

} else {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
}}

Hoi Dewaele, welkom.

Gelieve [code] [/code] tags te gebruiken als je code gaat plaatsen.
De code is dan beter leesbaar en zal niet ineens rare dignen gaan doen(dat is hier ook niet gebeurd), en is zo eenvoudig te kopieren naar een IDE zodat die code eens goed onderzocht kan worden.

Je geeft aan dat je bij 1 sensor geen probleem hebt, maar bij 2 wel en dat het probleem ontstaat bij "duration = pulseIn( echoPin1, HIGH );"

Klopt dit precies zo, dus bij echopin1 ?
En wat is dan het probleem dat je krijgt ?

Is er een reden dat je voor deze pins gekozen hebt, en welke Arduino variant gebruik je eigenlijk ?

Bij een Uno zijn de pinnen 10, 11 en 12 ook in gebruik voor SPI communicatie, maar daar maak je hier verder schijnbaar geen gebruik van en bovendien is pin 10 daar dan nog de meest onschuldige maar toch moet je wel altijd even kijken naar wat pins allemaal zouden kunnen doen.

Heb je al geprobeerd of de problemen aanhouden als je andere pins gebruikt ?

Hoi ,

Ik gebruik de UNO .
Als ik met 1 sensor werk werken alle pins , nu gaat pin 3,4,5,6 naar driver L298N .
Als ik met 1 sensor , de sensor op 3en 4 zet en 8,9,10 ,11 naar driver geen probleem .
Alles al gedaan met 2 sensoren , alle pinnen van 2 tot 12 niets lukt .
Als ik de code wil Verifiëren heeft ie fout duration = pulsen ( echoPin 1, HIGH ) ;

Hoi.

Uit je eerste vraag kon ik niet opmaken dat het probleem tijdens de compilatie (dat is wat er gebeurt als de IDE aan het verifiëren is) ontstaat.
De IDE geeft niet alleen aan dat er iets fout is, maar ook wat de IDE dan denkt dat er fout is.
Wanneer ik jouw tekst hierboven naar de IDE kopieer en 'm dan laat verifiëren, komt de volgende, voor mij heel duidelijke foutmelding:

sketch_dec04a.ino:34:7: error: 'duration' was not declared in this scope
'duration' was not declared in this scope

Het betekent dat je een variabele moet definieren voordat je 'm kan gaan gebruiken.
Dit heeft dus niets te maken met het aantal sensoren dat je gebruikt of wil gebruiken.
Wanneer je variabele elke iteratie (dat is als de loop opnieuw begint) gereset mag worden, dan kun je die variabele definiëren meteen voor de eerste keer dat je 'm wil gebruiken.

Als je wil dat ie altijd beschikbaar is, dus ook buiten loop, dan moet je 'm al daarvoor definiëren.
Dat heb je met de constanten (een "variabele" die niet variabel is) ook al gedaan.

Een voorbeeld van de 1e mogelijkheid is dan:

     int duration = pulseIn( echoPin1, HIGH );

Maar int is zeker niet de goede soort, want je gaat 'm later bewerken met een getal achter de komma, en een int heeft geen komma.

Hier (klik !) kun je meer informatie (in het Engels) vinden over welke soorten variabelen er beschikbaar zijn.

O ja.
De IDE stopt met compileren en geeft een foutmelding bij de eerste fout die ie tegenkomt.
Het is dus mogelijk dat je meerdere fouten moet gaan opspeuren na het oplossen van de eerste.

zorg er ook voor dat je links en rechts goed gescheiden houd dus durationlinks en durationrechts etc.
je zult best wel veel last hebben van herrie in de omgeving door de gebruikte sensoren. daar kun je weinig aan doen. (komt vanzelf goed als je verder bent.
als het werkt zoals je voor ogen had ga dan alle delays eruit werken en vervangen door millis().
daar gaat het karretje veel sneller op reageren en dan stopt het ook als je in een tijd zit.
en afhankelijk hoe het in elkaar zit, heb je een richting voor een wiel en een snelheid, als je de snelheid allebei op een PWM uitgang zet dan kun je de snelheid regelen.
allereerst even alle variabelen declareren boven de setup met float of int.

Hoi
Al vast bedankt voor de tips , zijn al wat verder maar zijn er nog niet .
Doet aĺles goed maar er werk maar 1 sensor.
Als ik de 2 sensors aansluit van pin 8 ,9 ,10 ,11 werkt enkel pin 10 en 11 .
Als ik pin 2,3,4,5 gebruik werkt enkel pin 4,5 , dus altijd sensor 2 .
Als ik sensor 2 op pin 2,3 zet en sensor 1 op 4,5 werkt sensor 2

In void loop geven we opdracht aan sensor 1 boven en sensor 2 onder , als ik sensor 1 onder en sensor 2 boven zet werkt sensor 1 .
En sensor 2 niet

Plaats je huidige code eens in een reactie hier onder, in code tags alsjeblieft.

weet niet juist wat code tags zijn .

[ int trigPin2 = 2 ;
int echoPin2 = 3 ;
int trigPin1 = 4 ;
int echoPin1 = 5 ; ]

[ int revright = 8 ; //REVerse motion of Left motor
int fwdleft = 9 ; //ForWarD motion of Left motor
int revleft = 10 ; //REVerse motion of Right motor
int fwdright = 11 ;

int duration = pulseIn( echoPin2, HIGH );
int distance = (duration * 0.0343) / 2;]

[ void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT );
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT ); ]

Serial.begin(96000);
}
[ void loop() {

digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration = pulseIn(echoPin2, HIGH);
distance = (duration * 0.0343) / 2;]

[ digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration = pulseIn(echoPin1, HIGH);
distance = (duration * 0.0343) / 2;]

if (distance < 30){

[ digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(1000); ]

[ digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(500); ]

[ digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(2000); ]

[ digitalWrite(8, LOW );
digitalWrite(9, LOW );
digitalWrite(10, LOW );
digitalWrite(11, HIGH );
delay(500); ]

[ digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(1000); ]

[ } else {
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
}} ]

in void loop neemt ie altijd het tweede , als ik sensor 1 zet stopt de wagen op sensor 1

als ik sensor 2 zet stopt de wagen op sensor 2 en werkt 1 niet

weet niet juist wat code tags zijn

Dat dus niet :wink:

Om code in je posts te plaatsen, doe je het best eerst ctrl-t in de IDE.
Daarmee word het inspringen van de code tekst netjes opgeruimd en overzichtelijk opgesteld.
Vervolgens kun je de code kopieren.

Wanneer je dan de code in de post wil zetten, type je

[code]
(Zet hier je gekopieerde code neer)
[/code]

In je post zou het er dan ongeveer zo uit komen te zien:

(Zet hier je gekopieerde code neer)

Dit en nog veel meer tips kun je terugvinden in "Hoe gebruik je het forum - LEES AANDACHTIG AUB !" (klik !), dat je bovenaan het Nederlandstalige gedeelte kunt vinden, of op de link in deze regel te klikken.
Een gedeelte van die informatie is in het Nederlands, en het andere gedeelte in het Engels.

Ik snap nu wat er fout gaat, maar ik heb moeite om dat uit je vraag te halen.
Maar als ik de code er naast leg dan snap ik het helemaal.
Ik ga nu omschrijven wat ik zie nadat ik je recentst geplaatste code in mijn IDE heb gezet en eens bekeken heb (daarom vroeg ik dus om die code).
Daarbij wijs ik naar regelnummers, zodat jij het als het goed is snel en gemakkelijk terug kunt vinden.
In de functie loop, ga je van regel 31 tot en met regel 36 een ping zenden en een echo ontvangen met een van je sensoren.
In regel 37 ga je het resultaat omrekenen naar een afstand, en kopieert dat dan naar de variabele genaamd distance.

Direct daarna ga je in regel 40 beginnen met het zenden van een ping en het ontvangen van de echo daarvan, en in regel 46 ga je het resultaat omrekenen naar een afstand, en kopieert dat dan naar de variabele genaamd distance.

Vervolgens ga je de variabele genaamd distance verwerken.
Er is maar 1 variabele genaamd distance, en die kan maar 1 waarde bevatten.
Wanneer je meer wil verwerken, dan moet je dus meer verwerken.
Anders heeft het niet veel nut om met meer dan 1 sensor te werken.

Neem ook shooter's advies ter harte, en kijk eens naar de tekst onder al mijn posts.
Die tekst staat daar met een goede reden.

  int trigPin2  = 2 ;
  int echoPin2 = 3 ;
  int trigPin1  = 4 ;
  int echoPin1 = 5 ;
 
 
  int revright = 8 ;       //REVerse motion of Left motor
  int fwdleft = 9 ;       //ForWarD motion of Left motor
  int revleft = 10 ;      //REVerse motion of Right motor
  int fwdright = 11 ;
  int duration = pulseIn( echoPin2, HIGH );
  int distance = (duration * 0.0343) / 2;


 
  void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT );
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT );
  


 
      Serial.begin(9600);
}
 
      void loop() {
      digitalWrite(trigPin2, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin2, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin2, LOW);
      duration = pulseIn(echoPin2, HIGH);
      distance = (duration * 0.0343) / 2;
      
      digitalWrite(trigPin1, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin1, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin1, LOW);
      duration = pulseIn(echoPin1, HIGH);
      distance = (duration * 0.0343) / 2;
      
          if (distance < 30){ 
  
     digitalWrite(8,  LOW);
     digitalWrite(9,  LOW);
     digitalWrite(10,  LOW);
     digitalWrite(11,  LOW);
     delay(1000);


        
     digitalWrite(8, LOW);
     digitalWrite(9, HIGH);
     digitalWrite(10, LOW);
     digitalWrite(11, HIGH);
     delay(500);
      
     digitalWrite(8, LOW); 
     digitalWrite(9, LOW);
     digitalWrite(10, LOW);
     digitalWrite(11, LOW);
     delay(2000);


  
     digitalWrite(8, LOW );
     digitalWrite(9, LOW );
     digitalWrite(10, LOW );
     digitalWrite(11, HIGH );
     delay(500);
  

     digitalWrite(8,  LOW);
     digitalWrite(9,  LOW);
     digitalWrite(10,  LOW);
     digitalWrite(11,  LOW);
    delay(1000); 
    
          } else { 
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
          }}

Zoals Mas al zei. Je overschrijft distance bij het verwerken van de 2e sensor. Maak ze distance1 en distance2 dan kom je wel verder

hoi 
heb distance 1 en distance 2 overschreven zie code 
mijn auto start niet ,sensors werken altijd .

[code ]
  int trigPin2  = 2 ;
  int echoPin2 = 3 ;
  int trigPin1  = 4 ;
  int echoPin1 = 5 ;
 
 
  int revright = 8 ;       //REVerse motion of Left motor
  int fwdleft = 9 ;       //ForWarD motion of Left motor
  int revleft = 10 ;      //REVerse motion of Right motor
  int fwdright = 11 ;
  int duration = pulseIn( echoPin2, HIGH );
  int distance   = (duration * 0.0343) / 2;


 
  void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT );
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT );
  
 
      Serial.begin(9600);
}
 
      void loop() {
      digitalWrite(trigPin2, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin2, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin2, LOW);
      duration  = pulseIn(echoPin2, HIGH);
      distance = (duration * 0.0343) / 2;
      
     if (distance ,1 < 30)
     {
        
      digitalWrite(trigPin1, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin1, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin1, LOW);
      duration = pulseIn(echoPin1, HIGH);
      distance  = duration * 0.0343 / 2;
     
          if (distance, 2 < 30)
          
  
     digitalWrite(8,  LOW);
     digitalWrite(9,  LOW);
     digitalWrite(10,  LOW);
     digitalWrite(11,  LOW);
     delay(1000);


        
     digitalWrite(8, LOW);
     digitalWrite(9, HIGH);
     digitalWrite(10, LOW);
     digitalWrite(11, HIGH);
     delay(500);
      
     digitalWrite(8, LOW); 
     digitalWrite(9, LOW);
     digitalWrite(10, LOW);
     digitalWrite(11, LOW);
     delay(2000);


  
     digitalWrite(8, LOW );
     digitalWrite(9, LOW );
     digitalWrite(10, LOW );
     digitalWrite(11, HIGH );
     delay(500);
  

     digitalWrite(8,  LOW);
     digitalWrite(9,  LOW);
     digitalWrite(10,  LOW);
     digitalWrite(11,  LOW);
     delay(1000); 
    
          } else { 
  digitalWrite(8, HIGH);
  digitalWrite(9, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
          }}

Misschien eerst ff een beginners tutorial dan mbt variabelen?

Hoi.

Mooi, de code tags lukken nu bijna helemaal goed.

Nu de code zelf nog :wink:

Een compiler zoals die in de IDE zit, leest de tekst die jij intypt, en maakt daar dan de bits van die de controller nodig heeft om te doen wat jij graag zou willen.
Dat betekent dat je heel goed moet opletten wat je intypt, anders gebeurt er iets heel anders of helemaal niets.
Maar dat geldt ook voor jou (en natuurlijk ook voor mij), en de tips die gegeven worden.
Nico heeft je precies de oplossing getoond, maar jij heb er iets heel anders van gemaakt.
Dat andere is veel ingewikkelder dan wat Nico je vertelde.

distance1 != distance
distance1 != distance,1

Het is niets anders dan wat je met de aansluitingen van je sensoren doet in de code.
Het laatste stuk van je code moet ook worden aangepast aan de nieuwe situatie, anders ge je nog steeds iets missen.
In ieder geval gaat er sowieso nog iets mis met het verwerken van de 2e sensor (want zoals het nu is zal dat nooit op de door jou bedoelde wijze gebeuren).

sorry we spreken de zelfde taal maar toch versta ik jullie niet zo goed .

OK, dat kan.

Maar nu weet ik niet wat je wel, en wat je niet begrepen hebt.
Is er iets in mijn vorige post wat je wel begrepen hebt, en iets wat je niet begrepen hebt ?
Of snap je helemaal niets van wat daar staat ?

Het probleem in je code dat je nu het best eerst aanpakt, is met deze regel beschreven:

"Het is niets anders dan wat je met de aansluitingen van je sensoren doet in de code."

Dus kijk eens in je code wat je daar doet om het verschil te maken tussen de beide sensoren.
Als je dat ook doet voor de resultaten, kom je verder.

ik weet niet wat jullie willen zeggen ?
maar ik ben met arduino begonnen als tijdverdrijf .
ben 57 jaar , en ben op zoek naar een oplossing van mijn probleem .
en als ik het door heb is er geen oplossing van mijn probleem en kan er geen twee sensoren aan 1 arduino
werken . dus zal ik maar een octosonar kopen .

Niemand heeft gezegd dat er geen oplossing voor je probleem is, want dan zou er gelogen worden.
Natuurlijk is er wel een oplossing.
Maar het is wel belangrijk dat je zelf de oplossing ook ziet, en dat is waarom er niemand de code voor je gaat schrijven / afmaken.
Want dan ga je er niet erg veel van leren en sta je met je volgende projectje met dezelfde vraag weer achter de oren te krabben.

Wat je veranderd had in je laatste code kan niet werken.
Dat gaat fout in het stukje waarin je dit doet:

(distance ,1 < 30)

Je zou het wel op die manier kunnen doen maar je maakt het jezelf alleen maar onnodig lastig en is in dit geval meer werk dan noodzakelijk.
Wat Nico je voorstelde was om dit te doen:

(distance1 < 30)

Ik hoop dat je dit verschil herkent.
Natuurlijk moet er dan ook een distance2 zijn, zoals Nico ook vertelde.

En overigens; de leeftijden van Nico en mezelf zitten helemaal niet zo ver van de jouwe, dus leeftijd heeft hier niets mee te maken.

Ik ben pas 63. Nog minstens 37 te gaan :slight_smile: :slight_smile: