Ошибка: expected unqualified-id before 'if'

Это мой эскиз или код:

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

Ошибка появляется во втором if.

, 👍0

Обсуждение

Лин-синтаксис C. *Код находится в функциях!*, @Majenko


2 ответа


1

Ошибка возникает из-за того, что у вас есть 2 оператора if вне функции. Вы можете переместить их в функцию ping(), что исправит ошибку, но, похоже, есть логическая ошибка и с 2 операторами if.

Если distanceCm равно 20, оба оператора if выполняются один за другим, поэтому я сомневаюсь, что вы увидите включение светодиода. Возможно, if/else сработает.

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

1

Ошибка возникает из-за того, что вы закрываете свой метод ping перед предложением "if (distanceCm >= 20)". Это правильный код:

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