Проблема с кодом

У меня есть одна проблема с моим кодом, я новичок и не могу ее решить. Вы можете помочь мне? Спасибо вам большое.

У меня такая проблема:

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;
}

, 👍-1

Обсуждение

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


3 ответа


0

Например, первые 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


0

Ваши проблемы начинаются здесь:

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

,

1

Единственная проблема, которую я вижу в вашем коде, заключается в том, что ваши модули кода начинаются и заканчиваются где угодно. Посмотрите, откуда и где вы хотите запустить конкретную строку кода. Если вы напишете этот код в IDE Arduino, вы сможете увидеть окончание конкретной скобки, когда будете удерживать курсор на ней.

,