Есть программа для управления ШД с кнопок, МК arduino nano, Шаговый двигатель 28BYJ-48 с драйвером ULN2003.
Проблема следующая: после нажатия кнопки движок поворачивается на нужное количество шагов, но после этого возвращается на место, в обратную сторону. Как это исправить? Заранее спасибо
02 | #define STEPS 200 // Количество шагов |
03 | Stepper stepper(STEPS, 12, 11, 10, 9); |
05 | int pinButtons1[]={4,7}; |
06 | int lastButtons1[]={0,0}; |
07 | int currentButtons1[]={0,0}; |
16 | for ( int i=0;i<countButtons1;i++) |
18 | currentButtons1[i] = debounce(lastButtons1[i],pinButtons1[i]); |
19 | if (lastButtons1[i] == 0 && currentButtons1[i] == 1) |
23 | stepper.step(10*STEPS); |
25 | stepper.step(-10*STEPS); |
27 | lastButtons1[i] = currentButtons1[i]; |
31 | int debounce( int last, int pin1) |
33 | int current = digitalRead(pin1); |
37 | current = digitalRead(pin1); |
похоже что кнопки без подтяжки (они даже в сетапе не описаны) и ловят из эфира случайные нажатия
Я установил резисторы на 10 кОм на соединение кнопки с землей. как правильно прописать что он не возращался на место?
Я установил резисторы на 10 кОм на соединение кнопки с землей. как правильно прописать что он не возращался на место?
нарисуйте схему, пожалуйста. Я не понимаю что такое "резистор на соединение с землей"
Посмотрите стоки 22-25. Если кнопка нажата - вперед на 10 шагов. Если отпущена - назад. Что не так? Или нажать и держать или закомментировать строку 25.
Посмотрите стоки 22-25. Если кнопка нажата - вперед на 10 шагов. Если отпущена - назад.
посмотрите внимательнее - там else относится к другому условию
вот таким образом кнопка подключена
АчО, намана! Гвозди и палки + чуть-чуть клея. :)) ЭтоЖ по-нашему :))
В правильности подключения я не особо сомневаюсь, ибо все работает как должно. Только вот неясно, почему после нужного количества шагов, он вовзращается в исходное положение в обратную сторону. Проблема скорее всего в коде, но на ардуине совсем недавно начал писать
ответ #4 от господин svm. #5 от господин b707
Проблема следующая: после нажатия кнопки движок поворачивается на нужное количество шагов, но после этого возвращается на место, в обратную сторону. Как это исправить? Заранее спасибо
1
Написать НОРМАЛЬНЫЙ алгоритм работы с кнопкой и перевести его на си++.
Посмотрите стоки 22-25. Если кнопка нажата - вперед на 10 шагов. Если отпущена - назад.
посмотрите внимательнее - там else относится к другому условию
Пардон, погорячился.
Написать НОРМАЛЬНЫЙ алгоритм работы с кнопкой и перевести его на си++.
Есть код для работы с кнопками. Но проблема в том, что в шаговике кнопку надо держать что бы он поворачивался. А что бы кнопку не держать, получился вот такой код. но почему то возвращает вал движка на место и я не догоню с чем это связано
Есть код для работы с кнопками. Но проблема в том, что в шаговике кнопку надо держать что бы он поворачивался. А что бы кнопку не держать, получился вот такой код. но почему то возвращает вал движка на место и я не догоню с чем это связано
проверьте, пожалуйста. мне кажется вы запостили в конфу чуть иной код. чем у вас залит в ардуину.
Есть код для работы с кнопками. Но проблема в том, что в шаговике кнопку надо держать что бы он поворачивался. А что бы кнопку не держать, получился вот такой код. но почему то возвращает вал движка на место и я не догоню с чем это связано
Еще раз говорю про алгоритм. Ну да Вы все лучше знаете...
Короче условия в строке 19 срабатывают при i=0 и i=1 - дальше объяснять?
А для проверки напишите простенькую программу
1
void
loop
()
2
{
3
stepper.step(10*STEPS);
4
stepper.step(-10*STEPS);
5
}
ответ #4 от господин svm. #5 от господин b707
в русском языке слово господин подразумевается как ругательное, лучше говорить товарищ
а для невозврата закомментировать строку 25 (после else)
Не вводите иностранца в заблуждение =)) Это "Интеллегент" - слово ругательное во все времена, а господ сейчас развелось как грязи.
в русском языке слово господин подразумевается как ругательное, лучше говорить товарищ
а для невозврата закомментировать строку 25 (после else)
оба утверждения неверны
в русском языке слово господин подразумевается как ругательное, лучше говорить товарищ
а для невозврата закомментировать строку 25 (после else)
оба утверждения неверны
1. если есть господин подразумевается, что есть и рабы, где там ваши плантации?
2. если закомментировать 25 строку, то по моему мнению не выполнится программа обратного осчёта 200 шагов шагового мотора, а по вашему мнению, что именно она не сделает?
Не вводите иностранца в заблуждение =)) Это "Интеллегент" - слово ругательное во все времена, а господ сейчас развелось как грязи.
я думал их в далёком 1918 ликвидировали, ан нет )))
и, господин из уст женщины, для меня лично звучит уничижительно, крайняя степень мужского шовинизма, не находите???
и, господин из уст женщины, для меня лично звучит уничижительно, крайняя степень мужского шовинизма, не находите???
Обычное вежливое обращение. Вы к группе незнакомых женщин, как обратитесь, эй девки? Лично я, в разговорной речи с незнакомыми, использую во множественном числе - дамы, к молодой девушке - барышня...
Вы ведь не поправляете продавцов на алиэкспрессе, когда величают "другом", а то и вовсе "дорогой", а выходцы из средней азии, часто братом считают? И шо, всех великому и могучему переучивать? Мы по ихнему, в большинстве случаев, совсем никак. ИМХО.
По ихнему, это кто как, общался и с королём Иордании, Хусейном и с Радживом Ганди да и во время Сочинской олимпиады более чем с 20000 (Двадцатью тысячами) пообщался, так что это немножко больше - чем никак )))
Вобщем разобрался самостоятельно, преблема оказалось в том, что условие строки 34 не прописан возврат значения, для случая равенства., то бишь рабочий код выглядит так
01
#include <Stepper.h>
02
#define STEPS 200 // Количество шагов
03
Stepper stepper(STEPS, 12, 11, 10, 9);
04
// клавиши
05
int
pinButtons1[]={4,7};
06
int
lastButtons1[]={0,0};
07
int
currentButtons1[]={0,0};
08
int
countButtons1=2;
09
void
setup
()
10
{
11
stepper.setSpeed(50);
12
}
13
void
loop
()
14
{
15
// проверка нажатия кнопок
16
for
(
int
i=0;i<countButtons1;i++)
17
{
18
currentButtons1[i] = debounce(lastButtons1[i],pinButtons1[i]);
19
if
(lastButtons1[i] == 0 && currentButtons1[i] == 1)
20
// если нажатие...
21
{
22
if
(i==0)
23
stepper.step(10*STEPS);
24
else
25
stepper.step(-10*STEPS);
26
}
27
lastButtons1[i] = currentButtons1[i];
28
}
29
}
30
// Функция сглаживания дребезга
31
int
debounce(
int
last,
int
pin1)
32
{
33
int
current = digitalRead(pin1);
// Считать состояние кнопки
34
if
(last != current)
// если изменилось...
35
{
36
delay(5);
// ждем 5 м с
37
current = digitalRead(pin1);
// считываем состояние кнопки
38
return
current;
// возвращаем состояние кнопки
39
}
40
else
41
{
42
return
last;
43
}
44
}
Вобщем разобрался самостоятельно, преблема оказалось в том, что условие строки 34 не прописан возврат значения, для случая равенства., то бишь рабочий код выглядит так
1
Поздравляю! Вас в это тыкали носом-тыкали, наконец Вы созрели.