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

, 👍0

Обсуждение

вы получаете ошибку компоновщика, потому что основная функция в ядре main.c вызывает функцию цикла(). оно должно существовать., @Juraj

Ошибка: «Невозможно скомпилировать плату для Arduino Uno»., @BJKShah

включите подробный режим в настройках, @Juraj


2 ответа


0

Что-то не так с двигателем, схемой или классом двигателя.

Когда вы используете настройку и цикл, происходит следующее:

setup();
while (1) { loop(); }

Таким образом, функция цикла выполняется навсегда, если она пуста, ничего не произойдет. Если вы говорите, что мотор движется вперед, возможно, это из-за неправильной реализации класса мотора.

Arduino IDE требует, чтобы цикл существовал всегда, а наличие пустого цикла — это то же самое, что отсутствие цикла вообще.

Что вы можете попробовать:

  • В настройке выполните только movefor() и проверьте, что произойдет.
  • Тогда просто выполните moveback() и проверьте, что произойдет.
  • Затем создавайте комбинации и смотрите, не внутри ли проблема movefor или moveback.

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

,

Я попробовал то, что вы сказали, и код работает хорошо. Я хочу движение вперед, а затем назад. После этого я хочу, чтобы то же самое постоянно двигалось вперед и назад. Но проблема заключается в том, что он всегда будет двигаться вперед после одного движения вперед и назад. Я думаю, что цикл вызывается постоянно, и это беспокоит, поэтому я хочу удалить цикл. Возможно, проблема в заголовочном файле, но как мне проверить этот файл?, @BJKShah

вы должны получить то, что хотите, при добавлении в настройку: while(1) { movefor(); возврат(); } но я сомневаюсь, что это тоже сработает. Заголовочный файл можно найти там, где вы установили библиотеку, вы всегда можете выполнить поиск файлов на своем ПК (грубый способ, но работает; я не знаю наизусть, где хранятся библиотеки)., @Michel Keijzers

У меня есть библиотека AFMotor в Documents-Arduino-libraries-AFMotor, здесь все выглядит нормально., @BJKShah


1

Вы не можете и не должны удалять функцию цикла. Скетчи Arduino должны иметь функцию настройки и функцию цикла. Функция настройки вызывается один раз, а функция цикла вызывается повторно.

Просто сделайте так, чтобы ваша функция цикла выглядела так:

void loop() {
    movefor ();
    moveback ();
}

Ваш мотор будет двигаться вперед, а затем назад, навсегда.

Обратите внимание, что вам следует прочитать, как избежать использования функции задержки. Вам действительно нужно использовать millis() для определения времени, а не задержек. Выполните поиск в Интернете по запросу «Arduino мигает без задержки». Это базовое программирование Arduino.

,