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

#include <IRremote.h>
#include <Servo.h>

#define CSPOWER 0xFDC03F;
#define CSPMODE 0xFD08F7;
#define CSSMODE 0xFD8877;
#define CSTVVIDEO 0xFDE21D;
#define CSUNO 0xFD00FF;
#define CSDOS 0xFD807F;
#define CSTRES 0xFD40BF;
#define CSCUATRO 0xFD20DF;
#define CSCINCO 0xFDA05F;
#define CSSEIS 0xFD609F;
#define CSSIETE 0xFD10EF;
#define CSOCHO 0xFD906F;
#define CSNUEVE 0xFD50AF;
#define CSCERO 0xFDB04F;
#define CSCHSCAN 0xFDEA15;
#define CSSLEEP 0xFD9867;
#define CSADDDEL 0xFD38C7; 
#define CSSURROUND 0xFD3AC5;
#define CSZOOM 0xFD7887;
#define CSSURF 0xFD827D;
#define CSMTS 0xFDC837;
#define CSPSIZE 0xFD22DD; 
#define CSTURBO 0xFD12ED;
#define CSDISPLAY 0xFD629D;
#define CSMUTE 0xFDA857;
#define CSMENU 0xFDE817;
#define CSCHMAS 0xFD28D7;
#define CSCHMENOS 0xFD18E7;
#define CSVOLMAS 0xFD6897;
#define CSVOLMENOS 0xFD58A7;
#define CSPRECH 0x3398220998;

Servo servo1;

int PINSERVO = 2;
int PULSOMIN = 800;
int PULSOMAX = 1500;

int Elevador1 = 1;
int Elevador2 = 2;
int LuzSala = 3;
int PuertaCerrada = 4;
int PuertaAbierta = 5;
int Lampara1 = 6;
int Lampara2 = 7;

int SENSOR = 11;
IRrecv irrecv(SENSOR);
decode_results codigo;

void setup() {
  Serial.begin(9600); 
  irrecv.enableIRIn();
  
  pinMode(LuzSala,OUTPUT);

  servo1.attach(PINSERVO, PULSOMIN, PULSOMAX);
}




void loop() {
  
  if (irrecv.decode(&codigo)) {
    Serial.println(codigo.value);
    irrecv.resume();
  }
  delay (100);


  }

 if (codigo.value == CSPOWER) {
   SerPuerta.write(5); 
   digitalWrite(PuertaCerrada, HIGH);
   digitalWrite(PuertaAbierta, LOW);
   digitalWrite(Lampara1, LOW);
   digitalWrite(Lampara2, LOW);
   digitalWrite(Elevador1, LOW);
   digitalWrite(Elevador2, LOW);
   digitalWrite(LuzSala, LOW);
   SerPuerta.write(5); 
  }
  
  if (codigo.value == CSVOLMAS) {
   SerPuerta.write(5); 
   digitalWrite(PuertaCerrada, HIGH);
   digitalWrite(PuertaAbierta, LOW);
  }
  
   ***if (codigo.value == CSVOLMENOS) {***
   SerPuerta.write(150); 
   digitalWrite(PuertaAbierta, HIGH);
   digitalWrite(PuertaCerrada, LOW);
  }

  int FotorSala = analogRead(A1);
  Serial.println(FotorSala);
  {
  if(FotorSala > 1000)
  digitalWrite(LuzSala, HIGH); 
  }
  
  {
  if(FotorSala < 300)
  digitalWrite(LuzSala, LOW); 
  }

Код не закончен, но мне нужно проверить дверной сервопривод с помощью пульта, а я не могу. Пожалуйста, помогите

, 👍-1

Обсуждение

Вам не нужна точка с запятой в определении. Удалите их и повторите попытку, пожалуйста, @chrisl


1 ответ


1

В сообщении об ошибке был бы указан номер строки, который было бы полезно опубликовать. Кроме того, это поможет вам узнать, где искать.

Я предполагаю, что ошибка здесь:

void loop() {
  
  if (irrecv.decode(&codigo)) {
    Serial.println(codigo.value);
    irrecv.resume();
  }
  delay (100);


  }  // <-- ЭТО ЗАВЕРШАЕТ ФУНКЦИЮ ЦИКЛ

Теперь у вас есть код вне какой-либо функции, поэтому, вероятно, "}" должно быть не там, а в другом месте.

Лично я всегда комментирую закрывающие фигурные скобки, чтобы было понятно, к чему они относятся, например:

void loop() {
  
  if (irrecv.decode(&codigo)) {
    Serial.println(codigo.value);
    irrecv.resume();
  }  // конец, если
  delay (100);


  }  // конец цикла

И в дополнение к тому, что Крисл сказал в комментарии, точки с запятой в определениях неверны.

Выполните одно из следующих действий:

#define CSPOWER 0xFDC03F
#define CSPMODE 0xFD08F7
#define CSSMODE 0xFD8877
#define CSTVVIDEO 0xFDE21D

Или:

const unsigned long CSPOWER = 0xFDC03F;
const unsigned long CSPMODE = 0xFD08F7;
const unsigned long CSSMODE = 0xFD8877;
const unsigned long CSTVVIDEO = 0xFDE21D;
,

И почему для определения не нужна точка с запятой? Поскольку он обрабатывается препроцессором и представляет собой простую замену текста, поэтому, если у вас есть if (sth == CSPOWER) {, он будет заменен на if (sth == 0xFDC03F;) {, и это недопустимый синтаксис. Для определений с параметрами это еще хуже: #define SQR(a) a*a , а с его использованием, например: SQR(i + 15) приводит к i + 15 * i + 15 . Первый урок с определениями обычно заключает все в фигурные скобки: #define SQR(a) (a)*(a) и так далее :D, @KIIV