Как исправить ошибку "expected ; before ) token"?

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

ожидается; до ) токен

в строке for(count <= 10).

Я был бы очень признателен, если бы кто-нибудь объяснил мне, почему я получаю эту ошибку.

#include<EEPROM.h>
const int LED = 12;
const int SWITCH = 4;

void setup() {
  // поместите сюда свой код установки для однократного запуска:
  Serial.begin(115200);

  pinMode(LED, OUTPUT);           //Светодиод всегда выводит информацию
  pinMode(LED_BUILTIN, OUTPUT);   //Встроенный светодиод всегда выводит информацию
  pinMode(SWITCH, INPUT_PULLUP);  //Переключение входных значений при нахождении/выходе из земли
}

void loop() {
  // поместите сюда свой основной код для многократного запуска:
  int addr = 0;     //Объявление переменных
  int count = 0;
  int seconds;

  if (digitalRead(SWITCH) == LOW) {
Serial.println("----Recording----");

    for (count <= 10) {
      while (digitalRead(SWITCH) == LOW) {
        count = count + 1;
        digitalWrite(LED, LOW);
        delay(50);
      }
      else {
        count = count + 1;
        digitalWrite(LED, HIGH);
        delay(50);
      }
    } else {
      digitalWrite(LED_BUILTIN, HIGH);        //Внутренний светодиод мигает
      delay (300);
      digitalWrite(LED_BUILTIN, LOW);
      delay(300);
    }
  }
}

, 👍-2

Обсуждение

попробуйте while (count <= 10) { или for ( ; count<=0; ) { - найдите учебник по C, чтобы узнать о правильном синтаксисе, @Jaromanda X

Проблема в синтаксисе вашего цикла [for](https://www.tutorialspoint.com/cplusplus/cpp_for_loop.htm)., @sempaiscuba

Я переключился на цикл while, но затем просто получил сообщение об ошибке в операторе else... какая-нибудь еще помощь, которую вы могли бы оказать?, @Thomas

Блоки for и while не имеют else. Подходят только блоки if. Посмотрите на некоторые основные примеры C., @Mark Smith

@Томас, тебе действительно нужно обратиться к справочным страницам языка Arduino, прежде чем публиковать вопрос..... https://www.arduino.cc/reference/en/language/structure/control-structure/for/, @jsotola


2 ответа


2

Добро пожаловать в arduino.stackexchange.
Компилятор информирует вас о проблемах с вашим кодом. В вашем случае проблема с циклом for.
Помните, что цикл for — это одна из базовых концепций языка программирования c/c++ (и многих других).
Синтаксис:

for ( init-expression ; cond-expression ; loop-expression )   
    statement;  

Описание выше:

init-выражение:
Перед любым другим элементом оператора for выражение init выполняется только один раз. Затем управление передается cond-выражению.

условное выражение:
Перед выполнением каждой итерации оператора, включая первую итерацию. Оператор выполняется только в том случае, если cond-expression имеет значение true (ненулевое значение).

выражение цикла:
В конце каждой итерации оператора. После выполнения выражения цикла оценивается условное выражение.

Например:

for(int count=0; count<10; count++){
    if (count%2) {
        digitalWrite(LED, LOW);
        }
    else{
        digitalWrite(LED, HIGH);
        }  
    }

При необходимости добавьте дополнительный код.

Дополнительное описание цикла for можно найти здесь.

,

0

Кроме того, только операторы if имеют предложения else; операторы цикла этого не делают. Если вы сначала не получили ошибку для else, это потому, что компилятор запутался в цикле for только с одним аргументом.

Операторы

' while()' содержат логическое выражение внутри круглых скобок. Каждый раз, когда логическое значение оценивает TRUE, оператор или блок, следующий за циклом, выполняется один раз, пока цикл не оценивает FALSE. Независимо от того, сколько раз он будет выполняться, даже ноль, следующий код будет выполнен.

Операторы

'for()' имеют три выражения. Любой из трех может отсутствовать, но места для всех трех должны быть указаны.

  • Первое выражение выполняется один раз в начале цикла. Обычно он инициализирует переменную цикла, но может делать что угодно или отсутствовать.
  • Второе выражение представляет собой логическое выражение, которое работает точно так же, как единственный аргумент в цикле while() (цикл выполняется только в том случае и до тех пор, пока выражение имеет значение TRUE).
  • Третье выражение выполняется после всех операторов цикла. Обычно он перемещает переменную цикла, но может делать что угодно.
  • Как и цикл while(), все, что следует за циклом for(), будет выполнено независимо от того, сделал ли цикл что-нибудь.

Хотя любое из выражений цикла for() может быть опущено, обе точки с запятой все равно должны присутствовать, чтобы было ясно, какие выражения были опущены.

Обратите внимание, что «for(;;)» — это идиома в C, означающая «навсегда», то есть бесконечный цикл. Для завершения цикла внутри цикла должна быть выполнена какая-то другая конструкция, если она не предназначена для постоянного выполнения.

,