Здравствуйте нужен код для такого же точно устройства в видео все описан с подробностями.
Здравствуйте! Я делал проект с управлением матричной клавиатурой ШД и выводом на LCD,очень похожий, не так уж и давно, и вам возможно сделаю, пишите на Email wizard-sen@yandex.ru
Надо купить у автора “такого же точно устройства”, выйдет дешевле.
дороговато получается
Напиши сам. Будет вообще бесплатно.
сделаю за 3тр. fridgetester@mail.ru
А тут нищеброды же сидят, за 500р готовые на тебя 2 дня потратить.
Всем спасибо. Исполнитель найден, скетч готов. Могу сюда выложить мне не жалко
// Задаём параметры системы
#define microstep 16 // Микрошаг двигателя (разделение шага на 16 частей)
#define speedHoming 50 // Скорость движения при поиске нуля
#define speedwork 100 // Рабочая скорость двигателя
#define RAZGON 50 // Ускорение двигателя
#define MAX_distance 6800 // Максимальное расстояние перемещения (мм)
#define MIN_distance 300 // Минимальное расстояние перемещения (мм)
const float diametr = 7.0; // Диаметр вала двигателя в мм для точных расчетов
// Формула для расчёта шагов:
// шаги = (длинна в мм * шагов на оборот * редукция * микрошаги) / (π * диаметр вала)
#define CON_HOMING 2 // Пин концевика для возврата в ноль D2
#define CON2 3 // Дополнительный концевик D3
// Подключаем необходимые библиотеки
#include <LiquidCrystal_I2C.h>
#include <SimpleKeypad.h>
#include "GyverStepper2.h"
// Инициализируем дисплей и двигатель
LiquidCrystal_I2C lcd(0x3F, 20, 4); // Дисплей 20x4 SDA A4 / SCL A5 /// 0X27 или 0X3F АДРЕС дисплея если не работает поменять
GStepper2<STEPPER2WIRE> stepper(200, 16, 15, 14); // Двигатель с тремя проводами A2 STEP, A1 DIR, A0 EN
// Настройки клавиатуры
const byte nb_rows = 4; // Число строк клавиатуры
const byte nb_cols = 4; // Число столбцов
char key_chars[nb_rows][nb_cols] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
// Переменные для работы
char buffer[10]; // Буфер для ввода чисел
char hom[] = "homing..."; // Сообщение для поиска нуля
uint8_t val = 0; // Индекс для буфера
int16_t mm = 0; // Линейное перемещение в мм
bool stop; // Флаг остановки
byte rowPins[nb_rows] = { 5, 6, 7, 8 }; // The pins where the rows are connected
byte colPins[nb_cols] = { 9, 10, 11, 4 }; // The pins where the columns are connected
SimpleKeypad kp1((char*)key_chars, rowPins, colPins, nb_rows, nb_cols); // Инициализация клавиатуры
void setup() {
Serial.begin(9600); // Открываем порт для отладки
// Настраиваем пины концевиков
pinMode(CON_HOMING, INPUT_PULLUP);
pinMode(CON2, INPUT_PULLUP);
// Настраиваем параметры двигателя
stepper.setMaxSpeed(speedwork * microstep); // Максимальная скорость
stepper.setAcceleration(RAZGON * microstep); // Ускорение
lcd.init(); // Инициализация дисплея
lcd.backlight(); // Включение подсветки
setDisp(0, 0, "old", 0); // Отображаем "old" на дисплее
setDisp(0, 1, "new", 0); // Отображаем "new" на дисплее
setDisp(4, 0, hom, 0); // Отображаем "homing..." при старте
homing(); // Запускаем поиск нуля
}
void loop() {
stepper.tick(); // Обновляем состояние двигателя
// Проверяем концевик CON2
if (!digitalRead(CON2)) {
stepper.brake(); // Останавливаем двигатель
stepper.reset(); // Сбрасываем координаты в 0
stepper.disable();
stop = true; // Устанавливаем флаг остановки
// Очищаем строки дисплея
clear(4, 12, 0);
clear(4, 12, 1);
setDisp(4, 0, "press #", 0); // Просим нажать "#"
}
// Обработка нажатий клавиатуры
char key = kp1.getKey();
if (key) {
Serial.println(key); // Отладочный вывод
if (!stop) {
if (key == '#') {
stepper.stop();
setDisp(4, 1, "stop", 0); // Отображаем "homing..."
} else if (key == '*') {
buffer[val] = '\0'; // Завершаем строку
mm = atoi(buffer); // Преобразуем строку в число
mm = mm - MIN_distance;
if(mm < 0 ) mm = 0;
// Ограничиваем перемещение
if (mm > MAX_distance - MIN_distance) mm = MAX_distance - MIN_distance;
//if (mm < MIN_distance) mm = MIN_distance;
// Рассчитываем шаги
float step = (float(mm) * 200 * 1 * microstep) / (3.14 * diametr);
stepper.setTarget(step); // Устанавливаем цель перемещения
// Очищаем и обновляем дисплей
clear(4, 10, 1);
clear(4, 10, 0);
itoa(mm + MIN_distance, buffer, sizeof(buffer)); // Преобразуем число обратно в строку
Serial.println(buffer); // Отладочный вывод
setDisp(4, 0, buffer, 1); // Отображаем на дисплее
val = 0; // Сбрасываем индекс
memset(buffer, '\0', sizeof(buffer)); // Очищаем буфер
} else if (key != '*' || key != '#') {
if (val < 4) {
buffer[val] = key; // Сохраняем нажатую клавишу
setDisp(4, 1, buffer, 1); // Отображаем на дисплее
val++;
}
}
} else {
if (key == '#') {
stop = false; // Снимаем флаг остановки
setDisp(4, 0, hom, 0); // Отображаем "homing..."
stepper.enable();
homing(); // Запускаем поиск нуля
}
}
}
}
void homing() {
// Проверяем концевик
if (digitalRead(CON_HOMING)) {
stepper.setSpeed(-speedHoming * microstep); // Назад с заданной скоростью
while (digitalRead(CON_HOMING)) {
stepper.tick(); // Крутим двигатель
}
stepper.brake(); // Останавливаем двигатель
}
stepper.reset(); // Сбрасываем координаты
clear(4, sizeof(hom), 0); // Очищаем дисплей
char buffer2[10];
itoa(MIN_distance, buffer2, sizeof(buffer2)); // Преобразуем число обратно в строку
setDisp(4, 0, buffer2, 1); // Устанавливаем "0"
}
// Очистка строки на дисплее
void clear(uint8_t x, uint8_t val, int y) {
for (uint8_t i = 0; i < val + x; i++) {
lcd.setCursor(i + x, y);
lcd.print(' ');
}
}
// Отображение текста на дисплее
void setDisp(int x, int y, char* data, bool flag) {
lcd.setCursor(x, y);
lcd.print(data);
if (flag) lcd.print(" mm");
}