ARDUINO Инициировать событие для отправки команды в ЧПУ под управлением GRBL

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
Приветствую всех!
Решил сделать автономный пульт для своего станочка на базе процессора MEGA 328p м в принципе уже почти все готово, станок слушается всех моих команд но не могу сделать основную программу которая будет считывать команды из .txt файла и отправлять в ЧПУ. Сама проблема в том что я не могу придумать как сделать так чтобы команды слались по требованию станка, я считывал буфер и понял что станок шлет на каждую команду "ok" два раза и в попытке это использовать я потерпел неудачу у же перепробовал много чего и мозг кипит, кажется что я бегаю где-то рядом но не могу дотянуться до решения. Сама цель программы чтобы отсылать код по требованию станка чтобы он не терял время на ее ожидание и команды не терялись. Прошу натолкнуть на мысль или литературу, может у кого решение есть. Ниже приложу кусок кода который у меня получился он не работает как задумывалось но надеюсь что с его помощью будет более понятно что я задумал. Если понадобится полная версия кода пишите. Благодарю за внимание!

P.S. Заранее извиняюсь за табуляцию использую автоматическую функцию в самой IDE.

C++:
void UpProgramm () {
  String ReadStanock = Serial.readString();
  while (1) {

    lcd.setCursor(0, 1);
    lcd.print ("In Move     ");

    while (!Serial) {}
    Serial.print("Initializing SD card...");

    if (!SD.begin(chipSelect)) {
      Serial.println("Card failed, or not present");
      while (1);
    }
    Serial.println("card initialized.");

    File dataFile = SD.open("datalog.txt");
    Serial.println (dataFile.readStringUntil(char(10)));
    while (dataFile) {
      Midle.tick();
      if (Midle.isClick ()) {
        dataFile.close();
        return;
      }
      //Serial.println (ReadStanock);
      if (ReadStanock == "ok") {
        Serial.println (dataFile.readStringUntil(char(10)));
      }

    }
    return;
  }
  return ;
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,277
1,303
Москва
Точно 2 раза шлет ? А может это два разных "Ок", например первый на получение команды, а второй на завершение ее выполнения ?
Вообще логику можно делать разную. Я бы разнес все по событиям и сделал бы что то типа режима,
Например в начале будет режим ожидания команды. Крутиться пустой цикл, работают все команды. При этом можно обрабатывать кнопки и монитор для выбора файла. Как только файл выбран должна быть доступна команда запуска работы . Для тестов можно все это пропустить и сразу в начале задать имя файла и сразу режим работы.
Дале что то типа:
считать команду из файла. (файл открыт заранее, есть какой то глобальный указатель на него)
если не считалось - то либо ошибка либо файл испорчен либо конец файла - выход в другой режим.
отправить команду и получить "Ок" - режим ждать конца работы команды
если пришло "ок" - идем в начало для чтения сл. команды.

Все этапы делать не блокирующими. Все тики убрать из этих этапов.
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
считать команду из файла. (файл открыт заранее, есть какой то глобальный указатель на него)
если не считалось - то либо ошибка либо файл испорчен либо конец файла - выход в другой режим.
отправить команду и получить "Ок" - режим ждать конца работы команды
если пришло "ок" - идем в начало для чтения сл. команды.
Собственно в этом та и проблема у меня навыков для этого не хватает я занимаюсь этиv проектом по мере свободного времени и желания. Сделать меню на олед дисплее я бы наверно смог но у меня двустрочный 16-ти символьный экран, да и меню мне в принципе не нужно мне бы толькок саму отправку сделать. Не могу понять как работает считывание буфера когда я через ардуину это делаю мне вообще 6 раз "ok" прилетает и ошибка от станка что я говорю ему ок.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
500
149
@Intagan,
Там есть описание рекомендуемых способов отправки с примерами на питоне.
Попробуйте сначала разобраться без ардуино, по примерам на питоне.
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
Там есть описание рекомендуемых способов отправки с примерами на питоне.
Сложна сложна. Попытался разобраться в отправке команд с помощью подсчёта символов но питон это слишком для меня я ардуино кое как разобрал, так еще и английский до конца не выучил в коде сложно разбираться. Есть где-нибудь примеры на Ардуинском языке? Я честно говоря и другой пример посмотрел с оправкой команды по одной но захотелось реализовать с подсчётам символов для оптимальной работы, но меня не хватит на освоения питона не так он мне и интересен. Может кто поможет разобраться в питоне или пояснит хотя бы за основные моменты? Пожалуйста!
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,277
1,303
Москва
Да, там много накручено в самом ходе, что не удивительно, там вроде на несколько кинематик сделано.

Тоже обратил внимание на питоновский код. Хочется сделать тоже самое но на ардуино ?
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,277
1,303
Москва
А код на питоне нормально отрабатывает при подключении к пк ?
Может стоит его поковырять, вывести на экран промежуточные значения и понять что передается станку, а что получается в ответ и сравнить на таком же файле с тем, что ардуино выдает ?
 

Intagan

✩✩✩✩✩✩✩
21 Авг 2022
33
1
Я конечно попробую но не сегодня, уже поздно и мне надо спать. Спасибо за совет сам бы я врятли додумался бы до такого