Ищу простой способ изменения параметров через панель от 3d принтера с дисплеем.
- Войдите на сайт для отправки комментариев
Ср, 06/01/2021 - 23:07
Есть MKS Gen L V1.0 плата от 3D принтера и на двух шлейфах к ней подсоединяется панелька, обычная для старых принтеров, с 2-х строчным дисплеем, «крутилкой-нажималкой», кнопкой с сброса и разъёмом под SD карточку.
Использую с простейшим скетчем на библиотеке AccelStepper. Собственно шаговик гоняется туда-обратно с заданными дистанцией, скоростью и ускорением. Всего 3 параметра. Это я видео-слайдер колхозничаю.)
Как задействовать указанную панельку для изменения этих параметров на лету?
Подозреваю, что есть какая-то библиотека, через которую это делается легко и непринужденно.
Но не могу её найти. Подскажите пожалуйста.
Вот код:
#include <AccelStepper.h> AccelStepper stepper(AccelStepper::DRIVER, 54, 55); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 long gotoposition[3]; // An array to store the In or Out position for each stepper motor int JoyXPos = 0; int JoyYPos = 0; int sliderPos = 0; int currentSpeed = 1000; int inOutSpeed = 100; int XInPoint = 0; int YInPoint = 0; int ZInPoint = 0; int XOutPoint = 1000; int YOutPoint = 0; int ZOutPoint = 0; int InandOut = 0; void setup() { stepper.setMaxSpeed(6000);//5000 stepper.setSpeed(1000); stepper.setEnablePin(38); stepper.setPinsInverted(false, false, true); stepper.setAcceleration(900); stepper.enableOutputs(); XInPoint = stepper.currentPosition(); // Set the IN position for steppers 1 } void loop() { stepper.runToNewPosition(50000); stepper.runToNewPosition(-50000); // stepper.moveTo(10000); // stepper.move(1000); //stepper.runSpeed(); }
Вот панелька:
Кнопки, я так думаю, добавить надо. Без них "влёт" не получится...
Я как раз над концевиком думал. Сделаю дополнительный - под кнопку или несколько. Жалко конечно, я хотел нажатие энкодера задействовать, но можно и так.
"легко и непринужденно" - это "покрутил и значение изменилось в переменной"? Ну, какая-то адская либа для меню на LCD есть, но она жрет кучу памяти 328го МК. Поэтому, скорее всего, ответ "нет", простого способа нет.
Покрутил - поменял значение. Нажал - перешел к следующей переменной (их всего то 3). Это было бы идеально.
Но если на ходу никак, то может с остановкой мотора?
Почему Вы торговаться сразу начинаете - "если не так, то этак"?
Для программиста простого способа я лично не вижу. Для пользователя - сколько угодно, но только после написания соответствующего кода программистом.
Напишете для "прям на ходу" - будет без остановки.
следующей переменной (их всего то 3).
3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?
3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?
Зачем ему 6 кнопок? Нажатие кнопки на энкодере по кругу гоняет три переменные. Выбор нужной или длительным нажатием энкодера или кнопкой снизу. Энкодером выставляем нужный параметр и фиксируем его или кнопкой энкодера или нижней. Для изменения параметров больше ничего не нужно. Но ведь надо еще запускать и останавливать. Про это ТС ничего не пишет. Или просто подал питание и эта секс игрушка задергалась? А если на лету то 3 переменных резистора на аналоговые входа и думать ни о чем не надо.
3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?
Зачем ему 6 кнопок? Нажатие кнопки на энкодере по кругу гоняет три переменные. Выбор нужной или длительным нажатием энкодера или кнопкой снизу. Энкодером выставляем нужный параметр и фиксируем его или кнопкой энкодера или нижней. Для изменения параметров больше ничего не нужно. Но ведь надо еще запускать и останавливать. Про это ТС ничего не пишет. Или просто подал питание и эта секс игрушка задергалась? А если на лету то 3 переменных резистора на аналоговые входа и думать ни о чем не надо.
Конечно было бы удобно нажатием энкодера переходить к следующей переменной. Сейчас у меня при подаче питания запускается и этого достаточно. А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости. А кнопками сколько я гонять скорость от 5000 до 100 буду. Даже если шаг сделать 100.
Конечно было бы удобно нажатием энкодера переходить к следующей переменной. Сейчас у меня при подаче питания запускается и этого достаточно. А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости. А кнопками сколько я гонять скорость от 5000 до 100 буду. Даже если шаг сделать 100.
Тогда энкодер, оптимальный вариант. Примеров таких реализаций масса. Возьмите например генератор Димакса. Там практически готовый код работы с энкодером и меню для Вашего проекта. Немного допилить и все Ок.
Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент.
А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости.
И в чем проблема с аналоговыми входами?
Здесь http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora используется 43 аналоговых входа, состояние каждого (точная цифра) может быть отображено на дисплее. После чего записано на бумажку, а бумажка помещена в несгораемый сейф. При необходимости восстановить настройку - достаточно извлечь бумажку из сейфа и крутилкой добиться на дисплее нужной цифры.
А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости.
И в чем проблема с аналоговыми входами?
Здесь http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora используется 43 аналоговых входа, состояние каждого (точная цифра) может быть отображено на дисплее. После чего записано на бумажку, а бумажка помещена в несгораемый сейф. При необходимости восстановить настройку - достаточно извлечь бумажку из сейфа и крутилкой добиться на дисплее нужной цифры.
Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?
Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?
При шаге в 100 единиц (что не противоречит условию) задача элементарна.
Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?
Диапазон 100-5000 - это диапазон 1-50. А чего кнопками не сделать? Определитесь с точностью настройки - если это 100, это одно дело, если 10 - другое, если 1, то кнопок надо больше.
Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент.
Энкодер тоже легко делается с ускорением. Крутишь быстро скачет на 10, крутишь медленно - на 1
Кстати именно для этого изделия библиотеки нет. Специфическая она. Только ковырять прошивки 3d принтера, но там писали серьезно, в макросах заблудишься :)
Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент.
Энкодер тоже легко делается с ускорением. Крутишь быстро скачет на 10, крутишь медленно - на 1
Кстати именно для этого изделия библиотеки нет. Специфическая она. Только ковырять прошивки 3d принтера, но там писали серьезно, в макросах заблудишься :)
Ну я ещё на этапе коммуникации с дисплеем заблудился.
Если MKS Gen L 1.0, то как к нему обращаться? Через LiquidCrystal_I2C lcd(0x27,20,4)?
Учитывая, что подключен через шлейф "ext1". Верхний по фото и схемам.
Разобрался.
Правильный ответ LiquidCrystal lcd(16,17,23,25,27,29)
Оставлю это здесь, может кому пригодится...