Автономный контроллер своими руками.

    Рекомендованный
  • #181
Sany-sch
На всякий случай, возможно пригодится в дальнейшем -
везде, где используете строковые константы такого вида
C++:
lcd.print("G38");
Serial.println ("G91G21");
Лучше использовать макрос F()
Т.е.
Код:
lcd.print(F("G38"));
Serial.println (F("G91G21");
Тогда компилятор разместит эти строки во флэш, что позволит освободить оперативную память, которой и так в обрез...
 
Молодец!
Вот новая прошивка. Можем перейти в нулевую точку прежнего проекта.
Бьюсь не могу сделать выбор файла. Точнее отдельно сделал, прошивка 04. А вот вставить в основную прошивку этот кусок не получается. Работает неправильно.
Тоесть 4 прошивка поедее рабочая но нужно её допилить до конца , а 29 файл это что ?
 
Тоесть 4 прошивка поедее рабочая но нужно её допилить до конца , а 29 файл это что ?
Наоборот, 29 это рабочая. На данный момент самая новая.
А 4ая это прошивка просто выбирает файл из имеющихся на карте памяти. Больше она ничего не делает. и нужно её вставить в 29ую чтоб мы могли выбирать файл который запустить. Но почему то не получается, пока.
 
Первые два случая - точно, с файлами, думаю, тоже прокатит, т.к. из одного и того же места изначально у этого метода (и print() и println(:) "ноги растут".
Ну а если я ошибаюсь, то всего-навсего компилятор заругается, не будет компилить...
Повторюсь, что этот макрос работает только с константами, т.е. тем, что известно на этапе компиляции и будет неизменно при работе программы.
 
то всего-навсего компилятор заругается, не будет компилить
Компилятор не заругался. "пережувал" и экран и порт и карту памяти. Позже проверю насколько точно всё работает.
Но главное то, что сразу заработал участок с выбором файла. Благодарность вам огромная. Не нашел бы ошибку никогда.
Ещё вопрос попутный. На ваших фото в меню перед строкой стрелочка стоит красивая. Сами рисовали или можно где то взять?
 
  • Последнее редактирование:
Последнее редактирование:
Но главное то, что сразу заработал участок с выбором файла.
Я предполагал, что память на пределе - строки довольно ресурсоёмкий тип данных.
В большинстве случае лучше использовать массивы и указатели. Тип String если и юзать, то локально, что бы при выходе из подпрограммы память освобождалась.

Сами рисовали или можно где то взять?
Вот тут или тут вам и возможность нарисовать свой символ и пример, как использовать.
Есть и отдельные программы для создания символов.
К ссылке дополню, что в дисплей можно загрузить до 8 пользовательских символов.
В примере кода по ссылке, символ грузится по адресу 0.
C++:
lcd.createChar(0, customChar);
Так же, конкретно такая стрелка может уже присутствовать в наборе символов дисплея, но не факт, что
такой набор окажется у кого-то другого, повторившего конструкцию.
Ну и готовые стрелки -
C++:
uint8_t arrow_up[8]    = {
  0x4, 0xE, 0x15, 0x4, 0x4, 0x4, 0x0
};
uint8_t arrow_down[8]  = {
  0x0, 0x4, 0x4, 0x4, 0x15, 0xE, 0x4
};
uint8_t arrow_right[8] = {
  0x0, 0x4, 0x2, 0x1F, 0x2, 0x4, 0x0, 0x0
};

ЗЫ. Прицепил программку. Их много всяких, есть и удобнее.
 

Вложения

  • LCDSYMB.zip
    3.8 MB · Просмотры: 28
Компилятор не заругался. "пережувал" и экран и порт и карту памяти. Позже проверю насколько точно всё работает.
Но главное то, что сразу заработал участок с выбором файла. Благодарность вам огромная. Не нашел бы ошибку никогда.
Ещё вопрос попутный. На ваших фото в меню перед строкой стрелочка стоит красивая. Сами рисовали или можно где то взять?приветствую
Компилятор не заругался. "пережувал" и экран и порт и карту памяти. Позже проверю насколько точно всё работает.
Но главное то, что сразу заработал участок с выбором файла. Благодарность вам огромная. Не нашел бы ошибку никогда.
Ещё вопрос попутный. На ваших фото в меню перед строкой стрелочка стоит красивая. Сами рисовали или можно где то взять?
приветствую ! я так понимаю победили выбор файла теперь уже есть окончательная прошивка будет скоро , буду ждать спасибо заранее
 
  • Последнее редактирование:
Последнее редактирование:
приветствую ! я так понимаю победили выбор файла теперь уже есть окончательная прошивка будет скоро , буду ждать спасибо заранее
Да, благодаря OlegK, появилась возможность привести прошивку к некоему, удобному для использования, виду.
Может:
1.перейти в дом по концевикам или просто разблокироваться.
2. перемещается по стрелкам медленно и быстро.
3 обнуляем отдельно XY, отдельно Z.
4. перемещаем в 0 отдельно XY, отдельно Z.
5. доступен поиск 0 по Z с помощью датчика.
6. Можем переместиться в начальную точку прошлой УП (управляющей программы). Удобно если несколько УП на одно изделие. координаты записаны на карте памяти в файл "START.TXT"
7. При нажатии "Старт" можем выбрать файл УП по названию. Расширение файла txt, nc, cnc, и другие. Название файла запоминается на карту памяти в файл "FAILNAME.TXT". Для чего, пока не знаю, но пишется.
8. во время работы при нажатии "ввод" - остановка движения. повторное нажатие - продолжение работы.

Доступная ранее функция возобновления работы при отключении и включении света пока заблокирована.
Так же во время работы при нажатии "пауза /старт" прекращается подача команд, те команды что находятся в буфере обмена выполняются и происходит остановка. Это "задел" на будущее.
Так же рассматриваю возможность внесения в прошивку высоты датчика 0 по Z. Чтоб можно было один раз внести и потом не париться.

Держите, тестируйте. Найденные ошибки сообщайте.
Ваши сообщения автоматически объединены:

Да, забыл написать.
После выбора файла УП идёт подсчёт строк в файле. Это занимает какое-то время. Подсчёт отображается на экране. во время работы отображается количество и % отправленных строк
 

Вложения

  • _32.rar
    13.3 KB · Просмотры: 48
Так, ребята, выловил ошибки. Смотрите что происходит.

1. Если пользоваться поиском 0 по Z с помощью датчика, то при нахождении 0 координата обнуляется. и в файл записываются только XY, а Z=0. Поэтому при нажатии переместиться в начальную точку прошлой УП (управляющей программы), переходят только XY, а Zостаётся на 0 по концевику.

2. Переместиться в начальную точку прошлой УП (управляющей программы) можно только один раз. После первого перемещения координаты обнуляются и в файл записываются нули. Какой алгоритм применить? Не записывать координаты повторно?
 
по п.1
По идее, при поиске 0 по Z, с использованием датчика, должно быть записано смещение на высоту датчика, что бы опустив Z до заготовки получить 0 рабочих координат.
по п.2
Насколько я понял, это аналог "Восстановить СК" в Кэндл. Там машинные координаты обновляются и сохраняются только при обнулении рабочих координат, что позволит вернуть 0 позицию в текущей сессии и после сброса контроллера.
 
По идее, при поиске 0 по Z, с использованием датчика, должно быть записано смещение на высоту датчика, что бы опустив Z до заготовки получить 0 рабочих координат.
Совершенно верно. По Z у нас будет 0,00 И когда мы нажмём Старт у нас координаты X и Y запишутся на карту памяти нормально, так как они есть. А Z запишется 0,00 так как они обнулились и мы не знаем их относительно домашней позиции.
 
так как они обнулились и мы не знаем их относительно домашней позиции.
Почему не знаем? По запросу "?" GRBL "отдаёт" машинные, рабочие координаты и величину смещения между ними. После поиска дома всегда можно вернуться в нулевые рабочие координаты используя машинные.
 
Коллеги, для дальнейшего исправления и улучшения нужна статистика с разных станков. Сделать под свой станок и работать не проблема.
Подойдёт любая программа в которой вы работаете, с командной строкой. Итак подключаем станок и переходим в домашнюю позицию по концевикам. Посылаем запрос через строку ? в некоторых случаях нужно ?? и смотрим на ответ. Должно быть что-то вроде этого:
<Idle|MPos:-199.000,-199.000,-1.000|FS:0,0>
затем переходим в любую произвольную точку, желательно переместиться по всем трём осям и снова делаем запрос ? или ?? .
Затем обнуляемся в этой точке по всем трём осям. можно кнопкой или командой : G92x0 y0 z0 и снова делаем запрос ? или ?? .
И напоследок переходим в самый дальний от концевиков угол и снова делаем запрос ? или ?? .
В итоге ваш ответ мне должен быть примерно такой:

<Idle|MPos:-199.000,-199.000,-1.000|FS:0,0> - дом по концевикам

<Idle|MPos:-147.500,-188.750,-21.500|FS:0,0> - произвольная точка.

<Idle|MPos:-147.500,-188.750,-21.500|FS:0,0> - после обнуления

<Idle|MPos:37.000,-55.500,-45.950|FS:0,0> - самая дальняя от концевиков точка.
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

Конечно, Ваше программное обеспечение для блокировки рекламы отлично справляется с блокировкой рекламы на нашем сайте, но оно также блокирует полезные функции. Мы стараемся для Вас и не обязываем Вас донатить и скидывать денег на наши кошельки, чтобы пользоваться форумом, но реклама это единственное, что позволяет поддерживать проект и развивать его.

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать