Автономный контроллер ЧПУ станка на Arduino?

bort707

★★★★★★✩
21 Сен 2020
2,859
850
Gcode - текстовой формат, поэтому не надо ничего преобразовывать, шлете строчку g92x0y0 как есть , завершая CR LF.
Если конечно ваш станок ждет именно г-код, а не какой-то производный формат
 
  • Лойс +1
Реакции: Boroda22 и Intagan

viktor1703

★★★✩✩✩✩
9 Дек 2021
531
131
Ну да, grbl так и принимает Gкод. Только не по одной команде слать. Там есть настраиваемый буфер, сразу шьётся, например, 10 команд, контроллер ихобрабатывает и даёт запрос на новую порцию
 
  • Лойс +1
Реакции: Intagan

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
При написании меню я понял что олед дисплей не подходит для моего проекта, слишком много памяти требуется для реализации меню на этом модуле. Входе не долгих раздумий было принято решение использовать LCD дисплей 1602, для экономии пинов буду использовать шину I2C. Поэтому придется проект снова отложить пока не приедет дисплей.
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
@bort707, Вся суть проекта в компактности простоте и дешевизне. Надеюсь замена олед экрана на ЛСД поможет, иначе проще будет купить готовый вариант
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
Уже не знаю как уважительно обращать в новых сообщении к тем кто обратит внимание на мои сообщение я всем благодарен. 😁 Так что с этого момента буду писать друзья. Друзья появилась проблема с моим кодом меню для ЛСД дисплея. Суть его работы должна заключаться в ом что есть переменная которая либо увеличивается или уменьшается смотря на какую кнопку я жму и от ее значения должно выводиться надпись на ЛСД. то есть если мое значение равно допустим 3 то на ЛСД должна вывестись надпись допустим "MENU" но когда я написал условия моя переменная принимает значение этого условия и не меняется. В чем казус не пойму код простейший а в чем проблема вопрос. Код оставил.

C++:
#include <LiquidCrystal_I2C.h>  // подключаем библу
#include <SPI.h>
#include <SD.h>
#include <GyverButton.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);  // адрес, столбцов, строк


GButton Up (2, HIGH_PULL);                    //Кнопка в верх
GButton Down (3, HIGH_PULL);                  //Кнопка в низ
GButton Midle (4, HIGH_PULL);                 //Центральная кнопка
GButton Right (5, HIGH_PULL);                 //Кнопка в право
GButton Left (6, HIGH_PULL);                  //Кнопка в лево

int LIST = 0 ; //переменная страниц

void setup() {
  Serial.begin(9600);
  lcd.init();           // инициализация
  SD.begin();
  lcd.backlight();      // включить подсветку
  lcd.setCursor(0, 6);  // столбец 1 строка 0
  lcd.print("Menu");
 

  Up.setDebounce(80);                         //Антидребезг кнопок
  Down.setDebounce(80);
  Midle.setDebounce(80);
  Right.setDebounce(80);
  Left.setDebounce(80);
}
void loop() {
  Up.tick();                   // обязательная функция отработки. Должна постоянно опрашиваться
  Down.tick();
  Midle.tick();
  Right.tick();
  Left.tick();
 
 // Serial.println (LIST);
if (Up.isClick()){             //перемещение между страницами
  LIST= LIST+1;
  Serial.println (LIST);
  }
if (Down.isClick()){
  LIST= LIST-1;
  Serial.println (LIST);
  }

 if (LIST > 4){              //ограничение значений страницы
  LIST = 4;
  }
  else if(LIST < 0){
  LIST = 0;
  }

if (Midle.isClick()) { // выбор страницы
    switch (LIST) {
      case 0:Serial.println ("Midle is cklick0");Serial.println (LIST);  break;
      case 1:Serial.println ("Midle is cklick1");Serial.println (LIST);  break;
      case 2:Serial.println ("Midle is cklick2");Serial.println (LIST);  break;
      case 3:Serial.println ("Midle is cklick3");Serial.println (LIST);  break;
      case 4:Serial.println ("Midle is cklick4");Serial.println (LIST);  break;
    }
  }

 
if (LIST = 0){    //Действие при текущем значении страницы             
  //lcd.setCursor(1,0);
  //lcd.print ("Movement");
  Serial.println ("Movement");
  Serial.println (LIST);
  }
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
531
131
C++:
if (LIST = 0)
проблема здесь! Одинарное равно "=" - это оператор присваивания значения. Для проверки равенства переменной используется оператор сравнения двойное равно "=="
 
  • Лойс +1
Реакции: Intagan

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
Друзья помогите пожалуйста я немного разобрался но так и не смог заставить станок двигаться. Как только не пытался отправить сообщение (G91G0Y1.00) переместиться на 1мм. Serial.println((char*)cmd_absolute); где cmd_absolute это массив с этим сообщением и Serial.println("G91G0Y1.00") и Serial.write("G91G0Y1.00"); и F-macro добавлял и 0x0A писал так и не сдвинулся с места шпиндель. Правильность подключения проверил раз на 15 и ардуино питал как отдельно так и по USB вообще не понимаю в чем может быть подвох. Помогите разобраться пожалуйста или подскажите версию в чем может быть проблема. Сапсибо!
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
@veuz, Да и его примеры я брал тоже и станок у меня как на видео но он так и не сдвинулся (скорее всего я не понял как он все сделал я так и не понял его скетчи). Отладку я сделал первым делом и все работает мне в ком порт приходит именно команда не каракули но станок не реагирует хотя светодиод RX контакта горит когда я отправляю команду значит он ее получает но почему-то не выполняет, а от пк все работает как по часам.
 
Изменено: