Код: Выделить всё
#include <AccelStepper.h>
#define HALFSTEP 8
// Инициализируемся с последовательностью выводов IN1-IN3-IN2-IN4
// для использования AccelStepper с 28BYJ-48
AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);
#define PIN_BUTTON1 6 // пин кнопки 1
bool button_state1 = false; // статус кнопки 1
uint32_t ms_button = 0;
uint32_t ms_auto_click = 0;
uint8_t mig = 0;
void setup() {
Serial.begin(9600);
Serial.println("Test button ...");
pinMode(PIN_BUTTON1, INPUT_PULLUP);
stepper1.setMaxSpeed(900);
stepper1.setSpeed(900);
}
void loop() {
Func_buttons_control();
// stepper1.runSpeed();
}
void Func_buttons_control()
{
uint32_t ms = millis();
bool pin_state1 = digitalRead(PIN_BUTTON1); // 1 кнопка
// Фиксируем нажатие кнопки 1
if(mig == 0 && pin_state1 == LOW && !button_state1 && ( ms - ms_button ) > 50 ){
button_state1 = true;
ms_button = ms;
Serial.println("Press key"); //короткое нажатие
mig = 1;
}
// После 2000 мс нажатия кнопки каждые 500 мс фиксируем событие нажатия кнопки 1
if( pin_state1 == LOW && ( ms - ms_button ) > 2000 && ( ms - ms_auto_click )>500 ){
ms_auto_click = ms;
Serial.println("Auto press key"); //длительное нажатие
mig = 2;
}
// Фиксируем отпускание кнопки 1
if(mig == 2 && pin_state1 == HIGH && button_state1 && ( ms - ms_button ) > 50 ){
button_state1 = false;
ms_button = ms;
Serial.println("No Press"); //действие после отпуска длительного нажатия
mig = 0;
stepper1.stop();
}
if(mig == 1 ){stepper1.runSpeed();}
}
Вернуться в «Прочая электроника»
Сейчас этот раздел просматривают: 3 гостя