Dit is mijn schets of code:

const int EchoPin = 5; const int TriggerPin = 6; const int LedPin = 13; void setup() { Serial.begin(9600); pinMode(LedPin, OUTPUT); pinMode(TriggerPin, OUTPUT); pinMode(EchoPin, INPUT); pinMode(13, OUTPUT); } void loop() { int cm = ping(TriggerPin, EchoPin); Serial.print("Distancia: "); Serial.println(cm); delay(1000); } int ping(int TriggerPin, int EchoPin) { long duration, distanceCm; digitalWrite(TriggerPin, LOW); delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); delayMicroseconds(10); digitalWrite(TriggerPin, LOW); duration = pulseIn(EchoPin, HIGH); distanceCm = duration * 10 / 292/ 2; return distanceCm; } if (distanceCm <= 20) { digitalWrite(13, HIGH); } if (distanceCm >= 20) { digitalWrite(13, LOW); } 

De fout verschijnt in de tweede if.

Opmerkingen

  • Lean C-syntaxis. Code gaat in functies!

Antwoord

De fout treedt op omdat u 2 if instructies buiten een functie. Je zou ze kunnen verplaatsen naar de ping () -functie die de fout zou herstellen, maar er lijkt een logische fout te zijn met de 2 if-statements.

If distanceCm is 20, beide als statements de een na de ander worden uitgevoerd, dus ik betwijfel of je “de LED ziet gaan branden. Misschien zou een if / else kunnen werken.

if(distanceCm < 21){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); } 

Antwoord

Fout is omdat u uw ping-methode sluit vóór de “if (distanceCm> = 20 ) “clausule. Dit is een correcte code:

const int EchoPin = 5; const int TriggerPin = 6; const int LedPin = 13; void setup() { Serial.begin(9600); pinMode(LedPin, OUTPUT); pinMode(TriggerPin, OUTPUT); pinMode(EchoPin, INPUT); pinMode(13, OUTPUT); } void loop() { int cm = ping(TriggerPin, EchoPin); Serial.print("Distancia: "); Serial.println(cm); delay(1000); } int ping(int TriggerPin, int EchoPin) { long duration, distanceCm; digitalWrite(TriggerPin, LOW); delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); delayMicroseconds(10); digitalWrite(TriggerPin, LOW); duration = pulseIn(EchoPin, HIGH); distanceCm = duration * 10 / 292/ 2; if (distanceCm <= 20) { digitalWrite(13, HIGH); } if (distanceCm >= 20) { digitalWrite(13, LOW); } return distanceCm; } 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *