Биполярный шаговый двигатель

sergeyovs1980
Offline
Зарегистрирован: 20.09.2015

Здравствуйте.Уважаемые форумчане подскажите как добавить третью кнопку в этом скетче после нажатия на которую шаговик вращался сначала чуть вперёд а затем чуть назад (без удержания кнопки).Хочу сделать дозатор паяльной пасты. С вращением двумя кнопками с удержанием разобрался( вперёд - назад).А вот дабавить трётью ... увы  )

#define step_pin 3    // Define pin 3 as the steps pin
#define dir_pin 2    // Define pin 2 as the direction pin
#define MS1 5     // Define pin 5 as "MS1"
#define MS2 4       // Define pin 4 as "MS2"
#define button1 7
#define button2 8


int direction;    // Variable to determine the sense of the motor
int steps = 500;      // Number of steps that you want to execute (for full steps, 200 = 1 turn)

void setup() {
   pinMode(MS1, OUTPUT);     // Configures "MS1" as output
   pinMode(MS2, OUTPUT);     // Configures "MS2" as output
   pinMode(dir_pin, OUTPUT);    // Configures "dir_pin" as output
   pinMode(step_pin, OUTPUT);    // Configures "step_pin" as output
   
   pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);
   digitalWrite(MS1, LOW);      // Configures the steps division (see above)
   digitalWrite(MS2, LOW);    // Configures the steps division (see above)
   digitalWrite(dir_pin, LOW);   // Sense (HIGH = anti-clockwise / LOW = clockwise) - It can be also changed
   
}

void loop() { 

   if (digitalRead(button1) == LOW || digitalRead(button2) == LOW) { // ako ni jedan taster nije pritisnut
  digitalWrite(step_pin, LOW);
  digitalWrite(step_pin, LOW);
   }
  
  
 if (digitalRead(button1) == LOW && digitalRead(button2) == HIGH) { // ako je taster 1 idle, a taster 2 pritisnut
    digitalWrite(dir_pin, LOW); // move in the LOW direction
    digitalWrite(step_pin, LOW);
    delay(3);
    digitalWrite(step_pin, HIGH);
    delay(3);
    
  } else if (digitalRead(button1) == HIGH && digitalRead(button2) == LOW) { // ako je taster 2 idle, a taster 1 pritisnut
    digitalWrite(dir_pin, HIGH); // move in HIGH direction
    digitalWrite(step_pin, LOW);
    delay(3);
    digitalWrite(step_pin, HIGH);
    delay(3);
  }
  
  
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да можно и на двух кнопках сделать

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ну можно и на одной кнопке.:)  одно нажатие вперед, 2 нажатие назад ,3 нажатие вперед,-назад 4 стоп.  и это без длиных нажатий. Вот только ТС поленился перевести комментарии. Так что я поленюсь делать за ТС его хотелку.

sergeyovs1980
Offline
Зарегистрирован: 20.09.2015

В ближайщем будущем можно будет вообще без кнопок - телепатия ) А пока как сделать с тремя кнопками?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

выделить в отдельную функцию объединив обе ваши и удалив условия, на нажатие выставить флаг, в лупе если был выставлен флаг выполнить эту функцию, в самой функции после выполнения сбрасываем флаг, как бы всё