Marlin固件具有很強(qiáng)大的功能,支持非常多G代碼命令(參考:http://reprap.org/wiki/Gcode )。但很多朋友還是有特殊定制的需求,在這里簡單寫一個(gè)例子來說明一下如何添加或修改自己定制的G代碼命令。
所有的G代碼列表在Marlin_main.cpp文件中。
所有的相關(guān)代碼都在process_commands這個(gè)函數(shù)里面。G開頭的(G1、G2、G3等)及M開頭的(M0、M1等)是分開的,所以一定要注意區(qū)分。
我這里以一個(gè)簡單例子做說明,是@wanhaixin 提出的,執(zhí)行M03的時(shí)候,接通一個(gè)繼電器,執(zhí)行M05的時(shí)候,關(guān)閉這個(gè)繼電器。
首先因?yàn)槭荕命令,所以應(yīng)該將代碼添加在M代碼部分。為了方便查找,按照原順序進(jìn)行添加會更好,比如M3應(yīng)該放在M2和M4之間。
添加代碼是一定要注意#if、#endif這樣的宏命令。
- #ifdef ULTIPANEL
- case 0: // M0 - Unconditional stop - Wait for user button press on LCD
- case 1: // M1 - Conditional stop - Wait for user button press on LCD
- {
- LCD_MESSAGEPGM(MSG_USERWAIT);
- codenum = 0;
- if(code_seen('P')) codenum = code_value(); // milliseconds to wait
- if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait
- st_synchronize();
- previous_millis_cmd = millis();
- if (codenum > 0){
- codenum += millis(); // keep track of when we started waiting
- while(millis() < codenum && !lcd_clicked()){
- manage_heater();
- manage_inactivity();
- lcd_update();
- }
- }else{
- while(!lcd_clicked()){
- manage_heater();
- manage_inactivity();
- lcd_update();
- }
- }
- LCD_MESSAGEPGM(MSG_RESUMING);
- }
- break;
- #endif
- //需要添加的代碼應(yīng)該放在這個(gè)位置
- case 3:
- digitalWrite(Pin,High);//Pin指你打算用于控制繼電器的接口(arduino Pin編號)。如果跟其它管腳沖突,可能需要配置Pins.h文件中相關(guān)管腳為-1.
- break;
- case 5:
- digitalWrite(Pin,LOW);
- break;
- //定制添加代碼結(jié)束
- case 17:
- LCD_MESSAGEPGM(MSG_NO_MOVE);
復(fù)制代碼 添加代碼后,就可以通過發(fā)送M3和M5來分別拉高(5V)和拉低(0V)相應(yīng)的IO口,從而實(shí)現(xiàn)對繼電器的控制了。
修改代碼的話跟添加差不多,只是找到相應(yīng)代碼段進(jìn)行修改就好了。
|
|
全部評論2
你可能喜歡
開源3D建模軟件FreeCAD 1.0正式發(fā)布,支持W
人工智能與3D打印技術(shù)結(jié)合,實(shí)現(xiàn)小型核反應(yīng)
最新《Nature》:動態(tài)界面3D打印
石墨烯增強(qiáng)混凝土能否推動可持續(xù)建筑? UVA
推薦課程
神奇的3D打印
SLA3D打印工藝全套培訓(xùn)課程 - 軟件篇
3D打印月球燈視頻教程 包括完整貼圖建模流
【原創(chuàng)發(fā)布】Cura軟件修改二次開發(fā)定制視頻