Ищу простой способ изменения параметров через панель от 3d принтера с дисплеем.

Dмитрий
Offline
Зарегистрирован: 06.01.2021
Есть 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();
   
}

Вот панелька: 

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

Кнопки, я так думаю, добавить надо. Без них "влёт" не получится...

Dмитрий
Offline
Зарегистрирован: 06.01.2021

Я как раз над концевиком думал. Сделаю дополнительный  - под кнопку или несколько. Жалко конечно, я хотел нажатие энкодера задействовать, но можно и так.

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

"легко и непринужденно" - это "покрутил и значение изменилось в переменной"? Ну, какая-то адская либа для меню на LCD есть, но она жрет кучу памяти 328го МК. Поэтому, скорее всего, ответ "нет", простого способа нет.

Dмитрий
Offline
Зарегистрирован: 06.01.2021

sadman41 пишет:
"легко и непринужденно" - это "покрутил и значение изменилось в переменной"?
Да, именно так и хочется!)

Покрутил - поменял значение. Нажал - перешел к следующей переменной (их всего то 3). Это было бы идеально.

Но если на ходу никак, то может с остановкой мотора?

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

Почему Вы торговаться сразу начинаете - "если не так, то этак"?

Для программиста простого способа я лично не вижу. Для пользователя - сколько угодно, но только после написания соответствующего кода программистом.

Напишете для "прям на ходу" - будет без остановки.

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

Dмитрий пишет:

 следующей переменной (их всего то 3).

3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?

svm
Offline
Зарегистрирован: 06.11.2016

mykaida пишет:

3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?

Зачем ему 6 кнопок? Нажатие кнопки на энкодере по кругу гоняет три переменные. Выбор нужной или длительным нажатием энкодера или кнопкой снизу. Энкодером выставляем нужный параметр и фиксируем его или кнопкой энкодера или нижней. Для изменения параметров больше  ничего не нужно. Но ведь надо еще запускать и останавливать. Про это ТС ничего не пишет. Или просто подал питание и эта секс игрушка задергалась? А если на лету то 3 переменных резистора на аналоговые входа и думать ни о чем не надо.

Dмитрий
Offline
Зарегистрирован: 06.01.2021

svm пишет:

mykaida пишет:

3 переменных - 6 кнопок (типа +и -). можно посадить на один аналоговый порт. Или я какой-то скрытый подтекст не понимаю?

Зачем ему 6 кнопок? Нажатие кнопки на энкодере по кругу гоняет три переменные. Выбор нужной или длительным нажатием энкодера или кнопкой снизу. Энкодером выставляем нужный параметр и фиксируем его или кнопкой энкодера или нижней. Для изменения параметров больше  ничего не нужно. Но ведь надо еще запускать и останавливать. Про это ТС ничего не пишет. Или просто подал питание и эта секс игрушка задергалась? А если на лету то 3 переменных резистора на аналоговые входа и думать ни о чем не надо.

Конечно было бы удобно нажатием энкодера переходить к следующей переменной. Сейчас у меня при подаче питания запускается и этого достаточно. А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости. А кнопками сколько я гонять скорость от 5000 до 100 буду. Даже если шаг сделать 100.

svm
Offline
Зарегистрирован: 06.11.2016

Dмитрий пишет:

Конечно было бы удобно нажатием энкодера переходить к следующей переменной. Сейчас у меня при подаче питания запускается и этого достаточно. А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости. А кнопками сколько я гонять скорость от 5000 до 100 буду. Даже если шаг сделать 100.

Тогда энкодер, оптимальный вариант. Примеров таких реализаций масса. Возьмите например генератор Димакса. Там практически готовый код работы с энкодером и меню для Вашего проекта. Немного допилить и все Ок.

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

Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dмитрий пишет:

А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости.

И в чем проблема с аналоговыми входами?

Здесь http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora используется 43 аналоговых входа, состояние каждого (точная цифра) может быть отображено на дисплее. После чего записано на бумажку, а бумажка помещена в несгораемый сейф. При необходимости восстановить настройку - достаточно извлечь бумажку из сейфа и крутилкой добиться на дисплее нужной цифры.

Dмитрий
Offline
Зарегистрирован: 06.01.2021

andriano пишет:

Dмитрий пишет:

А вот с аналоговыми входами не получится - мне нужна повторяемость. Ради этого весь проект и затевался. Чтобы можно было увидеть цифровое значение параметра и потом его в точности повторить, при необходимости.

И в чем проблема с аналоговыми входами?

Здесь http://arduino.ru/forum/proekty/analog-analogovogo-sintezatora используется 43 аналоговых входа, состояние каждого (точная цифра) может быть отображено на дисплее. После чего записано на бумажку, а бумажка помещена в несгораемый сейф. При необходимости восстановить настройку - достаточно извлечь бумажку из сейфа и крутилкой добиться на дисплее нужной цифры.

Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Dмитрий пишет:

Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?

При шаге в 100 единиц (что не противоречит условию) задача элементарна.

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

Dмитрий пишет:

Допустим диапазон параметра 100 - 5000. И надо выставить 2200 ровно. Это вот реально потенциометром? И чтобы в процессе работы не сбилось?

Диапазон 100-5000 - это диапазон 1-50. А чего кнопками не сделать? Определитесь с точностью настройки - если это 100, это одно дело, если 10 - другое, если 1, то кнопок надо больше.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

sadman41 пишет:

Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент. 

Энкодер тоже легко делается с ускорением. Крутишь быстро скачет на 10, крутишь медленно -  на 1

Кстати именно для этого изделия библиотеки нет. Специфическая она. Только ковырять прошивки 3d принтера, но там писали серьезно, в макросах заблудишься :)

Dмитрий
Offline
Зарегистрирован: 06.01.2021

brokly пишет:

sadman41 пишет:

Энкодером от 5000 до 100 так же придется вертеть так, что устанешь. А кнопки можно и "с разгоном" сделать - чем больше держишь, тем больше/чаще инкремент/декремент. 

Энкодер тоже легко делается с ускорением. Крутишь быстро скачет на 10, крутишь медленно -  на 1

Кстати именно для этого изделия библиотеки нет. Специфическая она. Только ковырять прошивки 3d принтера, но там писали серьезно, в макросах заблудишься :)

Ну я ещё на этапе коммуникации с дисплеем заблудился.

Если MKS Gen L 1.0, то как к нему обращаться? Через LiquidCrystal_I2C lcd(0x27,20,4)?

Учитывая, что подключен через шлейф "ext1". Верхний по фото и схемам.

Dмитрий
Offline
Зарегистрирован: 06.01.2021

Разобрался.

Правильный ответ LiquidCrystal lcd(16,17,23,25,27,29)

Оставлю это здесь, может кому пригодится...