HC-SR04 en 3 leds

algemene C code
Berichten: 3
Geregistreerd: 16 Feb 2021, 21:27

HC-SR04 en 3 leds

Berichtdoor estorica » 16 Feb 2021, 21:36

Hoi,

Ik ben sinds een paar weken bezig met Arduino.
Erg leuk maar het programeren vindt ik nogal lastig.

Momenteel ben ik bezig met leds die aan/uit gaan bij bepaalde afstanden.
Wat ik ook probeer de groene led gaat op het juiste moment aan bij 23cm maar niet uit bij 27cm.
Voor de rest lijkt de code te doen wat ik graag wil.

Kan iemand mij hier mee helpen?

Vast bedankt
Erik

Code:

#define trigPin 13

#define echoPin 12

#define ledblue 11

#define ledyellow 10

#define ledgreen 9

void setup()
{ Serial.begin (115200);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(ledblue, OUTPUT);

pinMode(ledyellow, OUTPUT);

pinMode(ledgreen, OUTPUT);

}

void loop()

{ long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration/2) / 29.1;

if (distance < 10)

{ digitalWrite(ledblue,HIGH);

}

else {
digitalWrite(ledblue,LOW);
}

if (distance > 10)

{ digitalWrite(ledyellow,HIGH);

}

else {
digitalWrite(ledyellow,LOW);
}

if (distance >=23) {

digitalWrite(ledgreen,HIGH);
}

if (distance <=27) {

digitalWrite(ledgreen,HIGH);
}

if ((distance <=23) && (distance >=27)) {

digitalWrite(ledgreen,LOW);
}



else {
digitalWrite(ledgreen,LOW);
}

Serial.print(distance);

Serial.println(" cm");

delay(500);

}

Advertisement

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

Re: HC-SR04 en 3 leds

Berichtdoor shooter » 17 Feb 2021, 22:43

je voorwaarden in banden zetten zoals >=23 &&< 27 is groen
dan >= 27 is geel
let op waar je = zet en waar niet.
en pulsein blokkeert de processor voor 1000 milliseconde max dus kijk hoe je dat kunt verminderen.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 16 Feb 2021, 21:27

Re: HC-SR04 en 3 leds

Berichtdoor estorica » 20 Feb 2021, 21:52

Bedankt Shooter,
Ik heb nog even moeten puzzelen maar nu werkt hij inderdaad.
Hier moest 2x distance staan, dat had ik nog niet begrepen. if (distance >=10 && distance < 27)

Ik ben er allemaal nog kort mee bezig dus je tip m.b.t. het pulssein begrijp ik eerlijk gezegd niet.
Als je me daar nog wat meer over kunt vertellen dan heel graag.

Vriendelijke groet
Erik

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

Re: HC-SR04 en 3 leds

Berichtdoor shooter » 22 Feb 2021, 16:02

in de software staat een pulsein, en die wacht net zolang (standaard 1 seconde) op een pulse, en dat is vrij lang, maar dat kun je instellen kijk in de reference hoe dat gaat.
en die distance 2x is een heel normale denkfout die iedereen maakt. dat komt allemaal vanzelf goed hoor.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 16 Feb 2021, 21:27

Re: HC-SR04 en 3 leds

Berichtdoor estorica » 22 Feb 2021, 23:54

Beste Shooter,

Ik ben vanavond aan de slag gegaan met je tip over de pulsln.

De reference is me niet helemaal duidelijk, zal nog wel een beginnersprobleem zijn.

Als ik:
duration = pulseIn(echoPin, HIGH);

verander in:
duration = pulseIn(echoPin, HIGH, 10000UL);

dan lijkt het voor mijn gevoel vrij snel te werken maar volgens mij heb ik hem dan niet verkort. (Of begrijp ik dat verkeerd?).
als ik er 100000UL van maak zie ik zo geen verschil.
als ik er 1000UL van maak dan brand alleen nog de blauwe led!
als ik er 1000000UL van maak dan begint het aan meerder kanten te haperen.

Ik zie vooral vertraging als de yellow led heen of terug moet schakelen, dan gaat trager als tussen blue en green.
overigens zie ik vanavond ook dat de serial monitor geen goede waarden afgeeft vanaf de yellow led.
Dat is me helemaal een raadsel

Mocht je nog tips hebben heel graag.
Dit maakt het programmeren voor mij nog een stuk leuker dan ik het al vond.

Vriendelijke groet
Erik

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

Re: HC-SR04 en 3 leds

Berichtdoor shooter » 24 Feb 2021, 15:35

dat getal 1000 is in microseconden, maak er maar eens 100 van dan zie je snel wat er gebeurt. en als je er een groot getal van maakt loop je tegen de grens aan van wat een getal kan zijn. heerlijk al die dingen waar je een keer tegen aanloopt, dan wordt je bewust van waar je mee bezig bent.
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten