Серводвигатель не работает должным образом с Arduino
У меня возникла проблема с моим режимом работы — автоматической подачей еды с помощью поезда.
У меня есть 4 серводвигателя, функция первого серводвигателя — подключить направляющую к столу №1, второго — к столу №2, а третьего и четвертого — к столу №3.
Все двигатели с первого раза работают хорошо. но когда я перезагружаюсь и даю команду для второй или третьей таблицы, поведение двигателей меняется, и они начинают вращаться в произвольных направлениях, которые не определены в коде. но иногда все работает хорошо, а иногда двигатели работают не так, как ожидалось.
Я проверил все основания и полномочия. они все хороши.
Пожалуйста, помогите мне, так как через два дня я получу окончательный вариант.
Код приведен ниже.. Пожалуйста, проверьте и сообщите мне, есть ли у меня логическая ошибка в моем коде или какая-либо другая проблема, связанная с оборудованием, а также сообщите мне, есть ли у них какой-либо кеш в Arduino, который мне нужно очистить, или что-то в этом роде.
#include <Servo.h>
Servo motor; // создаем объект сервопривода для управления сервоприводом
// двенадцать сервообъектов можно создать на большинстве плат
const int button1 = A1;
const int button2 = A2;
const int button3 = A3;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
pinMode(button3, INPUT);
servo1.attach(9);
servo2.attach(11);
servo3.attach(6);
servo4.attach(5);
Serial.begin(9600);
}
void loop() {
buttonState1 = digitalRead(button1);
buttonState2 = digitalRead(button2);
buttonState3 = digitalRead(button3);
if (buttonState1 == HIGH) {
int pos1 = 180;
int pos2 = 180;
int pos3 = 90;
int pos4 = 90;
for (int pos2=90; pos2 <= 180; pos2 += 1) {
servo2.write(pos2);
delay(0);
}
for (int pos1=90; pos1 <= 180; pos1 += 1) {
servo1.write(pos1);
delay(50);
}
while (pos1 >= 0 && pos2 >= 0 && pos3 >= 0 && pos4 <= 180) {
// servo1.writeMicroсекунды (1000);
// servo1.write(pos1);
// servo2.write(pos2);
servo3.write(pos3);
servo4.write(pos4);
delay(200000); // задержка 500 мс
}
}
else if (buttonState2 == HIGH) {
int pos5 = 90;
int pos6 = 0;
for (int pos5=90; pos5 >= 0; pos5 -= 1) {
servo1.write(pos5);
delay(0);
}
for (int pos6=90; pos6 >= 0; pos6 -= 1) {
servo2.write(pos6);
delay(50);
}
while ( pos6 <= 180 && pos5 <= 180) {
// servo2.write(pos6);
// servo1.write(pos5);
delay(200);
}
// while ( pos5 <= 180) {
// servo1.write(pos5);
// задержка(200);
// }
}
else if (buttonState3 == HIGH) {
int pos9 = 90;
int pos10 = 180;
int pos11 = 0;
int pos12 = 180;
for (int pos10=90; pos10 <= 180; pos10 += 1) {
servo2.write(pos10);
delay(0);
}
for (int pos9=90; pos9 >= 0; pos9 -= 1) {
servo1.write(pos9);
delay(0);
}
for (int pos11=90; pos11 >= 0; pos11 -= 1) {
servo3.write(pos11);
delay(30);
}
for (int pos12=90; pos12 <= 180; pos12 += 5) {
servo4.write(pos12);
delay(50);
}
while ( pos9 <= 180 && pos10 >= 0 && pos11 >= 0 && pos12 >= 0) {
// servo1.write(pos9);
// servo2.write(pos10);
// servo3.write(pos11);
// servo4.write(pos12);
// задержка(200);
}
// while ( pos9 <= 180) {
// servo1.write(pos9);
// задержка(200);
// }
}
}
@Kashan Ahsan, 👍-1
Обсуждение1 ответ
Я думаю, что причина, по которой вы не получаете ожидаемого результата, заключается в том, что вы используете циклы while
в if условии
.
Поскольку у вас циклы не имеют условий завершения. В случае нажатия первой кнопки
вы получите то, что хотите, потому что у вас есть только один не завершающийся цикл while, а в случае с кнопкой 2 и кнопкой 3
их два. циклы и оба не завершаются.
В этом случае, если ваша логика входит в первый цикл while, она никогда не выходит из него и не переходит во второй цикл.
Я не знаю, что вы задумали, поэтому не могу предлагать изменения в логике, но добавление завершения в цикл while может дать ожидаемые результаты.
- Как заставить сервопривод вращаться на угол больше 180°
- Как повернуть серводвигатель на определенный угол?
- 6 + 1 двигательей подключенных к arduino uno?
- Управление цифровым сервоприводом JX PDI-6221MG с помощью Arduino
- Обратная связь по положению для шагового двигателя
- Почему сервопривод вращается на 360 градусов?
- Как Arduino Uno может поддерживать до 12 сервоприводов, если у него всего 6 цифровых выводов ШИМ?
- Управление серводвигателем с помощью сенсорного датчика
Попробуйте написать минимальный пример, который работает только для одного из ваших «треков», и тогда вы увидите, в чем заключается проблема., @MichaelT