#include <Stepper.h> //подключение библиотеки
#include <Bounce2.h>;
const int stepsPerRevolution = 200; //количество шагов на оборот
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); //управление выводами 8 - 11
int stepCount = 0; //количество шагов, которое сделал двигатель
const int pinButtonClockwise = 2;
const int pinButtonStart = 5;
const int pinButtonCounterclockwise = 4;
int curButtonStart = LOW;
int lastButtonStart = LOW;
int curButtonClockwise = LOW;
int lastButtonClockwise = LOW;
int curButtonCounterclockwise = LOW;
int lastButtonCounterclockwise = LOW;
// Создаем объект
Bounce debouncer1 = Bounce();
// Создаем объект
Bounce debouncer2 = Bounce();
// Создаем объект
Bounce debouncer3 = Bounce();
void setup() {
Serial.begin(9600);
pinMode(pinButtonStart, INPUT_PULLUP);
pinMode(pinButtonClockwise, INPUT_PULLUP);
pinMode(pinButtonCounterclockwise, INPUT_PULLUP);
// Даем бибилотеке знать, к какому пину мы подключили кнопку
debouncer1.attach(pinButtonClockwise);
debouncer1.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
// Даем бибилотеке знать, к какому пину мы подключили кнопку
debouncer2.attach(pinButtonStart);
debouncer2.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
// Даем бибилотеке знать, к какому пину мы подключили кнопку
debouncer3.attach(pinButtonCounterclockwise);
debouncer3.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
}
bool isButtonClockwisePressed = false;
bool isButtonStartPressed = false;
bool isButtonCounterclockwisePressed = false;
void pressButtonClockwise()
{
// Получаем значение кнопки
int curButtonClockwise = debouncer1.read();
if (!isButtonCounterclockwisePressed)
{
if (curButtonClockwise == LOW && lastButtonClockwise == HIGH)
{
isButtonClockwisePressed = !isButtonClockwisePressed;
}
lastButtonClockwise = curButtonClockwise;
}
}
void pressButtonStart()
{
// Получаем значение кнопки
int curButtonStart = debouncer2.read();
if (curButtonStart == LOW && lastButtonStart == HIGH)
{
isButtonStartPressed = !isButtonStartPressed;
}
lastButtonStart = curButtonStart;
}
void pressButtonCounterclockwise()
{
// Получаем значение кнопки
int curButtonCounterclockwise = debouncer3.read();
if (!isButtonClockwisePressed)
{
if (curButtonCounterclockwise == LOW && lastButtonCounterclockwise == HIGH)
{
isButtonCounterclockwisePressed = !isButtonCounterclockwisePressed;
}
lastButtonCounterclockwise = curButtonCounterclockwise;
}
}
void loop()
{
// Даем объекту бибилотеки знать, что надо обновить состояние - мы вошли в новый цкил loop
debouncer1.update();
debouncer2.update();
debouncer3.update();
pressButtonClockwise();
pressButtonCounterclockwise();
pressButtonStart();
if (isButtonStartPressed)
{
int sensor = analogRead(A0); // чтение значения потенциометра
int motorSpeed = map(sensor, 0, 1023, 0, 100); // масштабирование этого значения
if (motorSpeed > 0)
{
if (isButtonClockwisePressed)
{
Serial.println(isButtonClockwisePressed);
myStepper.setSpeed(motorSpeed); //установка нового значения скорости
myStepper.step(stepsPerRevolution / 100); // сделать 1/100 полного оборота
}
if (isButtonCounterclockwisePressed)
{
myStepper.setSpeed(motorSpeed); //установка нового значения скорости
myStepper.step(-stepsPerRevolution / 100); // сделать 1/100 полного оборота
}
}
}
}