Шилд l293d

Тема в разделе "Arduino & Shields", создана пользователем IvanTankist, 4 фев 2021.

  1. IvanTankist

    IvanTankist Нуб

    Здравствуйте форумчане. Столкнулся с такой проблемой. Захотел управлять двигателями постоянного тока с кнопок, через шилд L293D. Написал код, но вместо нормальной работы получается какая-то лажа. Подскажите в чем может быть проблема. Программа компилирует скетч без проблем.
    Код (C++):
    const int buttonPin1 = 32;
    const int ledPin1 =    33;
    const int buttonPin2 = 34;
    const int ledPin2 =    35;
    const int buttonPin3 = 36;
    const int ledPin3 =    37;
    #include <AFMotor.h>    
    AF_DCMotor motor1(1);
    AF_DCMotor motor2(2);
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);
    void setup() {
      pinMode(ledPin1, OUTPUT);
      pinMode(buttonPin1, INPUT);
      pinMode(ledPin2, OUTPUT);
      pinMode(buttonPin2, INPUT);
      pinMode(ledPin3, OUTPUT);
      pinMode(buttonPin3, INPUT);
      motor1.setSpeed(255);
      motor1.run(RELEASE);  
      motor2.setSpeed(255);
      motor2.run(RELEASE);  
      motor3.setSpeed(255);
      motor3.run(RELEASE);  
      motor4.setSpeed(255);
      motor4.run(RELEASE);
    }
    void loop() {
      int buttonState1 = digitalRead(buttonPin1);
    if (buttonState1 == HIGH) {  
      digitalWrite(ledPin1, HIGH);
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
    }
    else {  
      digitalWrite(ledPin1, LOW);
      motor1.run(FORWARD);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
      motor1.setSpeed(255);
      motor2.setSpeed(255);  
      motor3.setSpeed(255);  
      motor4.setSpeed(255);
    }
    int buttonState2 = digitalRead(buttonPin2);
    if (buttonState2 == HIGH) {  
      digitalWrite(ledPin2, HIGH);
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
    }  
    else {  
      digitalWrite(ledPin2, LOW);
      motor1.run(BACKWARD);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
      motor1.setSpeed(255);
      motor2.setSpeed(255);  
      motor3.setSpeed(255);  
      motor4.setSpeed(255);
    }
    int buttonState3 = digitalRead(buttonPin3);
    if (buttonState3 == HIGH) {  
      digitalWrite(ledPin3, HIGH);
      motor1.run(RELEASE);
      motor2.run(RELEASE);
      motor3.run(RELEASE);
      motor4.run(RELEASE);
    }
    else {  
      digitalWrite(ledPin3, LOW);
      motor1.run(RELEASE);
      motor2.run(FORWARD);
      motor3.run(FORWARD);
      motor4.run(FORWARD);
      motor1.setSpeed(255);
      motor2.setSpeed(255);  
      motor3.setSpeed(255);  
      motor4.setSpeed(255);
    }
    }
     
     
  2. b707

    b707 Гуру

    а в чем лажа заключается, можно поподробнее?
    И хорошо бы схему. Кнопки как подключаются? Подтяжка есть?
     
  3. IvanTankist

    IvanTankist Нуб

    Лажа в том, что один более мощный двигатель вообще отказывается работать, 3 поменьше крутятся постоянно, останавливаются только при нажатии на третью кнопку. upload_2021-2-8_16-42-26.png
    Двигатели подключены к шилду, шилд ставится сверху на ардуино. Я использую мегу, что бы иметь свободные входа-выхода.
    Поскольку нигде в эмуляторах не нашел где можно использовать мегу, то вставлю схему на уно из интернета[​IMG]
    Пины к кнопкам 32,34,36
    Пины к светодиодам 33,35,37