Непрерывное обнаружение кнопок для шагового управления
В настоящее время я работал над кодом для управления шаговым двигателем с помощью кнопок. Так что, в основном, я должен нажать две кнопки, чтобы бежать вперед и назад. но проблема в том, что когда я нажимаю 1-ю кнопку, он обнаруживает эту кнопку и запускает двигатель CW или CCW, а это значит, что он не может обнаружить нажатие другой кнопки, чтобы сделать это против часовой стрелки.
Я понимаю, что программа не обнаруживает вторую кнопку после нажатия 1-й. Пробовал разные варианты, чтобы это сработало. но потерпел неудачу.
есть какие-нибудь предложения?
Вот мой код для справки:
#include <AccelStepper.h>
const int button1Pin = A2 ;
const int button2Pin = A1;
int button1State = 0;
int button2State = 0;
boolean flag1 = 0;
boolean flag2 = 0;
AccelStepper stepper = AccelStepper(1, 8, 9);
void setup()
{
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
Serial.begin(9600);
}
void loop()
{
int sensorReading = analogRead(A0);
int motorSpeed = map(sensorReading, 0, 1023, 500, 1000);
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
stepper.setMaxSpeed(2000);
stepper.setSpeed(motorSpeed);
if (button1State == HIGH)
{
stepper.setSpeed(motorSpeed);
Serial.print("ok");
stepper.runSpeed();
}
if (button2State == HIGH)
{
Serial.print("ok2");
stepper.setSpeed(-motorSpeed);
stepper.runSpeed();
}
}
Другая проблема в этом текущем коде, он не может обнаружить вход потенциометра внутри цикла if ( button state) {}.
это было бы большим подспорьем, указывая на мои ошибки.
1 ответ
Я реализовал ваш код здесь на UNO, используя 2 кнопки (с закомментированными функциями шагового двигателя), и, похоже, он работает нормально. Когда я нажимаю кнопку 1, я получаю множество распечаток "ок" до тех пор, пока кнопка удерживается нажатой. Когда я нажимаю кнопку 2, происходит то же самое, за исключением "ok2" вместо "ок".
Вот код, который я использовал:
/*
Name: TwoPushButtonTest.ino
Created: 9/28/2020 2:36:07 PM
Author: FRANKNEWXPS15\Frank
*/
//#include <AccelStepper.h>
const int button1Pin = A2;
const int button2Pin = A1;
int button1State = 0;
int button2State = 0;
boolean flag1 = 0;
boolean flag2 = 0;
//AccelStepper stepper = AccelStepper(1, 8, 9);
void setup()
{
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
Serial.begin(115200);
}
void loop()
{
//int sensorReading = analogRead(A0);
//int motorSpeed = map(sensorReading, 0, 1023, 500, 1000);
button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
//stepper.setMaxSpeed(2000);
//stepper.setSpeed(motorSpeed);
if (button1State == HIGH)
{
Serial.print("ok");
//stepper.setSpeed(motorSpeed);
//stepper.runSpeed();
}
if (button2State == HIGH)
{
Serial.print("ok2");
//stepper.setSpeed(-motorSpeed);
//stepper.runSpeed();
}
}
и вот схема подключения:
Обратите внимание на два 10-килокалорийных выпадающих резистора. Если их нет, то входы A2/A3 неопределенны всякий раз, когда кнопки находятся в состоянии "отключено", и может произойти что угодно.
- Проблема подключения кнопки к шаговому двигателю
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Управление направлением шагового двигателя с помощью кнопок.
- Как прервать функцию цикла и перезапустить ее?
См. [Arduino - кнопка не работает](https://arduinogetstarted.com/faq/button-does-not-work), @Rozona Zoro
Привет не может ли это быть сделано просто путем кодирования?, @Ihsan Ahmad Siddiquee
Что говорит ваш отладочный вывод? Она, наверное, много печатает. Как часто он меняется между ok и ok2? Добавьте состояние "стоп" (с последовательным отладочным выходом), забудьте о двигателе, пока не увидите ожидаемые выходные линии должным образом. Что должно произойти, если нажать обе кнопки? Должно ли это заглушить мотор?, @DataFiddler
"Это означает, что он не может обнаружить нажатие другой кнопки, чтобы сделать его против часовой стрелки" Почему это? Как вы подключили кнопки. | Кроме того, я бы установил максимальную скорость в функции "настройка", так как вам нужно сделать это только один раз., @Swedgin
это выглядит здорово, есть ли что-нибудь еще, что мне нужно сделать, чтобы добавить степпер, я немного борюсь, но с некоторыми дружелюбными создателями, помогающими мне, я знаю, что я получу эту сортировку. как я новичок на этом сайте, G'Day ИЗ АВСТРАЛИИ!!!!!!, @Big Al 62