Dies ist meine Skizze oder mein 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); }
Der Fehler wird im zweiten if angezeigt.
Kommentare
- Lean C-Syntax. Code geht in Funktionen!
Antwort
Der Fehler tritt auf, weil Sie haben 2 if Anweisungen außerhalb einer Funktion. Sie könnten sie in die Funktion ping () verschieben, die den Fehler beheben würde, aber es scheint einen logischen Fehler mit der 2 zu geben if-Anweisungen ebenfalls.
Wenn distanceCm 20 ist, werden beide if-Anweisungen direkt nacheinander ausgeführt. Daher bezweifle ich, dass die LED aufleuchtet. Möglicherweise funktioniert ein if / else .
if(distanceCm < 21){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); }
Antwort
Der Fehler liegt darin, dass Sie Ihre Ping-Methode vor dem „if (distanceCm> = 20“ schließen ) „clausule. Dies ist ein korrekter 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; }