Управление шаговым двигателем - запуск и остановка кнопкой.
- Войдите на сайт для отправки комментариев
Пнд, 28/09/2015 - 00:21
Здравствуйте! Пробую разобратся с ардуино. Опыта в програмировании 0. Для начала хотел-бы научится управлять шаговым двигателем - 28BYJ-48. Мне необходимо управлять им кнопкой - т.е. нажал - он поехал, нажал еще раз - остановился. Я пытаюсь использовать пример работы с кнопкой и что-то не получается - мотор делает один шаг, хотя в родном примере, те-же функциии заставляют его непрерывно вращатся шаг за шагом...
#include <Stepper_28BYJ.h> //Библиотека для управления мотором int val=0; const int stepsPerRevolution = 4078; // количество шагов на один оборот const int button = 14; const int led = 13; Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 8,9,10,11); // инициализируем библиотеку Stepper_28BYJ на выходы 8-11 int stepCount = 0; // количество шагов, которые мотор уже сделал void setup() { pinMode(led, OUTPUT); pinMode (button, INPUT); } void loop() { if(digitalRead(button)==HIGH)//если кнопка нажата ... { val++;// прибавляем к переменной 1 при каждой смене цикла. delay(500);//небольшая защита от "дребезга" контактов кнопки } if(val>=1) { digitalWrite(led,!digitalRead(led));//инвертируем состояние пина if(digitalRead(led)==HIGH) //если светодиод работает ... { myStepper_28BYJ.step(1); // делаем 1 шаг delay(5); stepCount++; //добавляем количество шагов по одному т.к. процедура блокирует процесс } val=0; } }
а если заменить delay(500) на delay(10)?
тогда мотор крутится пока я держу кнопку! Но мне нужно чтобы он крутился пока горит светодиод.. я вообще не могу понять почему так происходит...
Мне кажется, что ты перепутал 2 части кода. место с
val=0; не правильное. зачем ты его сбрасываешь? И шаг надо вынест за пределы места, где происходит переключение светодиода. У меня так получилось...
Спасибо. Все работает. У меня кстати мотор был привяан не к кнопке, а к состоянию светодиода, потому что да - переменная val - отвечала за состояние кноки и сразу после нажатия сбрасывала - я просто тупо скопипастил код потомучто) Но все равно по логике должно было работать. Буду разбиратся. Главное есть правильный пример.