Непрерывное обнаружение кнопок для шагового управления

В настоящее время я работал над кодом для управления шаговым двигателем с помощью кнопок. Так что, в основном, я должен нажать две кнопки, чтобы бежать вперед и назад. но проблема в том, что когда я нажимаю 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

Обсуждение

См. [Arduino - кнопка не работает](https://arduinogetstarted.com/faq/button-does-not-work), @Rozona Zoro

Привет не может ли это быть сделано просто путем кодирования?, @Ihsan Ahmad Siddiquee

Что говорит ваш отладочный вывод? Она, наверное, много печатает. Как часто он меняется между ok и ok2? Добавьте состояние "стоп" (с последовательным отладочным выходом), забудьте о двигателе, пока не увидите ожидаемые выходные линии должным образом. Что должно произойти, если нажать обе кнопки? Должно ли это заглушить мотор?, @DataFiddler

"Это означает, что он не может обнаружить нажатие другой кнопки, чтобы сделать его против часовой стрелки" Почему это? Как вы подключили кнопки. | Кроме того, я бы установил максимальную скорость в функции "настройка", так как вам нужно сделать это только один раз., @Swedgin

это выглядит здорово, есть ли что-нибудь еще, что мне нужно сделать, чтобы добавить степпер, я немного борюсь, но с некоторыми дружелюбными создателями, помогающими мне, я знаю, что я получу эту сортировку. как я новичок на этом сайте, G'Day ИЗ АВСТРАЛИИ!!!!!!, @Big Al 62


1 ответ


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 неопределенны всякий раз, когда кнопки находятся в состоянии "отключено", и может произойти что угодно.

,