Ошибка: 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);
}
Код не закончен, но мне нужно проверить дверной сервопривод с помощью пульта, а я не могу. Пожалуйста, помогите
@Kassandra, 👍-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
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
- Отображение двоичных данных на светодиодах
- Корпус кнопки и переключателя
Вам не нужна точка с запятой в определении. Удалите их и повторите попытку, пожалуйста, @chrisl