Управление Шаговыми Двигателями с клавиатуры

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Доброго всем дня!!! Прошу помощи объединить два скетча в один!

в одном скетче, подключены два ШД.

первый управляется с 1 и 2 кнопок,

(1 нажимаешь, пока держишь - крутит влево, 2 нажимаешь, пока держишь - крутит вправо),

второй управляется с 3 и 4 кнопок,

(3 нажимаешь, пока держишь - крутит влево, 4 нажимаешь, пока держишь - крутит вправо).

Вот скетч!

const int stepPin1 = 39;
const int dirPin1 = 38;
const int stepPin2 = 41;
const int dirPin2 = 40;

const int BUTTON1 = 22;
const int BUTTON2 = 23;
const int BUTTON3 = 24;
const int BUTTON4 = 25;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode (stepPin1, OUTPUT);
  pinMode (dirPin1,  OUTPUT);
  pinMode (stepPin2, OUTPUT);
  pinMode (dirPin2,  OUTPUT);
  pinMode (BUTTON1, INPUT);
  pinMode (BUTTON2, INPUT);
  pinMode (BUTTON3, INPUT);
  pinMode (BUTTON4, INPUT);
}

void loop() {
if (digitalRead(BUTTON1) == HIGH) {
   digitalWrite(dirPin1,HIGH);
   digitalWrite(stepPin1,LOW);
}
if (digitalRead(BUTTON2) == HIGH) {
   digitalWrite(dirPin1,LOW);
   digitalWrite(stepPin1,HIGH);
}
if (digitalRead(BUTTON3) == HIGH) {
   digitalWrite(dirPin2,HIGH);
   digitalWrite(stepPin2,LOW);
}
if (digitalRead(BUTTON4) == HIGH) {
   digitalWrite(dirPin2,LOW);
   digitalWrite(stepPin2,HIGH);
}
delayMicroseconds(1000);

if (digitalRead(BUTTON1) == HIGH) {
   digitalWrite(stepPin1,HIGH);
}
if (digitalRead(BUTTON2) == HIGH) {
   digitalWrite(stepPin1,LOW);
}
if (digitalRead(BUTTON3) == HIGH) {
   digitalWrite(stepPin2,HIGH);
}
if (digitalRead(BUTTON4) == HIGH) {
   digitalWrite(stepPin2,LOW);
}
delayMicroseconds(1000);

}

Все работает, все прекрасно!

второй скетч по работе с матричной клавиатурой!

Хочу что управление двигателями было с клавиатуры!

Вот второй скетч, пматричной клаве!

#include <Keypad.h> // Подключаем библиотеку 
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
}; 
byte rowPins[ROWS] = { 26, 27, 28, 29}; 
byte colPins[COLS] = { 30, 31, 32, 33}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
  Serial.begin(9600);
}
void loop(){
  char key = keypad.getKey();
    Serial.println(key); // Передаем название нажатой клавиши в сериал порт
 delay(100);
}

 

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Я в этом деле Новичок, и прошу помочь в данной работе!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А чё новая тема? Старая чем не угодила? Ищите возможность каждый раз получать "текущую нажатость" клавиши а не "один раз получил, а там хоть задержись". Возможно библиотека это умеет - нет, значит надо искать другую или править эту. Я ж всё это уже говорил.

b707
Онлайн
Зарегистрирован: 26.05.2017

библиотека это умеет, вот только что открыл и посмотрел - в ней есть метод keypad.isPressed(char keyChar)

sadman41
Offline
Зарегистрирован: 19.10.2016

Метод-то есть, только работает не так, как ожидается. Вообще - в этой либе без поллитры не разобраться. Я с полчаса ее на обычной кнопке потыкал - подловить состояние "нажата и удерживается" запросто так не вышло.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

в этой либе без поллитры не разобраться

Берите поллитру и разбирайтесь. Или выбросьте её нахрен и напишите всё руками. Ну, или, наконец, ищите другую.

Я смогу присоединиться только в выходной.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Да мне-то зачем писать-искать? Я не выдержал этого флуда и поставил ее глянуть - действительно ли так все плохо. И на самом деле - все непросто ;)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А, сорри, я воспринял это как от ТС.

strarbit
Offline
Зарегистрирован: 12.06.2016

пишите, сделаю

Image already added
 
 
 
