Ожидается, неквалифицированный-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);
}
}
}
2 ответа
В вашем скетче должна быть функция void loop()
. Эта функция вызывается сразу после установки. Если его нет, то программа не может скомпилироваться. Вы не можете поместить какой-либо код выполнения (имеется в виду код, отличный от объявлений и т.п.) вне функции.
В зависимости от того, чего именно вы хотите достичь, у вас есть 2 варианта:
- Если вы хотите, чтобы программа запускалась только один раз, а затем останавливалась до следующего сброса, вы можете поместить свой код в функцию
setup()
и оставитьvoid loop()
функция пустая (при этом:void loop(){ }
). - Если вы хотите, чтобы программа бесконечно повторялась после цикла 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
.
Похоже, вы хотели, чтобы цикл for завершился один раз. Если это так, просто включите его и весь его блок кода внутри и в конце функции setup(). Вам все равно нужно будет предоставить функцию loop(), но она может быть пустой:
void loop(){
;
}
Если вместо этого вы хотите, чтобы цикл for() выполнялся многократно, заключите его в функцию loop():
void loop(){
for ( k=0; k<=h; k++ )
{
...
}
}
Функция setup() запускается один раз после включения питания или перезагрузки. Затем функция цикла вызывается многократно, навсегда. Поместите свой функциональный код в любой из них, соответствующий вашей цели.
Причина появления сообщения об ошибке заключается в том, что, поскольку вы написали цикл for, он находится вне функции, но исполняемый код (в отличие от определения глобальных переменных) допустим только внутри функции.
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
«10^-6» следует писать как «1e-6», а не как «pow(10, -6)»., @Edgar Bonet