Не могу скомпилировать скетч Arduino, когда удаляю функцию цикла void
#include <AFMotor.h>
AF_DCMotor motor(2,MOTOR12_64KHZ);
void movefor ();
void moveback();
void setup()
{
Serial.begin(9600);
Serial.println("Motor test!");` `motor.setSpeed(200);
movefor ();
moveback ();
}
void movefor( ){
motor.run(FORWARD);
delay(1000);
motor.run(RELEASE);
delay(100);
}
void moveback( ) {
motor.run(BACKWARD);
delay(1000);
motor.run(RELEASE);
delay(100);
}
При попытке скомпилировать его появляется сообщение об ошибке ошибка компиляции для платы Arduino Uno
Я хочу, чтобы функции находились вне цикла, поэтому удалил их.
Даже если я оставлю цикл void и оставлю его пустым, тогда мои моторы будут непрерывно работать вперед, назад и вперед.
@BJKShah, 👍0
Обсуждение2 ответа
Что-то не так с двигателем, схемой или классом двигателя.
Когда вы используете настройку и цикл, происходит следующее:
setup();
while (1) { loop(); }
Таким образом, функция цикла выполняется навсегда, если она пуста, ничего не произойдет. Если вы говорите, что мотор движется вперед, возможно, это из-за неправильной реализации класса мотора.
Arduino IDE требует, чтобы цикл существовал всегда, а наличие пустого цикла — это то же самое, что отсутствие цикла вообще.
Что вы можете попробовать:
- В настройке выполните только movefor() и проверьте, что произойдет.
- Тогда просто выполните moveback() и проверьте, что произойдет.
- Затем создавайте комбинации и смотрите, не внутри ли проблема movefor или moveback.
Для первых шагов вы можете добавить задержку, чтобы легче увидеть, есть ли побочный эффект.
Я попробовал то, что вы сказали, и код работает хорошо. Я хочу движение вперед, а затем назад. После этого я хочу, чтобы то же самое постоянно двигалось вперед и назад. Но проблема заключается в том, что он всегда будет двигаться вперед после одного движения вперед и назад. Я думаю, что цикл вызывается постоянно, и это беспокоит, поэтому я хочу удалить цикл. Возможно, проблема в заголовочном файле, но как мне проверить этот файл?, @BJKShah
вы должны получить то, что хотите, при добавлении в настройку: while(1) { movefor(); возврат(); } но я сомневаюсь, что это тоже сработает. Заголовочный файл можно найти там, где вы установили библиотеку, вы всегда можете выполнить поиск файлов на своем ПК (грубый способ, но работает; я не знаю наизусть, где хранятся библиотеки)., @Michel Keijzers
У меня есть библиотека AFMotor в Documents-Arduino-libraries-AFMotor, здесь все выглядит нормально., @BJKShah
Вы не можете и не должны удалять функцию цикла. Скетчи Arduino должны иметь функцию настройки и функцию цикла. Функция настройки вызывается один раз, а функция цикла вызывается повторно.
Просто сделайте так, чтобы ваша функция цикла выглядела так:
void loop() {
movefor ();
moveback ();
}
Ваш мотор будет двигаться вперед, а затем назад, навсегда.
Обратите внимание, что вам следует прочитать, как избежать использования функции задержки. Вам действительно нужно использовать millis()
для определения времени, а не задержек. Выполните поиск в Интернете по запросу «Arduino мигает без задержки». Это базовое программирование Arduino.
- Как заставить сервопривод вращаться на угол больше 180°
- Почему Adafruit motor shield не крутит моторы?
- Управление двигателем Arduino Uno с помощью 2 реле, 2 концевых выключателей и Bluetooth. Вперед Назад Стоп
- Как подключить двойной редуктор Tamiya к Arduino Uno?
- Мой моторный щит сломан?
- Серво не двигается
- Adafruit Motorshield v2.3 не работает
- Один порт моторного щита не работает с шаговым двигателем.
вы получаете ошибку компоновщика, потому что основная функция в ядре main.c вызывает функцию цикла(). оно должно существовать., @Juraj
Ошибка: «Невозможно скомпилировать плату для Arduino Uno»., @BJKShah
включите подробный режим в настройках, @Juraj