Я только начал изучать Arduino. Я подумал о том, чтобы поработать с Роботом, на котором я хочу получить некоторую автономию. Я застрял, пытаясь понять управление двигателем для двигателя постоянного тока. Я попытался найти ресурсы, но не могу найти тот, который адекватно объясняет мою проблему. Я не могу понять (будучи подражателем compi), как или что я делаю неправильно, написав код для двигателя.Освещение контроллера контроллера Arduino Uno
Мой код только для запуска двигателей для теста:
// MotorA
int dir1PinA = 7;
int dir2PinA = 5;
int speedPinA = 6;
//motor B
int dir1PinB = 4;
int dir2PinB = 2;
int speedPinB = 3;
void setup() {
//Serial.begin(9600);
pinMode (dir1PinA, OUTPUT);
pinMode (dir2PinA, OUTPUT);
pinMode (speedPinA,OUTPUT);
pinMode (dir1PinB, OUTPUT);
pinMode (dir2PinB, OUTPUT);
pinMode(speedPinB, OUTPUT);
// put your setup code here, to run once:
}
void loop() {
analogWrite(speedPinA, 500);
analogWrite(speedPinB, 500);
digitalWrite (dir1PinA, LOW);
digitalWrite (dir2PinA, HIGH);
digitalWrite (dir1PinB,HIGH);
digitalWrite (dir2PinB, LOW);
// put your main code here, to run repeatedly:
}
Я просто пытаюсь запустить двигатель при определенной скорости без толку. Я нашел образец кода, который использует тот же метод для управления двигателем, но имеет только дополнительный цикл и переменнуюspeed
.
Тест код, который работает в:
//Motor A
int dir1PinA = 7;
int dir2PinA = 5;
int speedPinA = 6;
//motor B
int dir1PinB = 4;
int dir2PinB = 2;
int speedPinB = 3;
unsigned long time;
int speed;
int dir;
void setup()
{
pinMode (dir1PinA, OUTPUT);
pinMode (dir2PinA, OUTPUT);
pinMode (speedPinA, OUTPUT);
pinMode (dir1PinB, OUTPUT);
pinMode (dir2PinB, OUTPUT);
pinMode (speedPinB, OUTPUT);
time = millis();
speed = 0;
dir = 1;
}
void loop()
{
analogWrite (speedPinA, speed);
analogWrite (speedPinB, 555 - speed);
// set direction
if (1 == dir)
{
digitalWrite (dir1PinA , LOW);
digitalWrite (dir2PinA, HIGH);
digitalWrite (dir1PinB, HIGH);
digitalWrite (dir2PinB, LOW);
}
else
{
digitalWrite (dir1PinA, HIGH);
digitalWrite (dir2PinA, LOW);
digitalWrite (dir1PinB, LOW);
digitalWrite (dir2PinB, HIGH);
}
if (millis() - time> 5000)
{
time = millis();
speed += 20;
if (speed> 555) {speed = 0;}
if (1 == dir)
{dir = 0;}
else
{dir = 1;}
}
}
Теперь я понимаю, что есть петли и дополнительные переменные, но теоретически они не должны быть обязаны просто запустить двигатель при определенной скорости. Мой вопрос в том, что Что мне не хватает в верхнем эскизе, который находится во втором, но абсолютно критичен для работы двигателя?
Я хочу извиниться заранее, если это момент noob, но я пробовал и не могу найти логический LOL.
Это не C++ код. Почему у него есть тег C++? Теги здесь имеют конкретное значение, и нецелесообразно просто добавлять их, потому что у них знакомые имена или вы думаете, что они могут привлечь внимание. И то, что отсутствует, четко указано в комментариях в первом коде. Обратите внимание, в частности, на тот, который многократно упоминает *. –