To jest mój szkic lub kod:

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); } 

Błąd pojawia się w drugim jeżeli.

Komentarze

  • Lean C składnia. Kod trafia do funkcji!

Odpowiedź

Błąd występuje, ponieważ masz 2 jeśli instrukcje poza funkcją. Możesz przenieść je do funkcji ping () , która naprawi błąd, ale wydaje się, że wystąpił błąd logiczny w 2 if również.

Jeśli distanceCm wynosi 20, obie instrukcje są wykonywane jedna po drugiej, więc wątpię, czy „zobaczysz zapaloną diodę LED. Być może if / else może zadziałać.

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

Odpowiedź

Błąd wynika z tego, że zamykasz metodę ping przed „if (distanceCm> = 20 ) „klauzula. To jest poprawny kod:

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; } 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *