Skip to content

Commit e6f4f87

Browse files
committed
Adding new Grbl-Mega-5X digital output capability control.
1 parent 62148d1 commit e6f4f87

18 files changed

+83187
-77643
lines changed

cn5X.py

+14
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,12 @@ def __init__(self, parent=None):
263263
self.ui.btnPausePooling.clicked.connect(self.on_btnPausePooling)
264264

265265
self.ui.btnClearDebug.clicked.connect(self.clearDebug)
266+
267+
self.ui.btnM64P0.clicked.connect(lambda: self.on_btnM64(0))
268+
self.ui.btnM64P1.clicked.connect(lambda: self.on_btnM64(1))
269+
self.ui.btnM64P2.clicked.connect(lambda: self.on_btnM64(2))
270+
self.ui.btnM64P3.clicked.connect(lambda: self.on_btnM64(3))
271+
266272
self.ui.btnSpinM3.clicked.connect(self.on_btnSpinM3)
267273
self.ui.btnSpinM4.clicked.connect(self.on_btnSpinM4)
268274
self.ui.btnSpinM5.clicked.connect(self.on_btnSpinM5)
@@ -1985,6 +1991,14 @@ def on_dsbJogSpeed_valueChanged(self, val: float):
19851991
self.__jog.setJogSpeed(val)
19861992

19871993

1994+
@pyqtSlot(int)
1995+
def on_btnM64(self, digitNum: int):
1996+
if self.__decode.getDigitalStatus(digitNum):
1997+
self.__grblCom.gcodePush("M65P{}".format(digitNum))
1998+
else:
1999+
self.__grblCom.gcodePush("M64P{}".format(digitNum))
2000+
2001+
19882002
@pyqtSlot()
19892003
def on_btnSpinM3(self):
19902004
self.__grblCom.gcodeInsert("M3")

cn5X.qrc

+12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
<RCC>
22
<qresource prefix="cn5X">
3+
<file>images/btnM64P0.svg</file>
4+
<file>images/btnM64P1.svg</file>
5+
<file>images/btnM64P2.svg</file>
6+
<file>images/btnM64P3.svg</file>
37
<file>images/btnJogNone.svg</file>
8+
<file>images/btnM64P0_down.svg</file>
9+
<file>images/btnM64P1_down.svg</file>
10+
<file>images/btnM64P2_down.svg</file>
11+
<file>images/btnM64P3_down.svg</file>
412
<file>images/btnJogA.svg</file>
13+
<file>images/btnM64P0_light.svg</file>
14+
<file>images/btnM64P1_light.svg</file>
15+
<file>images/btnM64P2_light.svg</file>
16+
<file>images/btnM64P3_light.svg</file>
517
<file>images/btnJogB.svg</file>
618
<file>images/btnJogC.svg</file>
719
<file>images/btnJogX.svg</file>

cn5X_rc.py

+81,153-77,521
Large diffs are not rendered by default.

grblDecode.py

+55-4
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def __init__(self, ui, log, grbl: grblCom):
8181
self.__offsetG5x = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
8282
self.__etatArrosage = None
8383
self.__etatMachine = None
84+
self.__digitalStatus = [False, False, False, False]
8485
self.__getNextStatusOutput = False
8586
self.__getNextGCodeParams = False
8687
self.__getNextGCodeState = False
@@ -134,6 +135,8 @@ def decodeGrblStatus(self, grblOutput):
134135
self.ui.statusBar.showMessage("{} + {}".format(self.__grblCom.grblVersion(), grblOutput))
135136

136137
flagPn = False
138+
flagOv = False
139+
flagDigital = False
137140
tblDecode = grblOutput[1:-1].split("|")
138141
for D in tblDecode:
139142
if D in self.__validMachineState:
@@ -261,6 +264,7 @@ def decodeGrblStatus(self, grblOutput):
261264
self.ui.progressBufferState.setToolTip("Buffer stat : " + tblValue[0] + "/" + tblValue[1])
262265

263266
elif D[:3] == "Ov:": # Override Values for feed, rapids, and spindle
267+
flagOv = True
264268
values = D.split(':')[1].split(',')
265269
# Avance de travail
266270
if int(self.ui.lblAvancePourcent.text()[:-1]) != int(values[0]):
@@ -285,6 +289,37 @@ def decodeGrblStatus(self, grblOutput):
285289
else:
286290
exec("self.ui.cnLed" + L + ".setLedStatus(False)")
287291

292+
elif D[:2] == "A:": # OverrideAccessory State
293+
accessoryState = D[2:]
294+
digitalFind = accessoryState.find("D")
295+
if digitalFind >=0:
296+
flagDigital = True
297+
digitalState = accessoryState[digitalFind+1:]
298+
if digitalState[3] == "1":
299+
self.ui.btnM64P0.setButtonStatus(True)
300+
self.__digitalStatus[0] = True
301+
else:
302+
self.ui.btnM64P0.setButtonStatus(False)
303+
self.__digitalStatus[0] = False
304+
if digitalState[2] == "1":
305+
self.ui.btnM64P1.setButtonStatus(True)
306+
self.__digitalStatus[1] = True
307+
else:
308+
self.ui.btnM64P1.setButtonStatus(False)
309+
self.__digitalStatus[1] = False
310+
if digitalState[1] == "1":
311+
self.ui.btnM64P2.setButtonStatus(True)
312+
self.__digitalStatus[2] = True
313+
else:
314+
self.ui.btnM64P2.setButtonStatus(False)
315+
self.__digitalStatus[2] = False
316+
if digitalState[0] == "1":
317+
self.ui.btnM64P3.setButtonStatus(True)
318+
self.__digitalStatus[3] = True
319+
else:
320+
self.ui.btnM64P3.setButtonStatus(False)
321+
self.__digitalStatus[3] = False
322+
288323
'''
289324
elif D[:3] == "Ln:": # Line Number
290325
return D
@@ -295,10 +330,21 @@ def decodeGrblStatus(self, grblOutput):
295330
elif D[3:] == "FS:": # Current Feed and Speed
296331
return D
297332
'''
298-
'''
299-
elif D[2:] == "A:": # OverrideAccessory State
300-
return D
301-
'''
333+
334+
if flagOv and not flagDigital:
335+
if self.__digitalStatus[0]:
336+
self.ui.btnM64P0.setButtonStatus(False)
337+
self.__digitalStatus[0] = False
338+
if self.__digitalStatus[1]:
339+
self.ui.btnM64P1.setButtonStatus(False)
340+
self.__digitalStatus[1] = False
341+
if self.__digitalStatus[2]:
342+
self.ui.btnM64P2.setButtonStatus(False)
343+
self.__digitalStatus[2] = False
344+
if self.__digitalStatus[3]:
345+
self.ui.btnM64P3.setButtonStatus(False)
346+
self.__digitalStatus[3] = False
347+
302348
if not flagPn:
303349
# Eteint toute les leds. Si on a pas trouve la chaine Pn:, c'est que toute les leds sont eteintes.
304350
for L in ['X', 'Y', 'Z', 'A', 'B', 'C', 'P', 'D', 'H', 'R', 'S']:
@@ -581,6 +627,11 @@ def get_etatMachine(self):
581627
return self.__etatMachine
582628

583629

630+
def getDigitalStatus(self, digitNum):
631+
if digitNum >= 0 and digitNum <= 3:
632+
return self.__digitalStatus[digitNum]
633+
634+
584635
def getWco(self, axis=None):
585636
if axis is not None:
586637
if axis in self.__axisNames:

images/btnM64P0.svg

+120
Loading

images/btnM64P0_down.svg

+120
Loading

0 commit comments

Comments
 (0)