Вращение шаговым двигателем кнопкой
- Войдите на сайт для отправки комментариев
Пт, 27/12/2019 - 22:13
Задача максимально простая, но я не могу найти на форуме ответа. У всех задачи сложнее и не то что мне нужно
Нажал на кнопку двигатель крутится в одну сторону. Нажал на другую кнопку крутиться в другую сторону. Это все. Единственное, может быть я сам уже разберусь и смогу переделать не на кнопки, а на джойстик. Это вопрос уже к органам управления, пока я его еще не решил) Пока что хотя бы с кнопками разобраться
Я в ардуино не эксперт и в программировании тоже, а вот задача такая есть и ардуино есть.
Буду благодарен за помощь
А как вы пытались? Давайте свой код, которым пытались крутить шаговым, пока без кнопок.
А как вы пытались?
Нипанятливый какой :-)
Как только не пытался. Брал скетчи у кого то на форумах и пытался их переделать
Ну вот один из самых, на мой взгляд, рабочих. Так он крутится в одну сторону при нажатии, но очень медленно и только в одну сторону одной кнопкой
#include <Stepper_28BYJ.h> //Библиотека для управления мотором int val=0; const int stepsPerRevolution = 4078; // количество шагов на один оборот const int button = 7; const int led = 13; Stepper_28BYJ myStepper_28BYJ(stepsPerRevolution, 2,3,4,5); // инициализируем библиотеку Stepper_28BYJ на выходы 2-5 int stepCount = 0; // количество шагов, которые мотор уже сделал void setup() { pinMode(led, OUTPUT); pinMode (button, INPUT); } void loop() { if(digitalRead(button)==HIGH)//если кнопка нажата ... { val++;// прибавляем к переменной 1 при каждой смене цикла. delay(10);//небольшая защита от "дребезга" контактов кнопки } if(val>=1) { digitalWrite(led,!digitalRead(led));//инвертируем состояние пина if(digitalRead(led)==HIGH) //если светодиод работает ... { myStepper_28BYJ.step(1); // делаем 1 шаг delay(5); stepCount++; //добавляем количество шагов по одному т.к. процедура блокирует процесс } val=0; } }И что в приведённом коде вам непонятно? Там даже есть комментарии. Если чуть-чуть подумать - то можно доработать под две кнопки.
Непонятно следующее
Led не нужен, можно удалить, окей
"прибавляем к переменной 1 при каждой смене цикла. " что это значит? Что куда мы прибавляем?
Это вообще что? И если светодиод не нужен, нужны ли эти строчки? И если я их удалю, оно работать будет?
myStepper_28BYJ.step(1); // делаем 1 шаг
1 шаг куда?
stepCount++; //добавляем количество шагов по одному т.к. процедура блокирует процесс
Какая процедура блокирует какой процесс?
val=0;
Почему val=0?
Разьяснение всех этих вопросов ни мне, ни вам не выгодно) И долго и бесполезно) Мне то от ардуино надо только эту штуку сделать
Проще, покажите что и как нужно исправить, и то меньше текста и дискуссий будет)
Если вам не надо понимать, а надо только сделать - есть раздел "ищу исполнителя". Там на возмездной основе вам реализуют все ваши хотелки.
А удастся ли на джойстик переделать, если уже даже на начальном этапе проблемы...
Я понял, буду разбираться
Не знаю, если захотеть, то удастся
Ну что за риторические вопросы :)
Так он крутится в одну сторону при нажатии, но очень медленно и только в одну сторону одной кнопкой
https://youtu.be/dHFiCSxX4ec?t=24
Разьяснение всех этих вопросов ни мне, ни вам не выгодно) И долго и бесполезно) Мне то от ардуино надо только эту штуку сделать
Тогда заказывайте эту штуку на коммерческой основе и не мучайтесь.
Проще, покажите что и как нужно исправить, и то меньше текста и дискуссий будет)
Кому проще? Мне - нет. Показывать что-то человеку, который не понимает и не хочет понимать - то ещё удовольствие.
А чего не удастся-то? Я вот на днях тормозные колодки в авто поменял, хотя даже не знаю как они выглядят.
Согласен с Квоном. Никакой романтики!
А открыли бы тему на "тормозном" форуме , то узнали бы все.
Вот шо да, то да! Заодно ещё узнал бы куда там посылают за фразу "вам тут на пять минут работы, а вы за бабки сразу, я вот типа на ардуино ру бесплатно консультирую" :-)))
Задача максимально простая, но я не могу найти на форуме ответа. У всех задачи сложнее и не то что мне нужно
Нажал на кнопку двигатель крутится в одну сторону. Нажал на другую кнопку крутиться в другую сторону. Это все. Единственное, может быть я сам уже разберусь и смогу переделать не на кнопки, а на джойстик. Это вопрос уже к органам управления, пока я его еще не решил) Пока что хотя бы с кнопками разобраться
Я в ардуино не эксперт и в программировании тоже, а вот задача такая есть и ардуино есть.
Буду благодарен за помощь
https://photoscs.wordpress.com/2014/03/20/arduino-stepper-code-basic/
// define a constant value named stepPin and assign the value 9 to it - this value will not change during our code // this assumes digital pin 9 of your Arduino is attached to the step input of your driver #define stepPin 9 // define a constant value named dirPin and assign the value 8 to it - this value will not change during our code // this assumes digital pin 8 of your Arduino is attached to the step input of your driver #define dirPin 8 // define a variable, name stepCounter, which keeps track of how many steps we've taken - this value will change during our code based on position byte stepCount = 0; // setup() loop, the Arduino only runs through this once void setup() { // digital pins on the Arduino can only be either set as an output or input - in our case we want to send data to the driver, so we choose output pinMode(stepPin , OUTPUT); pinMode(dirPin , OUTPUT); // let's set an initial value of low to both our step and dir pins, we could easily write false or 0 instead of LOW digitalWrite(stepPin , LOW); digitalWrite(dirPin , LOW); } // loop() loop, the Arduino continuously cycles through this as fast as it can void loop() { if (stepCount <= 100) { digitalWrite(dirPin, HIGH); // move in this direction if we've moved less than 100 steps } else { digitalWrite(dirPin, LOW); // move in the opposite direction if we've moved 100 steps or more } stepCount = stepCount + 1; // increment how far we've stepped by 1 step // once we've moved a total of 200 steps, set our stepCounter to 0 so that we can repeat the move if (stepCount > 200) { stepCount = 0; } // set a HIGH value to our step pin, this turns the voltage on for that pin digitalWrite(stepPin , HIGH); // let's wait here for 50 milliseconds; note the units, this means 0.05s delay(50); // let's set our step pin to false, this turns the voltage off for that pin and gives us the on/off cycle we need digitalWrite(stepPin , LOW); // wait another 50 milliseconds after which time we loop back to the beginning of the loop() loop delay(50); }Добавить кнопку и поменять поменять строку #26 ,
Класс !
Чел с русскими комментариями врубаться не хочет, а ему ещё и на инглише загадку подкинули :)
Реально бесит, когда с таким уровнем знаний в "песочницу" идти не хотят :(