Шаговые двигатели Adafruit Motor Shield не вращаются.
Adafruit Motor Shield подключен к двум шаговым двигателям, которые подключены правильно и работают, когда я просто использую функцию onestep. Я понимаю, что не могу управлять обоими одновременно, поэтому использую цикл while с двумя операторами if. Двигатели были подключены:
Левый двигатель был подключен:
Зеленый -> м3+
Белый -> m3-
Красный -> m4+
Синий -> m4-
Правый двигатель был подключен:
Красный -> M2+
Синий -> M2-
Зеленый -> M1+
Черный -> M1-
Вот код:
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *leftMotor = AFMS.getStepper(200, 2);
Adafruit_StepperMotor *rightMotor = AFMS.getStepper(200, 1);
//79 steps per half inch
//half inch is a coordinate
//declaring global variables for Hypotenuses (cord lengths)
int leftHyp;
int rightHyp;
int prevX = 0;
int prevY = 0;
//space from shaft to shaft is 30"
//calculating function
void CordCalc(int xCord, int yCord)
{
Serial.begin(9600);
//cords start at 0,0
xCord = xCord - prevX;
yCord = yCord - prevY;
int xSquared = sq(xCord);
int ySquared = sq(yCord);
int addSquares = xSquared + ySquared;
int leftHyp = sqrt(addSquares);
//now for the right
int rightX = 60 - xCord;
int rightXsq = sq(rightX);
int rightSquares = rightXsq + ySquared;
int rightHyp = sqrt(rightSquares);
//leftMotor->step(leftHyp * 79, FORWARD, MICROSTEP);
//rightMotor->step(rightHyp * 79, FORWARD, MICROSTEP);
int lStepsTaken = 0;
int rStepsTaken = 0;
leftHyp = leftHyp * 79;
rightHyp = rightHyp * 79;
bool stepsComplete = false;
//This is the section for moving the Motors
while(stepsComplete == false) {
if(lStepsTaken <= leftHyp) {
leftMotor->onestep(FORWARD,DOUBLE);
lStepsTaken++;
Serial.print("Left");
}
if(rStepsTaken < rightHyp) {
rightMotor->onestep(FORWARD,DOUBLE);
rStepsTaken++;
Serial.print("Right!");
}
if(rStepsTaken >= leftHyp && lStepsTaken >= leftHyp) {
stepsComplete = true;
}
}
int prevY = yCord;
int prevX = xCord;
stepsComplete = false;
}
void setup()
{
// direction from project point of view
int leftLength = 0;
int rightLength = 0;
leftMotor->setSpeed(122);
rightMotor->setSpeed(122);
Serial.begin(9600);
CordCalc(15, 15);
}
void loop()
{
}
Цикл намеренно пуст, поскольку переход к координатам осуществляется только один раз.
@NikolaPi, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 0
Отсутствующая строка — afms.begin(); которая запускает связь с шилдом двигателя adafruit.
,
@NikolaPi
Смотрите также:
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Почему Adafruit motor shield не крутит моторы?
- Запустить два степпера одновременно
- Двигатель постоянного тока не вращается, издается звуковой сигнал, а также присутствует запах гари.
- Мой моторный щит сломан?
- Как правильно использовать микрошаговый драйвер с шаговым двигателем более низкого напряжения
- Adafruit Motorshield v2.3 не работает
- Двигатель постоянного тока с драйвером L289N не может установить обороты ниже 130
вам действительно нужно правильно отформатировать свой код. ...правильные отступы очень помогают при отладке кода, @jsotola