не могу найти ошибку в моем коде
Я работаю над проектом, который включает использование двигателей и поплавкового выключателя. Я получаю сообщение об ошибке, которое ожидало «}» в конце ввода. Я не могу найти, где это исправить. Кстати, я ставлю поплавковый выключатель в начале кода (который сверху) и получаю ошибку. Но когда я удаляю функцию поплавкового выключателя, все работает нормально, без ошибок. Так как же мне сделать так, чтобы этот выключатель заработал? Вот код;
int motorPin = 4; // контакт, который включает двигатель
int blinkPin = 9; // контакт, который включает светодиод
int lamp1 = 5;// лампа бумага
int motorklorin = 3;// isi хлорин
int switch1 = 2;// переключатель float
void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(blinkPin, OUTPUT); // устанавливаем вывод 13 на выход, чтобы мы могли использовать его для включения светодиода
pinMode(lamp1, OUTPUT);
pinMode(motorklorin, OUTPUT); // МОТОР УНТУК ИСИ КЛОРИН
pinMode(switch1, INPUT_PULLUP);// ПЕЛАМПОНГ
}
void loop()
{
if(digitalRead(switch1) == HIGH)
{
digitalWrite(motorklorin, LOW);
}
else
{
digitalWrite(motorklorin, HIGH);
delay(2000);
}
{
digitalWrite(motorPin, HIGH); // включаем мотор
digitalWrite(blinkPin, HIGH); // включаем светодиод
digitalWrite(lamp1, HIGH);// на лампе
delay(2000); // умножьте на 1000, чтобы перевести секунды в миллисекунды
digitalWrite(motorPin, LOW); // выключить мотор
digitalWrite(blinkPin, LOW); // выключить светодиод
digitalWrite(lamp1, HIGH);// двигатель 1 ялан (турун воздушного запуска)
delay(2000); // умножьте на 60000, чтобы перевести минуты в миллисекунды
digitalWrite(motorPin, HIGH); // включаем мотор (motorisi balik air jalan)
digitalWrite(blinkPin, HIGH); // включаем светодиод
digitalWrite(lamp1, LOW);// на лампе
delay(5000); // умножьте на 1000, чтобы перевести секунды в миллисекунды
digitalWrite(motorPin, HIGH); // выключаем мотор
digitalWrite(blinkPin,HIGH); // выключить светодиод
digitalWrite(lamp1, HIGH);// OFF LAMPU полуавтоматическая остановка двигателя
delay(1000); // умножьте на 60000, чтобы перевести минуты в миллисекунды
}
@Asrul Asyraff, 👍0
Обсуждение3 ответа
Сразу после вашего оператора else{}
есть лишний {
. Удалите его, и код должен скомпилироваться.
Хорошо, братан, спасибо за руководство, теперь я наконец-то могу скомпилировать код., @Asrul Asyraff
Если это так, пожалуйста, примите ответ., @MichaelT
Вы пропустили последнюю закрывающую фигурную скобку для void loop();
int motorPin = 4; // контакт, который включает двигатель
int blinkPin = 9; // контакт, который включает светодиод
int lamp1 = 5;// лампа бумага
int motorklorin = 3;// isi хлорин
int switch1 = 2;// переключатель float
void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(blinkPin, OUTPUT); // устанавливаем вывод 13 на выход, чтобы мы могли использовать его для включения светодиода
pinMode(lamp1, OUTPUT);
pinMode(motorklorin, OUTPUT); // МОТОР УНТУК ИСИ КЛОРИН
pinMode(switch1, INPUT_PULLUP);// ПЕЛАМПОНГ
}
void loop()
{
if(digitalRead(switch1) == HIGH)
{
digitalWrite(motorklorin, LOW);
}
else
{
digitalWrite(motorklorin, HIGH);
delay(2000);
}
{
digitalWrite(motorPin, HIGH); // включаем мотор
digitalWrite(blinkPin, HIGH); // включаем светодиод
digitalWrite(lamp1, HIGH);// на лампе
delay(2000); // умножьте на 1000, чтобы перевести секунды в миллисекунды
digitalWrite(motorPin, LOW); // выключить мотор
digitalWrite(blinkPin, LOW); // выключить светодиод
digitalWrite(lamp1, HIGH);// двигатель 1 ялан (турун воздушного запуска)
delay(2000); // умножьте на 60000, чтобы перевести минуты в миллисекунды
digitalWrite(motorPin, HIGH); // включаем мотор (motorisi balik air jalan)
digitalWrite(blinkPin, HIGH); // включаем светодиод
digitalWrite(lamp1, LOW);// на лампе
delay(5000); // умножьте на 1000, чтобы перевести секунды в миллисекунды
digitalWrite(motorPin, HIGH); // выключаем мотор
digitalWrite(blinkPin,HIGH); // выключить светодиод
digitalWrite(lamp1, HIGH);// OFF LAMPU полуавтоматическая остановка двигателя
delay(1000); // умножьте на 60000, чтобы перевести минуты в миллисекунды
}
}
Я описываю эту ошибку и то, как ее диагностировать в сообщении в блоге. Вот цитата для потомков:
Распространенная проблема, которая может заставить начинающего программиста рвать на себе волосы.
Однако это проблема, у которой всегда есть простое решение, и с помощью правильных приемов можно легко найти, в чем проблема.
Возьмем следующий небольшой фрагмент кода, который выдает именно эту ошибку:
byte i = 0;
void doSomething() {
digitalWrite(3, LOW);
}
void doSomethingElse() {
digitalWrite(13, HIGH);
}
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if (i == 1) {
doSomething();
i++;
}
На первый взгляд все выглядит просто отлично. Но вы компилируете и получаете:
/home/matt/Arduino/ErrorTest/ErrorTest.ino: In function 'void loop()':
ErrorTest:21: error: expected '}' at end of input
}
^
exit status 1
expected '}' at end of input
Строка 21, конечно, последняя в файле. И ошибка довольно явная — она ожидает } в конце файла. Однако, там явно уже есть один. Так о чем же речь?
Проще говоря, недостаточно } , чтобы уравновесить количество { в файле. Для каждого { должно быть } , чтобы его сопровождать. В этом маленьком файле легко просто просмотреть и посчитать их все. Добавьте один для { и вычтите один для } . Если ответ не 0, то что-то не так. Но может потребоваться внимательно посмотреть, чтобы увидеть, где должен быть отсутствующий элемент, и даже я потратил часы, косясь, пытаясь найти его местоположение в большом проекте.
Однако есть один небольшой трюк, который может вам помочь: Auto Format. Функция Auto Format в Arduino IDE и UECIDE (а также во многих других IDE) отсортирует ваши отступы в соответствии с наличием (помимо прочего) { и }. Если скобки не совпадают, форматирование будет неверным.
Итак, давайте пропустим эту маленькую программу через автоматическое форматирование и посмотрим, что произойдет:
byte i = 0;
void doSomething() {
digitalWrite(3, LOW);
}
void doSomethingElse() {
digitalWrite(13, HIGH);
}
void setup() {
// put your setup code here, to run once:
pinMode(13, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if (i == 1) {
doSomething();
i++;
}
Как вы видите, отступы функции loop() изменились. И если ваши глаза достаточно зорки, вы уже увидите, в чем была ошибка. «if», у которого была открывающая скобка, не было закрывающей. «i++» должен был быть за пределами «if» (как можно увидеть по исходному отступу), но на самом деле это не так, и конец функции на самом деле был концом «if», оставляя функцию незавершенной.
Так что исправить это теперь очень просто. С помощью автоматического форматирования мы можем увидеть, где возникает дисбаланс, и исправить его:
void loop() {
// put your main code here, to run repeatedly:
if (i == 1) {
doSomething();
}
i++;
}
И теперь он компилируется. Но, конечно, этот маленький фрагмент на самом деле не делает ничего полезного...
О, хорошо, я это заметил. Большое спасибо за ваше руководство., @Asrul Asyraff
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Не удается снова загрузиться после смены платы
- ATMEGA328P-U vs ATMEGA328-PU
- Модуль SIM808 GSM работает нормально, GPS не работает (нет сообщения о готовности GPS при включении питания)
- Arduino 16 МГц только с 3,3 В?
- Генерация стабильной частоты
- В чем разница между ATMEGA32 и ATMEGA328?
“_expected '}' at end of input_” кажется мне вполне очевидным. Что вам в этом непонятно?, @Edgar Bonet
Это так же просто, как считать. Используйте пальцы рук, если нужно, или даже пальцы ног, если вы зарылись так глубоко., @Ignacio Vazquez-Abrams
Код выше содержит 5
{
s и 6}
s. Числа должны совпадать., @Gerbenhttps://majko.co.uk/blog/expected-end-input-error, @Majenko
на самом деле я не знал, как это исправить, @Asrul Asyraff
Добавьте дополнительную строку с } в конце и попробуйте скомпилировать еще раз., @Mikael Patel