Я пытаюсь внедрить пользовательскую команду Gcode в Marlin Arduino с платой Ramps. Чтобы отправить более одной команды GCODE, остальное проигнорируется, как добавить остальные команды GCODE в очередь, чтобы выполнить одну за другой? : < /p>
void GcodeSuite::G140() { //Custom G140
queue.enqueue_now_P(PSTR("G28 Y"));
}
< /code>
Если я добавляю несколько команд для выполнения его не так: < /p>
void GcodeSuite::G140() { //Custom G140
queue.enqueue_now_P(PSTR("M119"));
queue.enqueue_now_P(PSTR("G28 Y"));
queue.enqueue_now_P(PSTR("G21"));
queue.enqueue_now_P(PSTR("G90"));
queue.enqueue_now_P(PSTR("G64"));
}
< /code>
Последовательный монитор показывает < /p>
---- Sent utf8 encoded message: "G140\r\n" ----
echo:enqueueing "M119"
echo:enqueueing "G28 Y"
echo:enqueueing "G21"
echo:busy: processing
echo:busy: processing
echo:busy: processing
< /code>
Полная строка Gcode, которую я хочу выполнить (один пример): < /p>
#define STRING_A char *Str1[] = {"G21", "G90", "G64", "G0 Z 0.000", "G0 X 183.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 186.024 Y 19.168 I 1.167 J 1.167", "G2 X 183.690 Y 16.834 I -1.167 J -1.167", "G0 Z 0.000M9 M5", "G0 X 27.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 27.690 Y 16.834 I -1.167 J -1.167", "G2 X 30.024 Y 19.168 I 1.167 J 1.167", "G0 Z 0.000", "M9 M5", "G0 X 0.000 Y 0.000"};
Причина, по которой я хочу внедрить файл (ы) Gcode в код Marlin, заключается в том, что этот Gcode никогда не изменится, это один из нескольких Gcodes, которые я хочу запустить Из приложения Python, если я неоднократно отправляю несколько файлов из Python, серийные коммунистики становятся блогами и медленными. < /p>
Моя идея состояла из GCODE из приложения Python. Приложение для Ардуино, и оно отлично работает. Причина, по которой я хочу использовать программное обеспечение Marlin для лучшей обработки очередей и лучшего выполнения GCODE, интерпретатор Arduino очень простой и не имеет стабильности и надежности. < /P>
Я пытаюсь внедрить пользовательскую команду Gcode в Marlin Arduino с платой Ramps. Чтобы отправить более одной команды GCODE, остальное проигнорируется, как добавить остальные команды GCODE в очередь, чтобы выполнить одну за другой? : < /p> [code]void GcodeSuite::G140() { //Custom G140 queue.enqueue_now_P(PSTR("G28 Y"));
} < /code> Если я добавляю несколько команд для выполнения его не так: < /p> void GcodeSuite::G140() { //Custom G140 queue.enqueue_now_P(PSTR("M119")); queue.enqueue_now_P(PSTR("G28 Y")); queue.enqueue_now_P(PSTR("G21")); queue.enqueue_now_P(PSTR("G90")); queue.enqueue_now_P(PSTR("G64")); } < /code> Последовательный монитор показывает < /p> ---- Sent utf8 encoded message: "G140\r\n" ---- echo:enqueueing "M119" echo:enqueueing "G28 Y" echo:enqueueing "G21" echo:busy: processing echo:busy: processing echo:busy: processing < /code> Полная строка Gcode, которую я хочу выполнить (один пример): < /p> #define STRING_A char *Str1[] = {"G21", "G90", "G64", "G0 Z 0.000", "G0 X 183.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 186.024 Y 19.168 I 1.167 J 1.167", "G2 X 183.690 Y 16.834 I -1.167 J -1.167", "G0 Z 0.000M9 M5", "G0 X 27.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 27.690 Y 16.834 I -1.167 J -1.167", "G2 X 30.024 Y 19.168 I 1.167 J 1.167", "G0 Z 0.000", "M9 M5", "G0 X 0.000 Y 0.000"};[/code] Причина, по которой я хочу внедрить файл (ы) Gcode в код Marlin, заключается в том, что этот Gcode никогда не изменится, это один из нескольких Gcodes, которые я хочу запустить Из приложения Python, если я неоднократно отправляю несколько файлов из Python, серийные коммунистики становятся блогами и медленными. < /p> Моя идея состояла из GCODE из приложения Python. Приложение для Ардуино, и оно отлично работает. Причина, по которой я хочу использовать программное обеспечение Marlin для лучшей обработки очередей и лучшего выполнения GCODE, интерпретатор Arduino очень простой и не имеет стабильности и надежности. < /P> [code]#define FIRMWARE_VERSION "v1.4"
// our point structure to make things nice //======================================== struct LongPoint { long x; long y; long z; long e; };
// to decode serial data String serData = ""; boolean newData = false;
// used to decode commands //======================== char c; char gcode; long code;
long line; long LastLine = 0;
char *Str1[] = {"G21", "G90", "G64", "G0 Z 0.000", "G0 X 183.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 186.024 Y 19.168 I 1.167 J 1.167", "G2 X 183.690 Y 16.834 I -1.167 J -1.167", "G0 Z 0.000M9 M5", "G0 X 27.690 Y 16.834", "G0 Z 0.000", "M3 M8", "G0 Z -0.500", "G2 X 27.690 Y 16.834 I -1.167 J -1.167", "G2 X 30.024 Y 19.168 I 1.167 J 1.167", "G0 Z 0.000", "M9 M5", "G0 X 0.000 Y 0.000", "M2"};
int DebugLevel = 0; int xx = 500; //Stepper E speed const int LINE_BUFFER_SIZE = 128; // max line length is one less than this float value = 58284; //34285; //3035; //Preload timer value (3035 for 4 seconds)
void loop() { // listen for serial commands while(Serial.available() > 0) { buffer[sofar++]=Serial.read(); if(buffer[sofar-1]==';') break; // in case there are multiple instructions
} // digitalWrite(E0_ENABLE_PIN, LOW); // enable roll motor // if we hit a semi-colon, assume end of instruction. if(sofar>0 && buffer[sofar-1]==';') { Serial.print("Command received: "); Serial.println(buffer[sofar-2]); switch (buffer[sofar-2]) { case 'A': Serial.println("D received"); run_this(Str1, sizeof(Str1)/sizeof(Str1[0])); break; case 'B': Serial.println("SH received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'C': Serial.println("B received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'D': Serial.println("WH received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'E': Serial.println("WN received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'F': Serial.println("LN received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'G': Serial.println("S received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'H': Serial.println("ET received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'J': Serial.println("BT received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'K': Serial.println("BC received"); run_this(Str2, sizeof(Str2)/sizeof(Str2[0])); break; case 'L': Serial.println("EC received"); run_this(Str3, sizeof(Str3)/sizeof(Str3[0])); break; case 'Q': Serial.println("Home XYZ"); run_this(StrG28, sizeof(StrG28)/sizeof(StrG28[0])); break; case 'M': Serial.println("GP"); run_this(StrM114, sizeof(StrM114)/sizeof(StrM114[0])); break; default: Serial.println("Nothing to process"); } return;