Voici mon croquis ou mon 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); }
Lerreur apparaît dans le second if.
Commentaires
- Syntaxe Lean C. Le code entre dans les fonctions!
Réponse
Lerreur se produit parce que vous avez 2 si instructions en dehors dune fonction. Vous pouvez les déplacer dans la fonction ping () qui corrigerait lerreur mais il semble y avoir une erreur logique avec le 2 if instructions aussi.
Si distanceCm vaut 20, les deux instructions if sexécutent lune après lautre, donc je doute que vous voyiez le voyant sallumer. Peut-être quun if / else pourrait fonctionner.
if(distanceCm < 21){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); }
Réponse
Lerreur est due au fait que vous fermez votre méthode ping avant le « if (distanceCm> = 20 ) « clausule. Cest un code correct:
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; }