// Энкодер
#define ENCODER_CLK 11
#define ENCODER_DT 12
/*
// Кнопки
const int buttonStepL = 4; // номер входа, подключенный к кнопке StepL. Ввод
const int buttonStepR = 3; // номер входа, подключенный к кнопке StepR. Ввод
*/
// Драйвер A4988
const int pinStep = 6; // Шаг двигателя. Выход
const int pinDir = 7; // Направление движения. Выход
const int move_delay = 10; // Задержка между шагами
/*
int buttonStateL = 0; // переменная для хранения состояния кнопки StepL
int buttonStateR = 0; // переменная для хранения состояния кнопки StepR
*/
// Массив для выбора размера шага
//int StepModePins[3] = {8, 7, 6}; // Пины задающие размер шага
//const int StepModePinsCount = 3; // Размер массива StepModePins
/* Массив, хранящий состояния контактов MS1, MS2, MS3 драйвера,
при которых задаются разные режимы вращения: полношаговый, 1/2, 1/4, 1/8, 1/16 шага */
/*
bool StepMode[5][3] = {
{ 0, 0, 0},
{ 1, 0, 0},
{ 0, 1, 0},
{ 1, 1, 0},
{ 1, 1, 1} };
*/
//const int StepModeSize = 5; // Размер массива StepMode
void setup() {
pinMode(pinStep, OUTPUT); // Устанавливаем пин Step в режим вывода
pinMode(pinDir, OUTPUT); // Устанавливаем пин Direction в режим вывода
/*
pinMode(buttonStepL, INPUT); // Инициализируем пин, подключенный к кнопке R, как вход
pinMode(buttonStepR, INPUT); // Инициализируем пин, подключенный к кнопке L, как вход
*/
//устанавливаем начальный режим
digitalWrite(pinStep, LOW);
digitalWrite(pinDir, LOW);
// Энкодер
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
if (dtValue == HIGH) {
digitalWrite(pinDir, HIGH);
digitalWrite(pinStep, HIGH);
}
if (dtValue == LOW) {
digitalWrite(pinDir, LOW);
digitalWrite(pinStep, HIGH);
}
}
void loop() {
/*
buttonStateR = digitalRead(buttonStepR); // считываем значения с входа кнопки R
buttonStateL = digitalRead(buttonStepL); // считываем значения с входа кнопки L
// проверяем нажата ли кнопка R
// если нажата, то buttonStateR будет HIGH:
if (buttonStateR == HIGH) {
// крутим направо
digitalWrite(pinDir, HIGH);
delay(move_delay);
digitalWrite(pinStep, HIGH);
delay(move_delay);
digitalWrite(pinStep, LOW);
}
// проверяем нажата ли кнопка L
// если нажата, то buttonStateR будет HIGH:
if (buttonStateL == HIGH) {
// крутим налево
digitalWrite(pinDir, LOW);
delay(move_delay);
digitalWrite(pinStep, HIGH);
delay(move_delay);
digitalWrite(pinStep, LOW);
}
*/
}