Acesta este schița sau codul meu:
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); }
Eroarea apare în al doilea if.
Comentarii
- Sintaxa Lean C. Codul intră în funcții!
Răspuns
Eroarea apare deoarece aveți 2 dacă instrucțiuni în afara unei funcții. Le-ați putea muta în funcția ping () care ar rezolva eroarea, dar pare să existe o eroare logică cu 2 instrucțiunile if.
Dacă distanceCm este 20, ambele dacă instrucțiunile se execută una după alta, așa că mă îndoiesc că veți vedea LED-ul aprins. Poate că un dacă / else ar putea funcționa.
if(distanceCm < 21){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); }
Răspuns
Eroarea se datorează faptului că închideți metoda de ping înainte de „if (distanceCm> = 20 ) „clausule. Acesta este un cod corect:
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; }