Не работает скетч c Amperka Motor Shield

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем cowan, 20 янв 2014.

  1. cowan

    cowan Нуб

    Всем привет,

    Столкнулся с проблемой. Использую библиотеку AFMotor для управления 2 DC моторами.
    Uno + Amperka Motor Shiled (2 канала 2А). Моторы подключены к управляющим каналам М1, М2.

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

    Моторы работают только на каналах 3, 4.

    Скетч следующий:

    #include <AFMotor.h>
    // Определяем два объекта как DC motors//
    AF_DCMotor motor1(3);
    AF_DCMotor motor2(4);
    int shotPin = 13; // Определяем объект как затвор DSLR//
    void setup() {
    Serial.begin(9600); // set up Serial library at 9600 bps//
    Serial.println("Motor test2");

    motor1.setSpeed(255); // Set motor 1 to maximum speed
    motor2.setSpeed(100); // Set motor 2 to half speed

    motor1.run(FORWARD);
    motor1.run(RELEASE);
    motor1.run(BACKWARD); // run in reverse
    motor2.run(FORWARD);
    motor2.run(RELEASE);
    motor2.run(BACKWARD); // run in reverse
    }
    void loop() {
    //Задаем направление движение вперед
    motor1.run(FORWARD);
    //пауза 3 секунды - двигатель крутится
    delay(3000);
    //Останавливаем двигатель, и пауза 3 сек.
    motor1.run(RELEASE);
    delay(3000);
    //Переключаем направление вращения
    motor1.run(BACKWARD);
    //пауза 3 секунды - двигатель крутится
    delay(3000);


    //Задаем направление движение вперед
    motor2.run(FORWARD);
    //пауза 3 секунды - двигатель крутится
    delay(3000);
    //Останавливаем двигатель, и пауза 3 сек.
    motor2.run(RELEASE);
    delay(3000);
    //Переключаем направление вращения
    motor2.run(BACKWARD);
    //пауза 3 секунды - двигатель крутится
    delay(3000);
    }


    Помогите плз..
     
  2. Unixon

    Unixon Оракул Модератор

    Не нужна вам библиотека AFMotor, у adafruit их motorshield управляется по другому.

    Код (Text):
    #define PIN_MDIR_1 4
    #define PIN_MDIR_2 7
    #define PIN_MPWR_1 5
    #define PIN_MPWR_2 6

    void test()
    {
     // channel 1
     digitalWrite(PIN_MDIR_1, LOW);
     digitalWrite(PIN_MPWR_1, HIGH);
     delay(3000);
     digitalWrite(PIN_MPWR_1, LOW);
     delay(100);
     digitalWrite(PIN_MDIR_1, HIGH);
     digitalWrite(PIN_MPWR_1, HIGH);
     delay(3000);
     digitalWrite(PIN_MPWR_1, LOW);

     // channel 2
     digitalWrite(PIN_MDIR_2, LOW);
     for (byte i = 0; i < 255; i++)
     {
      analogWrite(PIN_MPWR_2, i);
      delay(100);
     }
     for (byte i = 255; i > 0; i--)
     {
      analogWrite(PIN_MPWR_2, i);
      delay(100);
     }
     digitalWrite(PIN_MDIR_2, HIGH);
     for (byte i = 0; i < 255; i++)
     {
      analogWrite(PIN_MPWR_2, i);
      delay(100);
     }
     for (byte i = 255; i > 0; i--)
     {
      analogWrite(PIN_MPWR_2, i);
      delay(100);
     }
     digitalWrite(PIN_MPWR_2, LOW);
    }

    void setup()
    {
     pinMode(PIN_MDIR_1, OUTPUT);
     pinMode(PIN_MDIR_2, OUTPUT);
     pinMode(PIN_MPWR_1, OUTPUT);
     pinMode(PIN_MPWR_2, OUTPUT);
      //
      test();
    }

    void loop()
    {
     int pot = analogRead(A0);
     byte dir = 0;
     byte pwr = 0;
     dir = (pot >= 512);
     if (pot >= 512) pwr = (pot-512)/2; else pwr = (511-pot)/2;
     digitalWrite(PIN_MDIR_1, dir);
     digitalWrite(PIN_MDIR_2, dir);
     analogWrite(PIN_MPWR_1, pwr);
     analogWrite(PIN_MPWR_2, pwr);
    }
     
    cowan нравится это.
  3. cowan

    cowan Нуб

    Спасибо, так работает! Буду дальше разбираться !