Vitali-71
Offline
Зарегистрирован: 25.04.2017

strarbit пишет:

пишите, сделаю

Image already added
 
 
 

А куда писать?

strarbit
Offline
Зарегистрирован: 12.06.2016

webserpantin    gmail

Image already added
 
 
 
Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Есть мысль сделать проект: управление одним ШД через матричную клавиатуру. Смысл таков: вводим на клавиатуре число( либо, в идеале, градусы либо количество шагов), а ШД их отрабатывает. Возможна ли вообще реализация такого проекта и, быть может, есть примеры?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Да нет проблем! Единственное Вам надо определить как ардуинка узнает, что Вы закончили ввод числа.

Алгоритм такой - считываем знаки с клавиатуры в массив до ввода символа конца ввода, преобразуем char в числа, поразрядно складываем и выполняем управление двигателем.

Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Отлично, спасибо, значит всё-таки можно, но я в коде новичок. В голове всё ясно и понятно, алгоритм понимаю, но код не знаю толком.Только начал разбираться.. Если Вы в этом настолько хорошо разбираетесь можете по свободе попробовать накидать программку?

sadman41
Offline
Зарегистрирован: 19.10.2016

Конечно может! 

strarbit
Offline
Зарегистрирован: 12.06.2016

нет проблем

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valeriy_7 пишет:
можете по свободе попробовать накидать программку?

Ещё как может! Даже две программы, с разными фичами, чтобы Вы могли выбрать более подходящую!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mykaida, мы в Вас верим!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Valeriy_7 пишет:
Если Вы в этом настолько хорошо разбираетесь можете по свободе попробовать накидать программку?

Конечно, может! Все дела бросит - и обязательно может ;)

Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Спасибо большое всем, кто собрался помочь! Буду очень рад. Чтобы было понятнее : ШД 28BYJ-48, драйвер к нему ULN2003, клавиатура мембранная 4х4, Arduino UNO. Если не будет получатся с чем-то - заменяйте на аналогичные, но в идеале подошло бы всё это. Заранее спасибо! Жду с нетерпением ответов))

Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Забавные вы люди. Не за спасибо же. Программа в 150-250 строк максимум должна выйти. Если человек знает - то написать сможет за пару вечеров, ему это ничего не стоит, а мне обойдётся в сумму о которой договоримся.

Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Притом, он единственный кто расписал хотя бы алгоритм действий в отличии от "умников".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valeriy_7 пишет:
ему это ничего не стоит

Одно моя знакомая дама как-то знатно потролила нас (на форуме она была одна среди мужиков). Она выдала: "Парни, подарите мне приличный ноутбук! Мне же это ничего не стоит, а вам приятно!"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valeriy_7 пишет:
Притом, он единственный кто расписал хотя бы алгоритм действий в отличии от "умников".
Так я ж и говорю, что мы в него верим! :))))

Valeriy_7
Offline
Зарегистрирован: 27.09.2018

Смешно. Но мне не нужно дарить программу. Понятное дело, кто будет писать её просто так, а вот если не за спасибо, то найдутся люди которые напишут :"поговорим об оплате".

sadman41
Offline
Зарегистрирован: 19.10.2016

Давайте поговорим об оплате, но в другом разделе - "Ищу исполнителя".

strarbit
Offline
Зарегистрирован: 12.06.2016

Valeriy_7 пишет:
Смешно. Но мне не нужно дарить программу. Понятное дело, кто будет писать её просто так, а вот если не за спасибо, то найдутся люди которые напишут :"поговорим об оплате".

моя почта доступна)

vvadim
Offline
Зарегистрирован: 23.05.2012

на разных форумах создал одинаковые темы, потратил кучу времени, получил троллинг)))))

давно мог написать в раздел о платной помощи и сейчас крутил бы свой мотор и кайфовал....

Vitali-71
Offline
Зарегистрирован: 25.04.2017

/sites/default/files/u28446/matklav_kak_est_0.jpg

Добрый день! Подскажите, что за схема мне попалась сегодня, как ее подключить? (возможно что где-то косяк, не исключено)

Что за контакт 1, куда он и как подключается?

Green
Offline
Зарегистрирован: 01.10.2015

"Но что то схема, мне попалась, привередливая..."
Конечно косяк. Думайте. Это специально что бы вы обратились к автору.)
Но вам 1-й контакт не нужен - забейте на него.)