Проблема с кодом
У меня есть одна проблема с моим кодом, я новичок и не могу ее решить. Вы можете помочь мне? Спасибо вам большое.
У меня такая проблема:
error: expected unqualified-id before '{' token
А это мой код:
int trigPin = 12;
int echoPin = 11;
long timeperiod, cm;
const int analogOutPin = 9;
int brightness;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop(){
if (timeperiod > 50)
analogWrite(analogOutPin,0);
}
{
if (timeperiod 10 < 50){
for(brightness = 0; brightness < 256; brightness++){
analogWrite(led,brightness);
delay(10);}
}}
if (timeperiod < 10)
analogWrite(analogOutPin,0);
{
digitalWrite(trigPin, LOW);
delayMicroseconds(20);
digitalWrite(trigPin, HIGH);
delayMicroseconds(0);
digitalWrite(trigPin, LOW);
timeperiod = pulseIn(echoPin, HIGH);
cm = microsecondsToCentimeters(timeperiod);
Serial.print("dist=");
Serial.print(cm);
Serial.println();
delay(10);
}
long microsecondsToInches(long microseconds)
{
return microseconds / 74 /2;
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29/ 2;
}
@jupepi, 👍-1
Обсуждение3 ответа
Например, первые 5 строк:
void loop(){
if (timeperiod > 50)
analogWrite(analogOutPin,0);
}
{
Всегда выравнивайте фигурные скобки. Это можно сделать так:
xxx {
yyy
}
или
xxx
{
yyy
}
где xxx и yyy могут быть одним или несколькими операторами.
Если вы правильно выровняли первые 5 строк, вы увидите, что вам следует добавить {:
if (timeperiod > 50)
{ // <- добавлено
analogWrite(analogOutPin,0);
}
Кроме того, если у вас есть оператор if, for или while, ВСЕГДА добавляйте скобки, даже если это всего лишь одна строка. Таким образом:
if (timeperiod > 50)
analogWrite(analogOutPin,0);
следует писать как
if (timeperiod > 50)
{
analogWrite(analogOutPin,0);
}
Это не обязательное правило, но если вы позже что-то ошибетесь или добавите новую строку в тело, то легко забудете добавить скобки, поэтому лучше сделать это заранее.
Поэтому (также) разумно
- выровнять скобки (как описано выше)
- всегда используйте скобки в операторах if/ while/loop.
- всегда используйте одинаковое количество пробелов (или табуляции) для отступа нового уровня (например, после цикла if, while, цикла или тела функции).
- используйте новые строки между функциями; это значительно упрощает чтение.
- разделяйте большие функции множеством скобок на (под)функции/методы (пока не в вашем случае)
Спасибо за ответ. Я все это сделал, а там написано, что у меня такая же ошибка!, @jupepi
@jupepi Отредактируйте свой вопрос и опубликуйте новый, выровненный и чистый код., @smajli
Я пока не вижу изменений вашего кода., @Michel Keijzers
Ваши проблемы начинаются здесь:
void loop(){
if (timeperiod > 50)
analogWrite(analogOutPin,0);
}
{
В операторе if отсутствует открывающая скобка, а после слов имеется дополнительная открывающая скобка. Кроме того, любой код внутри фигурных скобок должен иметь отступ от кода перед ним:
void loop(){
if (timeperiod > 50) {
analogWrite(analogOutPin,0);
}
if (timeperiod 10 < 50){
for(brightness = 0; brightness < 256; brightness++) {
analogWrite(led,brightness);
delay(10);
}
}
//И остальная часть вашей функции цикла также нуждается в очистке...
Остальная часть функции цикла также нуждается в очистке. У вас повсюду плохие отступы и несовпадающие фигурные скобки. Как говорит @Majko в своем комментарии, если вы очистите форматирование кода, ваши проблемы с синтаксисом станут очевидны.
Единственная проблема, которую я вижу в вашем коде, заключается в том, что ваши модули кода начинаются и заканчиваются где угодно. Посмотрите, откуда и где вы хотите запустить конкретную строку кода. Если вы напишете этот код в IDE Arduino, вы сможете увидеть окончание конкретной скобки, когда будете удерживать курсор на ней.
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- устаревшее преобразование из строковой константы в 'char*'
Разберитесь с отступами, и вы обнаружите, что имеющиеся у вас скобки не имеют никакого смысла., @Majenko