Этот код выдаете ошибку: error: 'AF_DCMotor' does not name a type

Mestniy96
Offline
Зарегистрирован: 31.08.2015
#include <AFMotor.h> //Подключаем заголовочный файл библиотеки
//Создаем объект для двигателя на 1 канале (M1)
AF_DCMotor motor(1);
void setup() {
}
void loop() {
//Задаем направление движение вперед
motor.run(FORWARD);
//Устанавливаем скорость 50%
motor.setSpeed(128);
//пауза 3 секунды - двигатель крутится
delay(3000);
//увеличиваем скорость до 75%, и пауза 3 сек.
motor.setSpeed(192);
delay(3000);
//Снижаем скорость до 50%, и пауза 3 сек.
motor.setSpeed(128);
delay(3000);
//Останавливаем двигатель, и пауза 3 сек.
motor.run(RELEASE);
delay(3000);
//Переключаем направление вращения
//Двигатель начнет вращаться со скоростью 50%
motor.run(BACKWARD);
//пауза 3 секунды - двигатель крутится
delay(3000);
//увеличиваем скорость до 75%, и пауза 3 сек.
motor.setSpeed(192);
delay(3000);
//Снижаем скорость до 50%, и пауза 3 сек.
motor.setSpeed(128);
delay(3000);
//Останавливаем двигатель, и пауза 3 сек.
motor.run(RELEASE);
delay(3000);
}

 

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Библиатеку скачал. Константы в коде после этого выделелись. Но выдает такую ошибку.

Radjah
Offline
Зарегистрирован: 06.08.2014

Я вижу, что конструктор принимает 2 параметра, а не один.

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Пример от сюда брал: http://asio5.ru/?p=495

Radjah
Offline
Зарегистрирован: 06.08.2014

https://github.com/adafruit/Adafruit-Motor-Shield-library/tree/master/examples

Посмотрел либу по ссылке, они там частоту гвоздями прибили.

class AF_DCMotor
{
 public:
  AF_DCMotor(uint8_t motornum, uint8_t freq =  MOTOR34_8KHZ);
  void run(uint8_t);
  void setSpeed(uint8_t);

 private:
  uint8_t motornum, pwmfreq;
};

 

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Тоесть мне библиотеку из вашей сслыки скачать? Понял, щас скачаю...

По результату отпишусь!

Radjah
Offline
Зарегистрирован: 06.08.2014

Скачал либу, подправил 7 строку в AFMotor.cpp (Arduino.h). В 1.6.1 твой скетч без ошибок собирается.

Mestniy96
Offline
Зарегистрирован: 31.08.2015

Пмогло скачивание вашей библиотеки. Спасибо!!!

domrustika
Offline
Зарегистрирован: 23.02.2015

ребята помогите сильно не ругайте, так как я новичок.

хотел сделать блутус машинку отсюда .

скачал скетч. при компиляции куча ошибок!

папку AFMOTOR скачал и поставил в либрариес! а что изменить в файлах AFMotor.h и cpp не понял! объясните подробнее пожалуйста!

что то на фото не видно вот ошибки

Carfruit:10: error: 'AF_DCMotor' does not name a type
Carfruit:11: error: 'AF_DCMotor' does not name a type
Carfruit:12: error: 'AF_DCMotor' does not name a type
Carfruit:13: error: 'AF_DCMotor' does not name a type
Carfruit.ino: In function 'void setup()':
Carfruit:18: error: 'motor1' was not declared in this scope
Carfruit:19: error: 'RELEASE' was not declared in this scope
Carfruit:20: error: 'motor2' was not declared in this scope
Carfruit:22: error: 'motor3' was not declared in this scope
Carfruit:24: error: 'motor4' was not declared in this scope
Carfruit.ino: In function 'void loop()':
Carfruit:52: error: 'motor1' was not declared in this scope
Carfruit:52: error: 'FORWARD' was not declared in this scope
Carfruit:53: error: 'motor4' was not declared in this scope
Carfruit:62: error: 'motor1' was not declared in this scope
Carfruit:62: error: 'BACKWARD' was not declared in this scope
Carfruit:63: error: 'motor4' was not declared in this scope
Carfruit:71: error: 'motor4' was not declared in this scope
Carfruit:71: error: 'FORWARD' was not declared in this scope
Carfruit:78: error: 'motor1' was not declared in this scope
Carfruit:78: error: 'FORWARD' was not declared in this scope
Carfruit:86: error: 'motor1' was not declared in this scope
Carfruit:86: error: 'RELEASE' was not declared in this scope
Carfruit:87: error: 'motor4' was not declared in this scope

