не могу найти ошибку в моем коде

Я работаю над проектом, который включает использование двигателей и поплавкового выключателя. Я получаю сообщение об ошибке, которое ожидало «}» в конце ввода. Я не могу найти, где это исправить. Кстати, я ставлю поплавковый выключатель в начале кода (который сверху) и получаю ошибку. Но когда я удаляю функцию поплавкового выключателя, все работает нормально, без ошибок. Так как же мне сделать так, чтобы этот выключатель заработал? Вот код;

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, чтобы перевести минуты в миллисекунды
  }

, 👍0

Обсуждение

“_expected '}' at end of input_” кажется мне вполне очевидным. Что вам в этом непонятно?, @Edgar Bonet

Это так же просто, как считать. Используйте пальцы рук, если нужно, или даже пальцы ног, если вы зарылись так глубоко., @Ignacio Vazquez-Abrams

Код выше содержит 5 {s и 6 }s. Числа должны совпадать., @Gerben

https://majko.co.uk/blog/expected-end-input-error, @Majenko

на самом деле я не знал, как это исправить, @Asrul Asyraff

Добавьте дополнительную строку с } в конце и попробуйте скомпилировать еще раз., @Mikael Patel


3 ответа


3

Сразу после вашего оператора else{} есть лишний {. Удалите его, и код должен скомпилироваться.

,

Хорошо, братан, спасибо за руководство, теперь я наконец-то могу скомпилировать код., @Asrul Asyraff

Если это так, пожалуйста, примите ответ., @MichaelT


-2

Вы пропустили последнюю закрывающую фигурную скобку для 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, чтобы перевести минуты в миллисекунды
}
}
,

2

Я описываю эту ошибку и то, как ее диагностировать в сообщении в блоге. Вот цитата для потомков:


Распространенная проблема, которая может заставить начинающего программиста рвать на себе волосы.

Однако это проблема, у которой всегда есть простое решение, и с помощью правильных приемов можно легко найти, в чем проблема.

Возьмем следующий небольшой фрагмент кода, который выдает именно эту ошибку:

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