Ожидается, неквалифицированный-ID до '{' знак

вот код.

ПРОБЛЕМА: - если я использую цикл for, появляется ошибка "ожидаемый неквалифицированный идентификатор перед for ....... но если я использую цикл void вместо цикла for... код выполняется без ошибок , Между тем, мне нужен цикл for .

long int Distance = 0;  // Записываем количество пройденных нами шагов
//НИЗКАЯ ЛОГИЧНОСТЬ ДВИЖЕНИЕ НАЗАД и ШЕСТЕРНИ ДВИГАЮТСЯ по часовой стрелке
// PIN 18 ДЛЯ НАПРАВЛЕНИЯ
// PIN 19 ДЛЯ ШАГОВОГО ВВОДА
int y= 10^-6;
long int k;
long int h= 1600;
void setup() {              
Serial.begin(9600);
  pinMode(18, OUTPUT);     
  pinMode(19, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT); 
  digitalWrite(18,LOW);
  digitalWrite(19, LOW);
 digitalWrite(14, LOW);
 digitalWrite(15, LOW);
}
for ( k=0; k<=h; k++)
{
  //если мы в конце нашего хода
  digitalWrite(19, HIGH);
  delayMicroseconds(100);        
  digitalWrite(19, LOW); 
  delayMicroseconds(100);
  Distance = Distance + 1;   // записываем этот шаг
  //k=Расстояние;
// Проверяем, чтобы увидеть
  if (Distance ==h)
 {
   // Мы! Обратное направление (инвертировать сигнал DIR)
   if (digitalRead(18) == LOW)
    {
     digitalWrite(18, HIGH);
   }
   else
   {
     digitalWrite(18, LOW);
   }
// Сбрасываем наше расстояние до нуля, так как мы
 // начинаем новый ход
   Distance = 0;
  // Теперь пауза на полсекунды
    delay(1000);
  }
  } 
}

, 👍0


2 ответа


0

В вашем скетче должна быть функция void loop(). Эта функция вызывается сразу после установки. Если его нет, то программа не может скомпилироваться. Вы не можете поместить какой-либо код выполнения (имеется в виду код, отличный от объявлений и т.п.) вне функции.

В зависимости от того, чего именно вы хотите достичь, у вас есть 2 варианта:

  1. Если вы хотите, чтобы программа запускалась только один раз, а затем останавливалась до следующего сброса, вы можете поместить свой код в функцию setup() и оставить void loop() функция пустая (при этом: void loop(){ } ).
  2. Если вы хотите, чтобы программа бесконечно повторялась после цикла for, вы можете поместить код в функцию void loop().

Что бы вы ни выбрали, вам понадобится функция void loop().

Примечание. Функция void loop() является частью мира Arduino. В общем, все программы для микроконтроллера на C/C++ имеют функцию с именем main(). Это функция, запускающая выполнение программы. Без него ни одна программа не запустится. Платформа Arduino оборачивает эту функцию main() и дает вам непосредственно одну функцию для выполнения кода инициализации (void setup()) и одну функцию, которая запускается после этого и зацикливается бесконечно (void loop()). Этот бесконечный цикл — важная вещь, потому что у микроконтроллера нет ОС или чего-то такого, к чему он мог бы вернуться. Если у вас нет бесконечного цикла, выполнение может перейти к следующему адресу в программе, где вы не знаете, что он содержит.


Кроме того, строка int y= 10^-6; не делает того, что вы могли бы подумать. В C/C++ ^ не является мощной функцией, а выполняет побитовую операцию ИЛИ. Для этого вам придется использовать функцию, например функцию pow(value1, value2). Вы можете использовать Google, чтобы найти один из многих примеров, как его использовать.

И в той же строке (я полагаю, как указано выше) вы хотите указать Arduino поместить значение намного меньше 1 (значение между 0 и 1) в целочисленную переменную. Он будет содержать 0. int означает целое число и не может содержать десятичные числа (число с чем-то после запятой). Он может содержать такие числа, как -1,0,1,2,3 в диапазоне от -32768 до 32767 (поскольку на Arduino UNO и Mega он имеет ширину 16 бит). Для этого вам придется использовать тип float.

,

«10^-6» следует писать как «1e-6», а не как «pow(10, -6)»., @Edgar Bonet


1

Похоже, вы хотели, чтобы цикл for завершился один раз. Если это так, просто включите его и весь его блок кода внутри и в конце функции setup(). Вам все равно нужно будет предоставить функцию loop(), но она может быть пустой:

void loop(){
   ;
}

Если вместо этого вы хотите, чтобы цикл for() выполнялся многократно, заключите его в функцию loop():

void loop(){
   for ( k=0; k<=h; k++ )
   {
   ...
   }
}

Функция setup() запускается один раз после включения питания или перезагрузки. Затем функция цикла вызывается многократно, навсегда. Поместите свой функциональный код в любой из них, соответствующий вашей цели.

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

,