delfin1976
Offline
Зарегистрирован: 19.06.2022

Подскажите, а что сделали? Скачал библиотек и нихрена. Я подключаю шаговый двигатель, но при компиляции вылетает ошибка  - AF_DCMotor(uint8_t motornum, uint8_t freq = DC_MOTOR_PWM_RATE + was not declared in this scope

В коде создается 

// two stepper motors one on each port
AF_Stepper motor1(200, 1);
 
Как будто он не определяет какого класса создается обьект.
 
Помогите если сами разобрались.

 

b707
Offline
Зарегистрирован: 26.05.2017

Код выложите полностью

delfin1976
Offline
Зарегистрирован: 19.06.2022

Это стандартный тестовый пример, который идет с библиотекой 

// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
 
/*
 * Usage Notes:
 * For PIC32, all features work properly with the following two exceptions:
 *
 * 1) Because the PIC32 only has 5 PWM outputs, and the AFMotor shield needs 6
 *    to completely operate (four for motor outputs and two for RC servos), the
 *    M1 motor output will not have PWM ability when used with a PIC32 board.
 *    However, there is a very simple workaround. If you need to drive a stepper
 *    or DC motor with PWM on motor output M1, you can use the PWM output on pin
 *    9 or pin 10 (normally use for RC servo outputs on Arduino, not needed for 
 *    RC servo outputs on PIC32) to drive the PWM input for M1 by simply putting
 *    a jumber from pin 9 to pin 11 or pin 10 to pin 11. Then uncomment one of the
 *    two #defines below to activate the PWM on either pin 9 or pin 10. You will
 *    then have a fully functional microstepping for 2 stepper motors, or four
 *    DC motor outputs with PWM.
 *
 * 2) There is a conflict between RC Servo outputs on pins 9 and pins 10 and 
 *    the operation of DC motors and stepper motors as of 9/2012. This issue
 *    will get fixed in future MPIDE releases, but at the present time it means
 *    that the Motor Party example will NOT work properly. Any time you attach
 *    an RC servo to pins 9 or pins 10, ALL PWM outputs on the whole board will
 *    stop working. Thus no steppers or DC motors.
 * 
 */
// <BPS> 09/15/2012 Modified for use with chipKIT boards
 
 
#ifndef _AFMotor_h_
#define _AFMotor_h_
 
#include <inttypes.h>
#if defined(__AVR__)
    #include <avr/io.h>
 
    //#define MOTORDEBUG 1
 
    #define MICROSTEPS 16                       // 8 or 16
 
    #define MOTOR12_64KHZ _BV(CS20)             // no prescale
    #define MOTOR12_8KHZ _BV(CS21)              // divide by 8
    #define MOTOR12_2KHZ _BV(CS21) | _BV(CS20)  // divide by 32
    #define MOTOR12_1KHZ _BV(CS22)              // divide by 64
 
    #define MOTOR34_64KHZ _BV(CS00)             // no prescale
    #define MOTOR34_8KHZ _BV(CS01)              // divide by 8
    #define MOTOR34_1KHZ _BV(CS01) | _BV(CS00)  // divide by 64
    
    #define DC_MOTOR_PWM_RATE   MOTOR34_8KHZ    // PWM rate for DC motors
    #define STEPPER1_PWM_RATE   MOTOR12_64KHZ   // PWM rate for stepper 1
    #define STEPPER2_PWM_RATE   MOTOR34_64KHZ   // PWM rate for stepper 2
    
#elif defined(__PIC32MX__)
    //#define MOTORDEBUG 1
    
    // Uncomment the one of following lines if you have put a jumper from 
    // either pin 9 to pin 11 or pin 10 to pin 11 on your Motor Shield.
    // Either will enable PWM for M1
    //#define PIC32_USE_PIN9_FOR_M1_PWM
    //#define PIC32_USE_PIN10_FOR_M1_PWM
 
    #define MICROSTEPS 16       // 8 or 16
 
    // For PIC32 Timers, define prescale settings by PWM frequency
    #define MOTOR12_312KHZ  0   // 1:1, actual frequency 312KHz
    #define MOTOR12_156KHZ  1   // 1:2, actual frequency 156KHz
    #define MOTOR12_64KHZ   2   // 1:4, actual frequency 78KHz
    #define MOTOR12_39KHZ   3   // 1:8, acutal frequency 39KHz
    #define MOTOR12_19KHZ   4   // 1:16, actual frequency 19KHz
    #define MOTOR12_8KHZ    5   // 1:32, actual frequency 9.7KHz
    #define MOTOR12_4_8KHZ  6   // 1:64, actual frequency 4.8KHz
    #define MOTOR12_2KHZ    7   // 1:256, actual frequency 1.2KHz
    #define MOTOR12_1KHZ    7   // 1:256, actual frequency 1.2KHz
 
    #define MOTOR34_312KHZ  0   // 1:1, actual frequency 312KHz
    #define MOTOR34_156KHZ  1   // 1:2, actual frequency 156KHz
    #define MOTOR34_64KHZ   2   // 1:4, actual frequency 78KHz
    #define MOTOR34_39KHZ   3   // 1:8, acutal frequency 39KHz
    #define MOTOR34_19KHZ   4   // 1:16, actual frequency 19KHz
    #define MOTOR34_8KHZ    5   // 1:32, actual frequency 9.7KHz
    #define MOTOR34_4_8KHZ  6   // 1:64, actual frequency 4.8KHz
    #define MOTOR34_2KHZ    7   // 1:256, actual frequency 1.2KHz
    #define MOTOR34_1KHZ    7   // 1:256, actual frequency 1.2KHz
    
    // PWM rate for DC motors.
    #define DC_MOTOR_PWM_RATE   MOTOR34_39KHZ
    // Note: for PIC32, both of these must be set to the same value
    // since there's only one timebase for all 4 PWM outputs
    #define STEPPER1_PWM_RATE   MOTOR12_39KHZ
    #define STEPPER2_PWM_RATE   MOTOR34_39KHZ
    
#endif
 
// Bit positions in the 74HCT595 shift register output
#define MOTOR1_A 2
#define MOTOR1_B 3
#define MOTOR2_A 1
#define MOTOR2_B 4
#define MOTOR4_A 0
#define MOTOR4_B 6
#define MOTOR3_A 5
#define MOTOR3_B 7
 
// Constants that the user passes in to the motor calls
#define FORWARD 1
#define BACKWARD 2
#define BRAKE 3
#define RELEASE 4
 
// Constants that the user passes in to the stepper calls
#define SINGLE 1
#define DOUBLE 2
#define INTERLEAVE 3
#define MICROSTEP 4
 
/*
#define LATCH 4
#define LATCH_DDR DDRB
#define LATCH_PORT PORTB
 
#define CLK_PORT PORTD
#define CLK_DDR DDRD
#define CLK 4
 
#define ENABLE_PORT PORTD
#define ENABLE_DDR DDRD
#define ENABLE 7
 
#define SER 0
#define SER_DDR DDRB
#define SER_PORT PORTB
*/
 
// Arduino pin names for interface to 74HCT595 latch
#define MOTORLATCH 12
#define MOTORCLK 4
#define MOTORENABLE 7
#define MOTORDATA 8
 
class AFMotorController
{
  public:
    AFMotorController(void);
    void enable(void);
    friend class AF_DCMotor;
    void latch_tx(void);
    uint8_t TimerInitalized;
};
 
class AF_DCMotor
{
 public:
  AF_DCMotor(uint8_t motornum, uint8_t freq = DC_MOTOR_PWM_RATE);
  void run(uint8_t);
  void setSpeed(uint8_t);
 
 private:
  uint8_t motornum, pwmfreq;
};
 
class AF_Stepper {
 public:
  AF_Stepper(uint16_t, uint8_t);
  void step(uint16_t steps, uint8_t dir,  uint8_t style = SINGLE);
  void setSpeed(uint16_t);
  uint8_t onestep(uint8_t dir, uint8_t style);
  void release(void);
  uint16_t revsteps; // # steps per revolution
  uint8_t steppernum;
  uint32_t usperstep, steppingcounter;
 private:
  uint8_t currentstep;
 
};
 
uint8_t getlatchstate(void);
 
#endif
 
delfin1976
Offline
Зарегистрирован: 19.06.2022

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

Похоже при создании класса он почему то неправильно обращается к его определению в библиотеке.

 

b707
Offline
Зарегистрирован: 26.05.2017

а код примера где? То что вы привели - это никакой не пример, а один их файлов библиотеки.

Вы в программировании вообще хоть что-то понимаете? Примеры к библиотеке лежат в папке examples.  А вы пытаетесь запускать саму библиотеку, похоже...

delfin1976
Offline
Зарегистрирован: 19.06.2022

Сорри, не то прикрепил, вот ниже

// MultiStepper
// -*- mode: C++ -*-
//
// Control both Stepper motors at the same time with different speeds
// and accelerations. 
// And AccelStepper with AFMotor support (https://github.com/adafruit/AccelStepper)
// Public domain!
 
#include <AccelStepper.h>
#include <AFMotor.h>
 
// two stepper motors one on each port
AF_Stepper motor1(200, 1);
AF_Stepper motor2(200, 2);
 
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
// wrappers for the first motor!
void forwardstep1() {  
  motor1.onestep(FORWARD, SINGLE);
}
void backwardstep1() {  
  motor1.onestep(BACKWARD, SINGLE);
}
// wrappers for the second motor!
void forwardstep2() {  
  motor2.onestep(FORWARD, SINGLE);
}
void backwardstep2() {  
  motor2.onestep(BACKWARD, SINGLE);
}
 
// Motor shield has two motor ports, now we'll wrap them in an AccelStepper object
AccelStepper stepper1(forwardstep1, backwardstep1);
AccelStepper stepper2(forwardstep2, backwardstep2);
 
void setup()
{  
    stepper1.setMaxSpeed(200.0);
    stepper1.setAcceleration(100.0);
    stepper1.moveTo(24);
    
    stepper2.setMaxSpeed(300.0);
    stepper2.setAcceleration(100.0);
    stepper2.moveTo(1000000);
    
}
 
void loop()
{
    // Change direction at the limits
    if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
    stepper1.run();
    stepper2.run();
}
delfin1976
Offline
Зарегистрирован: 19.06.2022

Разбираюсь немного, не то просто прикрепил.

b707
Offline
Зарегистрирован: 26.05.2017

этот пример требует двух библиотек

 // Requires the AFMotor library (https://github.com/adafruit/Adafruit-Motor-Shield-library)
// And AccelStepper with AFMotor support (https://github.com/adafruit/AccelStepper)

вы обе скачали?

delfin1976
Offline
Зарегистрирован: 19.06.2022

Код библиотеки тоде не лишний, сразу видно какие классы создаются.

delfin1976
Offline
Зарегистрирован: 19.06.2022

Конечно!

Ошибка связана именно с AFMotor.h

In file included from C:\Users\Родион\Documents\Arduino\libraries\Adafruit-Motor-Shield-library\examples\AFMotor_MultiStepper\AFMotor_MultiStepper.ino:11:
\Documents\Arduino\libraries\Adafruit-Motor-Shield-library/AFMotor.h:156:47: error: 'DC_MOTOR_PWM_RATE' was not declared in this scope
  156 |   AF_DCMotor(uint8_t motornum, uint8_t freq = DC_MOTOR_PWM_RATE);
 
b707
Offline
Зарегистрирован: 26.05.2017

нет никакой ошибки. Только что скачал две библиотеки, открыл пример - компилируется без проблем:

Скетч использует 4554 байт (14%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 129 байт (6%) динамической памяти, оставляя 1919 байт для локальных переменных.

Ардуино ИДЕ 1.8.3
Плата Ардуино Нано

 

Вывод - с кодом все в порядке, ищите, где вы накосячили
 

delfin1976
Offline
Зарегистрирован: 19.06.2022

Значит проблема в настройках связи в моей платой. У меня NodeMCU

Вроде насторил все по умолчанию. 

delfin1976
Offline
Зарегистрирован: 19.06.2022
b707
Offline
Зарегистрирован: 26.05.2017

delfin1976 пишет:

Значит проблема в настройках связи в моей платой. У меня NodeMCU

простите, а где вы вычитали, что эта библитека подходит для NodeMCU ? Вы же в исходник, говорите, заглядывали? Этот код только для АВР и ПИК

delfin1976
Offline
Зарегистрирован: 19.06.2022

Ну АВР - это я так понимаю как раз платы Ардуино, а ПИК - это какие? 

Библиотека просто писалась что для шилда, которого я использую, а с типами плат я еще полностью не разобрался. А у мен кикой тип платы?

Да сидел, разбирал библиотеку че к чему, но не все еще понимаю, тока первый день сижу.

Шилд этот заточен под NodeMCU. Может подскажите как мне нати библиотеку для этого шилда с поддержкой NodeMCU

 

b707
Offline
Зарегистрирован: 26.05.2017

delfin1976 пишет:

Ну АВР - это я так понимаю как раз платы Ардуино, а ПИК - это какие? А у мен кикой тип платы?

ардуино - это широкое понятие, в него входят куча разных плат с разными контроллерами

Контроллеры АВР - это платы Арлуино Уно, Нано, Мега, Микро и тд

Пик - это другое семейство контроллеров, они в Ардуино не поддерживаются

Ваша плата - на основе контроллера ESP8266, это еще одно семейство...

 

b707
Offline
Зарегистрирован: 26.05.2017

delfin1976 пишет:

Шилд этот заточен под NodeMCU. Может подскажите как мне нати библиотеку для этого шилда с поддержкой NodeMCU

дайте ссылку на свой шилд

delfin1976
Offline
Зарегистрирован: 19.06.2022

https://robotchip.ru/obzor-motor-shield-dlya-nodemcu/

Что то библиотеки только для Dc моторов, а для шаговых голяк

b707
Offline
Зарегистрирован: 26.05.2017

прямо по ссылке есть пример кода,  а вот библиотеки именно под этот шилд похоже нет

 

А вот тут есть пример для шагового

https://www.aranacorp.com/en/using-the-esp12e-motor-shield/

b707
Offline
Зарегистрирован: 26.05.2017

А вот тут вроде говорят, что и библиотека есть...

https://www.reddit.com/r/esp8266/comments/iefnnp/driving_a_stepper_motor...

 

В общем, не ленитесь искать в гугле - там есть все. Особенно если задавать вопросы на английском.

delfin1976
Offline
Зарегистрирован: 19.06.2022

Да я просто изначально не понял, что библиотеки оказывается еще и для всех плат подходят. Сейчас более менее понимаю. Конечно буду гуглить. Спасибо!