/*
Задача: с каждым нажатием на энкодер подавать импульс на шаговый двигатель
Запоминать количество шагов(импульсов ) и при нажатии на кнопку
возвратить двигатель в исходное состояние
*/
//volatile int j=8;
volatile int come = 0; //переменная подсчета шагов в обратную сторону
volatile int step =200;//заданное количество шагов
int dirpin = 4; //пин задания направления
volatile boolean flag=0; //булевая переменная истинности
int stepin=5; //пин шага(импльса) мотора
volatile int enablepin=7; //пин блокировки двигателя
volatile int mytime =0; //переменная подсчета шагов
//volatile int come = mytime;
//int mytimesave=0;
int keys=0; //переменная сложения данных
int pinled=13; // пин светодиода
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(7, OUTPUT);
pinMode(pinled, OUTPUT);
Serial.begin(9600);
}
void loop() {
if(mytime<5){
for(int i=0;i<step; ++i){
digitalWrite(5, HIGH); //step motor
delay(i); // задержка импульса(чем меньше значение, тем быстрее вращается двигатель)
mytime=i; //увеличиваем значение mytime
Serial.print(mytime); //
//delay(150);
digitalWrite(5, LOW);
delay(25);
}
}
digitalWrite(7, HIGH);//Enable блокируем движение шагового двигателя
delay(2000); //перед возвратом делаем паузу
if(come<100){
for(int j=0; j<step; j++){
digitalWrite(7, LOW); //разблокировка двигателя
digitalWrite(4, HIGH);//Dir меняем направление движения двигателя
digitalWrite(5, HIGH); //step motor
delay(5);
come=j;//увеличиваем значение come.
digitalWrite(5, LOW);
Serial.print(" ");
Serial.print( j);
delay(25);
}
}else{
come=step;
digitalWrite(7, HIGH);
digitalWrite(13, HIGH);
digitalWrite(4, LOW);
}
}