From 71c060b71def0d076c85371ee2780853e4e7ccc2 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Fri, 20 May 2022 00:59:56 +0200 Subject: [PATCH 01/14] improved m365 dash added min-speed feature added show-batt-in-idle feature improved throttle and brake values --- res/Lisp/Examples/m365_dash.lisp | 50 +++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 3b2066a37..92c49b5b0 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -3,15 +3,18 @@ ;****User parameters**** ;Calibrate throttle min max -(define cal-thr-lo 32.0) +(define cal-thr-lo 41.0) (define cal-thr-hi 178.0) ;Calibrate brake min max -(define cal-brk-lo 32.0) +(define cal-brk-lo 40.0) (define cal-brk-hi 178.0) (define light-default 0) (define show-faults 1) +(define show-batt-in-idle 1) + +(define min-speed 1) ;****Code section**** (uart-start 115200 'half-duplex) @@ -26,18 +29,23 @@ (define throttle 0) (define brake 0) (define buttonold 0) -(define light 0) +(define light 1) (setvar 'light light-default) (define c-out 0) +(define battery 100) +(define code 0) (defun inp (buffer) ;Frame 0x65 (progn (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) - (if (> brake 0.01) - (set-brake-rel brake) + (set-current-rel 0) + (if (> (* (get-speed) 3.6) min-speed) (set-current-rel throttle) - ) + (set-current-rel 0)) + + (if (> brake 0.02) + (set-brake-rel brake)) )) (defun outp (buffer) ;Frame 0x64 @@ -66,26 +74,42 @@ (setvar 'crc (+ crc (bufget-u8 uart-buf i)))) (if (=(+(shl(bufget-u8 uart-buf (+ len 2))8) (bufget-u8 uart-buf (+ len 1))) (bitwise-xor crc 0xFFFF)) (progn - (if(= (bufget-u8 uart-buf 1) 0x65) - (inp uart-buf)) - (if(= (bufget-u8 uart-buf 1) 0x64) - (outp uart-buf)) + (setvar 'code (bufget-u8 uart-buf 1)) + + (if(= code 0x65) + (inp uart-buf) + ) + + ; on my setup I am not receiving any 0x64. Still looking into this issue. + (if(= code 0x64) + (outp uart-buf) ) -)))))))) + ) + ) + ) + ) +))))) (spawn 150 read-thd) ; Run UART in its own thread (loopwhile t (progn (if (> buttonold (gpio-read 'pin-rx)) + ; sometimes the light will turn on and off when motor is accelerating. might be issue with my vesc firmware. (setvar 'light (bitwise-xor light 1)) ) (setvar 'buttonold (gpio-read 'pin-rx)) (bufset-u8 tx-frame 7 (*(get-batt) 100)) (bufset-u8 tx-frame 8 light) - (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + (if (= show-batt-in-idle 1) + (if (> (* (get-speed) 3.6) 1) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + (bufset-u8 tx-frame 10 (*(get-batt) 100))) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + ) + (if (= show-faults 1) (bufset-u8 tx-frame 11 (get-fault)) ) (sleep 0.1) -)) +))- \ No newline at end of file From d6d6b5b18fdc4b73ff14646df000809328c19b34 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Fri, 20 May 2022 01:06:31 +0200 Subject: [PATCH 02/14] not needed --- res/Lisp/Examples/m365_dash.lisp | 1 - 1 file changed, 1 deletion(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 92c49b5b0..9d6bcc199 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -39,7 +39,6 @@ (progn (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) - (set-current-rel 0) (if (> (* (get-speed) 3.6) min-speed) (set-current-rel throttle) (set-current-rel 0)) From f2c079f5863d3af2c728a5c7145af8a156bb3f0d Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sat, 4 Jun 2022 20:12:46 +0200 Subject: [PATCH 03/14] improved m365 dash added speed modes on double press (still has to implement rpm limit) added off and on when pressing long added lock (double press when braking) --- res/Lisp/Examples/m365_dash.lisp | 81 ++++++++++++++++++++++++++++---- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 9d6bcc199..9af363158 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -35,10 +35,26 @@ (define battery 100) (define code 0) +(define presstime (systime)) +(define presses 0) + +(define off 0) +(define locked 0) +(define speedmode 1) + (defun inp (buffer) ;Frame 0x65 (progn (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) + + ; todo: figure out how to calculate and set max rpm + (if (= speedmode 1) ; is drive? + (print "drive") + (if (= speedmode 2) ; is eco? + (print "eco") + (if (= speedmode 4) ; is sport? + (print "sport")))) + (if (> (* (get-speed) 3.6) min-speed) (set-current-rel throttle) (set-current-rel 0)) @@ -78,11 +94,9 @@ (if(= code 0x65) (inp uart-buf) ) - - ; on my setup I am not receiving any 0x64. Still looking into this issue. - (if(= code 0x64) + ;(if(= code 0x64) (outp uart-buf) - ) + ;) ) ) ) @@ -94,12 +108,63 @@ (loopwhile t (progn (if (> buttonold (gpio-read 'pin-rx)) - ; sometimes the light will turn on and off when motor is accelerating. might be issue with my vesc firmware. - (setvar 'light (bitwise-xor light 1)) + (progn + (setvar 'presses (+ presses 1)) + (setvar 'presstime (systime)) + ) + (if (> (- (systime) presstime) 4000) ;; double press + (progn + (print presses) + (if (= presses 1) + (setvar 'light (bitwise-xor light 1)) + ) + + (if (>= presses 2) ; double press + (progn + ;; seems not to be working hmm + ;; (case speedmode + ;; (1 (setvar 'speedmode 4)) + ;; (2 (setvar 'speedmode 1)) + ;; (4 (setvar 'speedmode 2))) + + (if (= speedmode 1) ;; is drive? + (setvar 'speedmode 4) ;; to sport + (if (= speedmode 2) ;; is eco? + (setvar 'speedmode 1) ;; to drive + (if (= speedmode 4) ;; is sport? + (setvar 'speedmode 2)))) ;; to eco + + ) + ) + + (setvar 'presses 0) + ) + ) ) (setvar 'buttonold (gpio-read 'pin-rx)) + + (if (= (gpio-read 'pin-rx) 0) + (if (> (- (systime) presstime) 10000) ; long press + (progn + (setvar 'off (bitwise-xor off 1)) + (setvar 'presstime (systime)) + ) + ) + ) + + (if (= off 1) + (bufset-u8 tx-frame 6 16) ; turn off display + (if (= locked 1) + (bufset-u8 tx-frame 6 32) + (bufset-u8 tx-frame 6 speedmode) + ) + ) + (bufset-u8 tx-frame 7 (*(get-batt) 100)) - (bufset-u8 tx-frame 8 light) + (if (= off 0) + (bufset-u8 tx-frame 8 light) + (bufset-u8 tx-frame 8 0) + ) (if (= show-batt-in-idle 1) (if (> (* (get-speed) 3.6) 1) (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) @@ -108,7 +173,7 @@ ) (if (= show-faults 1) - (bufset-u8 tx-frame 11 (get-fault)) + (bufset-u8 tx-frame 11 (get-fault)) ) (sleep 0.1) ))- \ No newline at end of file From 2ee2c2be14b828afc9f5924593316d63f73b27a4 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sat, 4 Jun 2022 20:24:37 +0200 Subject: [PATCH 04/14] fixed off and lock mode --- res/Lisp/Examples/m365_dash.lisp | 42 +++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 9af363158..add06944e 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -55,12 +55,28 @@ (if (= speedmode 4) ; is sport? (print "sport")))) - (if (> (* (get-speed) 3.6) min-speed) - (set-current-rel throttle) - (set-current-rel 0)) + (if (= (+ off locked) 0) + (progn + (if (> (* (get-speed) 3.6) min-speed) + (set-current-rel throttle) + (set-current-rel 0)) + + (if (> brake 0.02) + (set-brake-rel brake)) + ) + (progn + (set-current-rel 0) + (if (= locked 1) + (if (> (* (get-speed) 3.6) min-speed) + (set-brake-rel 1) + (set-brake-rel 0) + ) + (set-brake-rel 0) + ) + ) + ) + - (if (> brake 0.02) - (set-brake-rel brake)) )) (defun outp (buffer) ;Frame 0x64 @@ -127,13 +143,15 @@ ;; (2 (setvar 'speedmode 1)) ;; (4 (setvar 'speedmode 2))) - (if (= speedmode 1) ;; is drive? - (setvar 'speedmode 4) ;; to sport - (if (= speedmode 2) ;; is eco? - (setvar 'speedmode 1) ;; to drive - (if (= speedmode 4) ;; is sport? - (setvar 'speedmode 2)))) ;; to eco - + (if (> brake 0.02) + (setvar 'locked (bitwise-xor locked 1)) + (if (= speedmode 1) ; is drive? + (setvar 'speedmode 4) ; to sport + (if (= speedmode 2) ; is eco? + (setvar 'speedmode 1) ; to drive + (if (= speedmode 4) ; is sport? + (setvar 'speedmode 2)))) ; to eco + ) ) ) From 0076b72a719dc9357a1f4079cac0942ba9a5af94 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sat, 4 Jun 2022 21:56:41 +0200 Subject: [PATCH 05/14] cleanup --- res/Lisp/Examples/m365_dash.lisp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index add06944e..cf1ba2221 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -29,10 +29,9 @@ (define throttle 0) (define brake 0) (define buttonold 0) -(define light 1) +(define light 0) (setvar 'light light-default) (define c-out 0) -(define battery 100) (define code 0) (define presstime (systime)) From 362ae73e3d38c48769196fa9836e1d432a94f1f7 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sat, 4 Jun 2022 22:02:59 +0200 Subject: [PATCH 06/14] renamed locked to lock --- res/Lisp/Examples/m365_dash.lisp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index cf1ba2221..a22ae20bd 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -38,7 +38,7 @@ (define presses 0) (define off 0) -(define locked 0) +(define lock 0) (define speedmode 1) (defun inp (buffer) ;Frame 0x65 @@ -54,7 +54,7 @@ (if (= speedmode 4) ; is sport? (print "sport")))) - (if (= (+ off locked) 0) + (if (= (+ off lock) 0) (progn (if (> (* (get-speed) 3.6) min-speed) (set-current-rel throttle) @@ -65,7 +65,7 @@ ) (progn (set-current-rel 0) - (if (= locked 1) + (if (= lock 1) (if (> (* (get-speed) 3.6) min-speed) (set-brake-rel 1) (set-brake-rel 0) @@ -143,7 +143,7 @@ ;; (4 (setvar 'speedmode 2))) (if (> brake 0.02) - (setvar 'locked (bitwise-xor locked 1)) + (setvar 'lock (bitwise-xor lock 1)) (if (= speedmode 1) ; is drive? (setvar 'speedmode 4) ; to sport (if (= speedmode 2) ; is eco? @@ -171,7 +171,7 @@ (if (= off 1) (bufset-u8 tx-frame 6 16) ; turn off display - (if (= locked 1) + (if (= lock 1) (bufset-u8 tx-frame 6 32) (bufset-u8 tx-frame 6 speedmode) ) From 4a7da8b18fdf9a99ef27e1bf98ef06ff57ce2794 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sat, 4 Jun 2022 22:21:29 +0200 Subject: [PATCH 07/14] few comments --- res/Lisp/Examples/m365_dash.lisp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index a22ae20bd..4a1451849 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -168,20 +168,27 @@ ) ) ) - + + ; mode field (1=drive, 2=eco, 4=sport, 8=charge, 16=off, 32=lock) (if (= off 1) (bufset-u8 tx-frame 6 16) ; turn off display (if (= lock 1) - (bufset-u8 tx-frame 6 32) + (bufset-u8 tx-frame 6 32) ; lock display (bufset-u8 tx-frame 6 speedmode) ) ) + ; batt field (bufset-u8 tx-frame 7 (*(get-batt) 100)) + ; light field (if (= off 0) (bufset-u8 tx-frame 8 light) (bufset-u8 tx-frame 8 0) ) + + ; todo: add beeping on lock when pushing scooter + + ; speed field (if (= show-batt-in-idle 1) (if (> (* (get-speed) 3.6) 1) (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) @@ -190,7 +197,7 @@ ) (if (= show-faults 1) - (bufset-u8 tx-frame 11 (get-fault)) + (bufset-u8 tx-frame 11 (get-fault)) ) (sleep 0.1) ))- \ No newline at end of file From 91cc9c34580394f7a1cc1f1e8328ee63983b1ddc Mon Sep 17 00:00:00 2001 From: 1zuna Date: Sun, 12 Jun 2022 23:06:00 +0200 Subject: [PATCH 08/14] improved m365 dash improved button responsiveness fixed not turning on by single tap added beep feedback pushing while locked will now make beep (testing ADC override - will add it very soon) --- res/Lisp/Examples/m365_dash.lisp | 133 +++++++++++++++++++------------ 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 4a1451849..00ab00672 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -1,6 +1,8 @@ ;m365 dashboard free for all by Netzpfuscher ;red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button) +;(app-adc-detach 3 1) ;Detach ADC1/2 and cc/rev button from APP + ;****User parameters**** ;Calibrate throttle min max (define cal-thr-lo 41.0) @@ -41,25 +43,32 @@ (define lock 0) (define speedmode 1) +(define feedback 0) + (defun inp (buffer) ;Frame 0x65 (progn (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) + ;(setvar 'throttle (/(bufget-u8 uart-buf 4) 255.0)) + ;(setvar 'brake (/(bufget-u8 uart-buf 5) 255.0)) + ;(app-adc-override 0 throttle) + ;(app-adc-override 1 brake) + ; todo: figure out how to calculate and set max rpm - (if (= speedmode 1) ; is drive? - (print "drive") - (if (= speedmode 2) ; is eco? - (print "eco") - (if (= speedmode 4) ; is sport? - (print "sport")))) + ;(if (= speedmode 1) ; is drive? + ; (print "drive") + ; (if (= speedmode 2) ; is eco? + ; (print "eco") + ; (if (= speedmode 4) ; is sport? + ; (print "sport")))) (if (= (+ off lock) 0) (progn (if (> (* (get-speed) 3.6) min-speed) (set-current-rel throttle) (set-current-rel 0)) - + (if (> brake 0.02) (set-brake-rel brake)) ) @@ -122,53 +131,63 @@ (loopwhile t (progn - (if (> buttonold (gpio-read 'pin-rx)) - (progn - (setvar 'presses (+ presses 1)) - (setvar 'presstime (systime)) - ) - (if (> (- (systime) presstime) 4000) ;; double press - (progn - (print presses) - (if (= presses 1) - (setvar 'light (bitwise-xor light 1)) + ;(if (<= (* (get-speed) 3.6) min-speed) + ; (progn + (if (> buttonold (gpio-read 'pin-rx)) + (progn + (setvar 'presses (+ presses 1)) + (setvar 'presstime (systime)) ) - - (if (>= presses 2) ; double press - (progn - ;; seems not to be working hmm - ;; (case speedmode - ;; (1 (setvar 'speedmode 4)) - ;; (2 (setvar 'speedmode 1)) - ;; (4 (setvar 'speedmode 2))) + (if (> (- (systime) presstime) 2500) ; + (if (= (gpio-read 'pin-rx) 0) ; check if button is still pressed + (if (> (- (systime) presstime) 6000) ; instead check for long press + (progn + (if (= lock 0) ; it is locked? do not turn off + (progn + (setvar 'off 1) ; turn off + (setvar 'feedback 1) ; beep feedback + ) + ) + (setvar 'presstime (systime)) ; reset press time again + (setvar 'presses 0) + ) + ) + (progn ; else if button not pressed + (if (= presses 1) + (if (= off 1) ; is it off? turn on scooter again + (progn + (setvar 'off 0) ; turn off + (setvar 'feedback 1) ; beep feedback + ) + (setvar 'light (bitwise-xor light 1)) ; toggle light + ) + ) - (if (> brake 0.02) - (setvar 'lock (bitwise-xor lock 1)) - (if (= speedmode 1) ; is drive? - (setvar 'speedmode 4) ; to sport - (if (= speedmode 2) ; is eco? - (setvar 'speedmode 1) ; to drive - (if (= speedmode 4) ; is sport? - (setvar 'speedmode 2)))) ; to eco + (if (>= presses 2) ; double press + (progn + (if (> brake 0.02) + (setvar 'lock (bitwise-xor lock 1)) + (if (= speedmode 1) ; is drive? + (setvar 'speedmode 4) ; to sport + (if (= speedmode 2) ; is eco? + (setvar 'speedmode 1) ; to drive + (if (= speedmode 4) ; is sport? + (setvar 'speedmode 2)))) ; to eco + ) + ) + ) + + (setvar 'presses 0) ) ) ) - - (setvar 'presses 0) ) - ) - ) - (setvar 'buttonold (gpio-read 'pin-rx)) - - (if (= (gpio-read 'pin-rx) 0) - (if (> (- (systime) presstime) 10000) ; long press - (progn - (setvar 'off (bitwise-xor off 1)) - (setvar 'presstime (systime)) - ) - ) - ) + (setvar 'buttonold (gpio-read 'pin-rx)) + + ; ) + ;) + ; mode field (1=drive, 2=eco, 4=sport, 8=charge, 16=off, 32=lock) (if (= off 1) (bufset-u8 tx-frame 6 16) ; turn off display @@ -185,8 +204,20 @@ (bufset-u8 tx-frame 8 light) (bufset-u8 tx-frame 8 0) ) - - ; todo: add beeping on lock when pushing scooter + + ; beep field + (if (= lock 1) + (if (> (* (get-speed) 3.6) min-speed) + (bufset-u8 tx-frame 9 1) ; beep lock + (bufset-u8 tx-frame 9 0)) + (if (> feedback 0) + (progn + (bufset-u8 tx-frame 9 1) + (setvar 'feedback (- feedback 1)) + ) + (bufset-u8 tx-frame 9 0) + ) + ) ; speed field (if (= show-batt-in-idle 1) @@ -199,5 +230,5 @@ (if (= show-faults 1) (bufset-u8 tx-frame 11 (get-fault)) ) - (sleep 0.1) -))- \ No newline at end of file + (sleep 0.01) +)) \ No newline at end of file From ad3c206d41e07495352d528b9f90f1c9b42168ec Mon Sep 17 00:00:00 2001 From: 1zuna Date: Mon, 13 Jun 2022 18:04:14 +0200 Subject: [PATCH 09/14] improved m365 dash added adc version fully support speed modes now cleanup --- res/Lisp/Examples/m365_dash.lisp | 304 +++++++++++++++------------ res/Lisp/Examples/m365_dash_adc.lisp | 249 ++++++++++++++++++++++ 2 files changed, 415 insertions(+), 138 deletions(-) create mode 100644 res/Lisp/Examples/m365_dash_adc.lisp diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 00ab00672..45b9b3332 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -1,9 +1,7 @@ -;m365 dashboard free for all by Netzpfuscher -;red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button) +; M365 dashboard compability lisp script by Netzpfuscher +; Wiring: red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button)+3.3V with R470 Resistor -;(app-adc-detach 3 1) ;Detach ADC1/2 and cc/rev button from APP - -;****User parameters**** +; **** User parameters **** ;Calibrate throttle min max (define cal-thr-lo 41.0) (define cal-thr-hi 178.0) @@ -15,10 +13,17 @@ (define light-default 0) (define show-faults 1) (define show-batt-in-idle 1) - (define min-speed 1) -;****Code section**** +; Speed modes with MAX KM/H and MAX WATTS +(define speed-eco 7) +(define watt-eco 400) +(define speed-drive 17) +(define watt-drive 500) +(define speed-sport 21) ; or 400 +(define watt-sport 700) ; or 1500000 + +; **** Code section **** (uart-start 115200 'half-duplex) (gpio-configure 'pin-rx 'pin-mode-in-pu) @@ -36,69 +41,114 @@ (define c-out 0) (define code 0) +; Button handling + (define presstime (systime)) (define presses 0) +; Mode states + (define off 0) (define lock 0) -(define speedmode 1) +(define speedmode 4) + +(conf-set 'max-speed (/ speed-sport 3.6)) +(conf-set 'l-watt-max (/ watt-sport 3.6)) + +; Sound feedback (define feedback 0) -(defun inp (buffer) ;Frame 0x65 +(defun inp(buffer) ; Frame 0x65 (progn - (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) - (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) - - ;(setvar 'throttle (/(bufget-u8 uart-buf 4) 255.0)) - ;(setvar 'brake (/(bufget-u8 uart-buf 5) 255.0)) - ;(app-adc-override 0 throttle) - ;(app-adc-override 1 brake) - - ; todo: figure out how to calculate and set max rpm - ;(if (= speedmode 1) ; is drive? - ; (print "drive") - ; (if (= speedmode 2) ; is eco? - ; (print "eco") - ; (if (= speedmode 4) ; is sport? - ; (print "sport")))) - - (if (= (+ off lock) 0) - (progn - (if (> (* (get-speed) 3.6) min-speed) - (set-current-rel throttle) - (set-current-rel 0)) - - (if (> brake 0.02) - (set-brake-rel brake)) - ) - (progn - (set-current-rel 0) - (if (= lock 1) + (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) + (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) + + (if (= (+ off lock) 0) + (progn (if (> (* (get-speed) 3.6) min-speed) - (set-brake-rel 1) + (set-current-rel throttle) + (set-current-rel 0)) + + (if (> brake 0.02) + (set-brake-rel brake)) + ) + (progn + (set-current-rel 0) + (if (= lock 1) + (if (> (* (get-speed) 3.6) min-speed) + (set-brake-rel 1) + (set-brake-rel 0) + ) (set-brake-rel 0) ) - (set-brake-rel 0) ) ) ) - - -)) +) -(defun outp (buffer) ;Frame 0x64 +(defun outp(buffer) ; Frame 0x64 (progn - (setvar 'crc 0) - (looprange i 2 12 - (setvar 'crc (+ crc (bufget-u8 tx-frame i)))) - (setvar 'c-out (bitwise-xor crc 0xFFFF)) - (bufset-u8 tx-frame 12 c-out) - (bufset-u8 tx-frame 13 (shr c-out 8)) - (uart-write tx-frame) -)) - -(defun read-thd () + ; mode field (1=drive, 2=eco, 4=sport, 8=charge, 16=off, 32=lock) + (if (= off 1) + (bufset-u8 tx-frame 6 16) + (if (= lock 1) + (bufset-u8 tx-frame 6 32) ; lock display + (bufset-u8 tx-frame 6 speedmode) + ) + ) + + ; batt field + (bufset-u8 tx-frame 7 (*(get-batt) 100)) + + ; light field + (if (= off 0) + (bufset-u8 tx-frame 8 light) + (bufset-u8 tx-frame 8 0) + ) + + ; beep field + (if (= lock 1) + (if (> (* (get-speed) 3.6) min-speed) + (bufset-u8 tx-frame 9 1) ; beep lock + (bufset-u8 tx-frame 9 0)) + (if (> feedback 0) + (progn + (bufset-u8 tx-frame 9 1) + (setvar 'feedback (- feedback 1)) + ) + (bufset-u8 tx-frame 9 0) + ) + ) + + ; speed field + (if (= show-batt-in-idle 1) + (if (> (* (get-speed) 3.6) 1) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + (bufset-u8 tx-frame 10 (*(get-batt) 100))) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + ) + + ; error field + (if (= show-faults 1) + (bufset-u8 tx-frame 11 (get-fault)) + ) + + ; calc crc + + (setvar 'crc 0) + (looprange i 2 12 + (setvar 'crc (+ crc (bufget-u8 tx-frame i)))) + (setvar 'c-out (bitwise-xor crc 0xFFFF)) + (bufset-u8 tx-frame 12 c-out) + (bufset-u8 tx-frame 13 (shr c-out 8)) + + ; write + (uart-write tx-frame) + ) +) + +(defun read-thd() (loopwhile t (progn (uart-read-bytes uart-buf 3 0) @@ -123,112 +173,90 @@ ;) ) ) - ) - ) -))))) + ) + ) + ) + ) + ) + ) +) -(spawn 150 read-thd) ; Run UART in its own thread +; Spawn UART reading thread +(spawn 150 read-thd) (loopwhile t (progn + ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: ;(if (<= (* (get-speed) 3.6) min-speed) - ; (progn - (if (> buttonold (gpio-read 'pin-rx)) - (progn - (setvar 'presses (+ presses 1)) - (setvar 'presstime (systime)) - ) - (if (> (- (systime) presstime) 2500) ; - (if (= (gpio-read 'pin-rx) 0) ; check if button is still pressed - (if (> (- (systime) presstime) 6000) ; instead check for long press - (progn - (if (= lock 0) ; it is locked? do not turn off - (progn - (setvar 'off 1) ; turn off - (setvar 'feedback 1) ; beep feedback - ) + (if (> buttonold (gpio-read 'pin-rx)) + (progn + (setvar 'presses (+ presses 1)) + (setvar 'presstime (systime)) + ) + (if (> (- (systime) presstime) 2500) ; + (if (= (gpio-read 'pin-rx) 0) ; check if button is still pressed + (if (> (- (systime) presstime) 6000) ; instead check for long press + (progn + (if (= lock 0) ; it is locked? do not turn off + (progn + (setvar 'off 1) ; turn off + (setvar 'feedback 1) ; beep feedback ) - (setvar 'presstime (systime)) ; reset press time again - (setvar 'presses 0) ) + (setvar 'presstime (systime)) ; reset press time again + (setvar 'presses 0) ) - (progn ; else if button not pressed - (if (= presses 1) - (if (= off 1) ; is it off? turn on scooter again - (progn - (setvar 'off 0) ; turn off - (setvar 'feedback 1) ; beep feedback - ) - (setvar 'light (bitwise-xor light 1)) ; toggle light + ) + (progn ; else if button not pressed + (if (= presses 1) ; single press + (if (= off 1) ; is it off? turn on scooter again + (progn + (setvar 'off 0) ; turn on + (setvar 'feedback 1) ; beep feedback ) + (setvar 'light (bitwise-xor light 1)) ; toggle light ) + ) - (if (>= presses 2) ; double press - (progn - (if (> brake 0.02) - (setvar 'lock (bitwise-xor lock 1)) + (if (>= presses 2) ; double press + (progn + (if (> brake 0.02) + (setvar 'lock (bitwise-xor lock 1)) + (progn (if (= speedmode 1) ; is drive? - (setvar 'speedmode 4) ; to sport + (progn + (conf-set 'max-speed (/ speed-sport 3.6)) + (conf-set 'l-watt-max (/ watt-sport 3.6)) + (setvar 'speedmode 4) ; to sport + ) (if (= speedmode 2) ; is eco? - (setvar 'speedmode 1) ; to drive + (progn + (conf-set 'max-speed (/ speed-drive 3.6)) + (conf-set 'l-watt-max (/ watt-drive 3.6)) + (setvar 'speedmode 1) ; to drive + ) (if (= speedmode 4) ; is sport? - (setvar 'speedmode 2)))) ; to eco + (progn + (conf-set 'max-speed (/ speed-eco 3.6)) + (conf-set 'l-watt-max (/ watt-eco 3.6)) + (setvar 'speedmode 2) ; to eco + ) + ) + ) + ) ) ) ) - - (setvar 'presses 0) ) + + (setvar 'presses 0) ) ) ) - (setvar 'buttonold (gpio-read 'pin-rx)) - - - ; ) - ;) - - ; mode field (1=drive, 2=eco, 4=sport, 8=charge, 16=off, 32=lock) - (if (= off 1) - (bufset-u8 tx-frame 6 16) ; turn off display - (if (= lock 1) - (bufset-u8 tx-frame 6 32) ; lock display - (bufset-u8 tx-frame 6 speedmode) ) - ) - - ; batt field - (bufset-u8 tx-frame 7 (*(get-batt) 100)) - ; light field - (if (= off 0) - (bufset-u8 tx-frame 8 light) - (bufset-u8 tx-frame 8 0) - ) - - ; beep field - (if (= lock 1) - (if (> (* (get-speed) 3.6) min-speed) - (bufset-u8 tx-frame 9 1) ; beep lock - (bufset-u8 tx-frame 9 0)) - (if (> feedback 0) - (progn - (bufset-u8 tx-frame 9 1) - (setvar 'feedback (- feedback 1)) - ) - (bufset-u8 tx-frame 9 0) - ) - ) - ; speed field - (if (= show-batt-in-idle 1) - (if (> (* (get-speed) 3.6) 1) - (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) - (bufset-u8 tx-frame 10 (*(get-batt) 100))) - (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) - ) - - (if (= show-faults 1) - (bufset-u8 tx-frame 11 (get-fault)) - ) + (setvar 'buttonold (gpio-read 'pin-rx)) + ;) (sleep 0.01) -)) \ No newline at end of file + ) +) \ No newline at end of file diff --git a/res/Lisp/Examples/m365_dash_adc.lisp b/res/Lisp/Examples/m365_dash_adc.lisp new file mode 100644 index 000000000..c4c9fcae6 --- /dev/null +++ b/res/Lisp/Examples/m365_dash_adc.lisp @@ -0,0 +1,249 @@ +; M365 dashboard compability lisp script by Netzpfuscher +; Wiring: red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button)+3.3V with R470 Resistor + +(app-adc-detach 3 1) ; Detach ADC1/2 and cc/rev button from APP + +; **** User parameters **** +(define light-default 0) +(define show-faults 1) +(define show-batt-in-idle 1) +(define min-speed 1) + +; Speed modes with MAX KM/H and MAX WATTS +(define speed-eco 7) +(define watt-eco 400) +(define speed-drive 17) +(define watt-drive 500) +(define speed-sport 21) ; or 400 +(define watt-sport 700) ; or 1500000 + +; **** Code section **** +(uart-start 115200 'half-duplex) +(gpio-configure 'pin-rx 'pin-mode-in-pu) + +(define tx-frame (array-create 14)) +(bufset-u16 tx-frame 0 0x55AA) +(bufset-u16 tx-frame 2 0x0821) +(bufset-u16 tx-frame 4 0x6400) + +(define uart-buf (array-create type-byte 64)) +(define throttle 0) +(define brake 0) +(define buttonold 0) +(define light 0) +(setvar 'light light-default) +(define c-out 0) +(define code 0) + +; Button handling + +(define presstime (systime)) +(define presses 0) + +; Mode states + +(define off 0) +(define lock 0) +(define speedmode 4) + +(conf-set 'max-speed (/ speed-sport 3.6)) +(conf-set 'l-watt-max (/ watt-sport 3.6)) + +; Sound feedback + +(define feedback 0) + +(defun inp(buffer) ; Frame 0x65 + (progn + (setvar 'throttle (/(bufget-u8 uart-buf 4) 255.0)) + (setvar 'brake (/(bufget-u8 uart-buf 5) 255.0)) + + (if (= (+ off lock) 0) + (progn + (app-adc-override 0 throttle) + (if (= lock 1) + (app-adc-override 1 1) + (app-adc-override 1 brake) + ) + ) + (progn + (app-adc-override 0 0) + (app-adc-override 1 0) + ) + ) + ) +) + +(defun outp(buffer) ; Frame 0x64 + (progn + ; mode field (1=drive, 2=eco, 4=sport, 8=charge, 16=off, 32=lock) + (if (= off 1) + (bufset-u8 tx-frame 6 16) + (if (= lock 1) + (bufset-u8 tx-frame 6 32) ; lock display + (bufset-u8 tx-frame 6 speedmode) + ) + ) + + ; batt field + (bufset-u8 tx-frame 7 (*(get-batt) 100)) + + ; light field + (if (= off 0) + (bufset-u8 tx-frame 8 light) + (bufset-u8 tx-frame 8 0) + ) + + ; beep field + (if (= lock 1) + (if (> (* (get-speed) 3.6) min-speed) + (bufset-u8 tx-frame 9 1) ; beep lock + (bufset-u8 tx-frame 9 0)) + (if (> feedback 0) + (progn + (bufset-u8 tx-frame 9 1) + (setvar 'feedback (- feedback 1)) + ) + (bufset-u8 tx-frame 9 0) + ) + ) + + ; speed field + (if (= show-batt-in-idle 1) + (if (> (* (get-speed) 3.6) 1) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + (bufset-u8 tx-frame 10 (*(get-batt) 100))) + (bufset-u8 tx-frame 10 (* (get-speed) 3.6)) + ) + + ; error field + (if (= show-faults 1) + (bufset-u8 tx-frame 11 (get-fault)) + ) + + ; calc crc + + (setvar 'crc 0) + (looprange i 2 12 + (setvar 'crc (+ crc (bufget-u8 tx-frame i)))) + (setvar 'c-out (bitwise-xor crc 0xFFFF)) + (bufset-u8 tx-frame 12 c-out) + (bufset-u8 tx-frame 13 (shr c-out 8)) + + ; write + (uart-write tx-frame) + ) +) + +(defun read-thd() + (loopwhile t + (progn + (uart-read-bytes uart-buf 3 0) + (if (= (bufget-u16 uart-buf 0) 0x55aa) + (progn + (setvar 'len (bufget-u8 uart-buf 2)) + (setvar 'crc len) + (if (> len 0) + (progn + (uart-read-bytes uart-buf (+ len 4) 0) + (looprange i 0 len + (setvar 'crc (+ crc (bufget-u8 uart-buf i)))) + (if (=(+(shl(bufget-u8 uart-buf (+ len 2))8) (bufget-u8 uart-buf (+ len 1))) (bitwise-xor crc 0xFFFF)) + (progn + (setvar 'code (bufget-u8 uart-buf 1)) + + (if(= code 0x65) + (inp uart-buf) + ) + ;(if(= code 0x64) + (outp uart-buf) + ;) + ) + ) + ) + ) + ) + ) + ) + ) +) + +; Spawn UART reading thread +(spawn 150 read-thd) + +(loopwhile t + (progn + ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: + ;(if (<= (* (get-speed) 3.6) min-speed) + (if (> buttonold (gpio-read 'pin-rx)) + (progn + (setvar 'presses (+ presses 1)) + (setvar 'presstime (systime)) + ) + (if (> (- (systime) presstime) 2500) ; + (if (= (gpio-read 'pin-rx) 0) ; check if button is still pressed + (if (> (- (systime) presstime) 6000) ; instead check for long press + (progn + (if (= lock 0) ; it is locked? do not turn off + (progn + (setvar 'off 1) ; turn off + (setvar 'feedback 1) ; beep feedback + ) + ) + (setvar 'presstime (systime)) ; reset press time again + (setvar 'presses 0) + ) + ) + (progn ; else if button not pressed + (if (= presses 1) ; single press + (if (= off 1) ; is it off? turn on scooter again + (progn + (setvar 'off 0) ; turn on + (setvar 'feedback 1) ; beep feedback + ) + (setvar 'light (bitwise-xor light 1)) ; toggle light + ) + ) + + (if (>= presses 2) ; double press + (progn + (if (> brake 0.4) + (setvar 'lock (bitwise-xor lock 1)) + (progn + (if (= speedmode 1) ; is drive? + (progn + (conf-set 'max-speed (/ speed-sport 3.6)) + (conf-set 'l-watt-max (/ watt-sport 3.6)) + (setvar 'speedmode 4) ; to sport + ) + (if (= speedmode 2) ; is eco? + (progn + (conf-set 'max-speed (/ speed-drive 3.6)) + (conf-set 'l-watt-max (/ watt-drive 3.6)) + (setvar 'speedmode 1) ; to drive + ) + (if (= speedmode 4) ; is sport? + (progn + (conf-set 'max-speed (/ speed-eco 3.6)) + (conf-set 'l-watt-max (/ watt-eco 3.6)) + (setvar 'speedmode 2) ; to eco + ) + ) + ) + ) + ) + ) + ) + ) + + (setvar 'presses 0) + ) + ) + ) + ) + + (setvar 'buttonold (gpio-read 'pin-rx)) + ;) + (sleep 0.01) + ) +) \ No newline at end of file From c29e85f3a355f0176b6c4b3817ecd0566c4fd646 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Mon, 13 Jun 2022 18:06:29 +0200 Subject: [PATCH 10/14] added missing progn --- res/Lisp/Examples/m365_dash.lisp | 3 ++- res/Lisp/Examples/m365_dash_adc.lisp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 45b9b3332..a94351c18 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -188,6 +188,7 @@ (progn ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: ;(if (<= (* (get-speed) 3.6) min-speed) + ;(progn (if (> buttonold (gpio-read 'pin-rx)) (progn (setvar 'presses (+ presses 1)) @@ -256,7 +257,7 @@ ) (setvar 'buttonold (gpio-read 'pin-rx)) - ;) + ;)) (sleep 0.01) ) ) \ No newline at end of file diff --git a/res/Lisp/Examples/m365_dash_adc.lisp b/res/Lisp/Examples/m365_dash_adc.lisp index c4c9fcae6..47eb03f53 100644 --- a/res/Lisp/Examples/m365_dash_adc.lisp +++ b/res/Lisp/Examples/m365_dash_adc.lisp @@ -175,6 +175,7 @@ (progn ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: ;(if (<= (* (get-speed) 3.6) min-speed) + ;(progn (if (> buttonold (gpio-read 'pin-rx)) (progn (setvar 'presses (+ presses 1)) @@ -243,7 +244,7 @@ ) (setvar 'buttonold (gpio-read 'pin-rx)) - ;) + ;)) (sleep 0.01) ) ) \ No newline at end of file From db68ad377c85dae82f2167d8ad66f654729fa657 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Thu, 23 Jun 2022 17:15:18 +0200 Subject: [PATCH 11/14] fixed accidentally dividing watts --- res/Lisp/Examples/m365_dash.lisp | 8 ++++---- res/Lisp/Examples/m365_dash_adc.lisp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index a94351c18..1bdfd6851 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -53,7 +53,7 @@ (define speedmode 4) (conf-set 'max-speed (/ speed-sport 3.6)) -(conf-set 'l-watt-max (/ watt-sport 3.6)) +(conf-set 'l-watt-max watt-sport) ; Sound feedback @@ -227,19 +227,19 @@ (if (= speedmode 1) ; is drive? (progn (conf-set 'max-speed (/ speed-sport 3.6)) - (conf-set 'l-watt-max (/ watt-sport 3.6)) + (conf-set 'l-watt-max watt-sport) (setvar 'speedmode 4) ; to sport ) (if (= speedmode 2) ; is eco? (progn (conf-set 'max-speed (/ speed-drive 3.6)) - (conf-set 'l-watt-max (/ watt-drive 3.6)) + (conf-set 'l-watt-max watt-drive) (setvar 'speedmode 1) ; to drive ) (if (= speedmode 4) ; is sport? (progn (conf-set 'max-speed (/ speed-eco 3.6)) - (conf-set 'l-watt-max (/ watt-eco 3.6)) + (conf-set 'l-watt-max watt-eco) (setvar 'speedmode 2) ; to eco ) ) diff --git a/res/Lisp/Examples/m365_dash_adc.lisp b/res/Lisp/Examples/m365_dash_adc.lisp index 47eb03f53..1f6e72334 100644 --- a/res/Lisp/Examples/m365_dash_adc.lisp +++ b/res/Lisp/Examples/m365_dash_adc.lisp @@ -47,7 +47,7 @@ (define speedmode 4) (conf-set 'max-speed (/ speed-sport 3.6)) -(conf-set 'l-watt-max (/ watt-sport 3.6)) +(conf-set 'l-watt-max watt-sport) ; Sound feedback @@ -214,19 +214,19 @@ (if (= speedmode 1) ; is drive? (progn (conf-set 'max-speed (/ speed-sport 3.6)) - (conf-set 'l-watt-max (/ watt-sport 3.6)) + (conf-set 'l-watt-max watt-sport) (setvar 'speedmode 4) ; to sport ) (if (= speedmode 2) ; is eco? (progn (conf-set 'max-speed (/ speed-drive 3.6)) - (conf-set 'l-watt-max (/ watt-drive 3.6)) + (conf-set 'l-watt-max watt-drive) (setvar 'speedmode 1) ; to drive ) (if (= speedmode 4) ; is sport? (progn (conf-set 'max-speed (/ speed-eco 3.6)) - (conf-set 'l-watt-max (/ watt-eco 3.6)) + (conf-set 'l-watt-max watt-eco) (setvar 'speedmode 2) ; to eco ) ) From 3603fdf0ca0ae552c84172016d5ab5e0dd0122ba Mon Sep 17 00:00:00 2001 From: 1zuna Date: Tue, 9 Aug 2022 22:35:00 +0200 Subject: [PATCH 12/14] Improve throttle and brake handling Added throttle deadzone Added brake deadzone Optimized throttle and brake values Added throttle-in and brake-in variables for calibration Added brake min-speed and fixed noise when pressing brake on 0km/h Fixed throttle and brake values going over 1 (not really a issue but it is better) --- res/Lisp/Examples/m365_dash.lisp | 78 +++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 22 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 1bdfd6851..a91e57f57 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -1,14 +1,19 @@ -; M365 dashboard compability lisp script by Netzpfuscher -; Wiring: red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button)+3.3V with R470 Resistor +; M365 dashboard compability lisp script by Netzpfuscher and 1zuna +; Tested with Flipsky 75100 on COMM connector +; UART Wiring: red=5V black=GND yellow=COM-TX (UART-HDX) green=COM-RX (button)+3.3V with R470 Resistor +; German guide: https://rollerplausch.com/threads/vesc-controller-einbau-1s-pro2-g30.6032/ ; **** User parameters **** ;Calibrate throttle min max (define cal-thr-lo 41.0) -(define cal-thr-hi 178.0) +(define cal-thr-hi 167.0) +(define thr-deadzone 0.05) ;Calibrate brake min max -(define cal-brk-lo 40.0) -(define cal-brk-hi 178.0) +(define cal-brk-lo 39.0) +(define cal-brk-hi 179.0) +(define brk-deadzone 0.05) +(define brk-minspeed 1) (define light-default 0) (define show-faults 1) @@ -33,7 +38,10 @@ (bufset-u16 tx-frame 4 0x6400) (define uart-buf (array-create type-byte 64)) +(define current-speed 0) +(define throttle-in 0) (define throttle 0) +(define brake-in 0) (define brake 0) (define buttonold 0) (define light 0) @@ -61,26 +69,52 @@ (defun inp(buffer) ; Frame 0x65 (progn - (setvar 'throttle (/(-(bufget-u8 uart-buf 4) cal-thr-lo) cal-thr-hi)) - (setvar 'brake (/(-(bufget-u8 uart-buf 5) cal-brk-lo) cal-brk-hi)) + (setvar 'current-speed (* (get-speed) 3.6)) + + ; Throttle + (setvar 'throttle-in (bufget-u8 uart-buf 4)) + (setvar 'throttle (/(- throttle-in cal-thr-lo) cal-thr-hi)) + + (if (< throttle thr-deadzone) + (setvar 'throttle 0) + ) + (if (> throttle 1) + (setvar 'throttle 1) + ) + + ; Brake + (setvar 'brake-in (bufget-u8 uart-buf 5)) + (setvar 'brake (/(- brake-in cal-brk-lo) cal-brk-hi)) + + (if(< brake brk-deadzone) + (setvar 'brake 0) + ) + (if (< current-speed brk-minspeed) + (setvar 'brake 0) + ) + (if (> brake 1) + (setvar 'brake 1) + ) (if (= (+ off lock) 0) - (progn - (if (> (* (get-speed) 3.6) min-speed) + (progn ; Driving mode + (if (> current-speed min-speed) (set-current-rel throttle) - (set-current-rel 0)) - - (if (> brake 0.02) - (set-brake-rel brake)) + (set-current-rel 0) + ) + (if (not (= brake 0)) + (set-brake-rel brake) + ) ) (progn - (set-current-rel 0) - (if (= lock 1) - (if (> (* (get-speed) 3.6) min-speed) - (set-brake-rel 1) - (set-brake-rel 0) + (set-current-rel 0) ; No throttle input when off or locked + + (if (= lock 1) ; Check if it is locked + (if (> current-speed min-speed) ; Brake when being pushed while locked + (set-brake-rel 1) ; Full power brake + (set-brake-rel 0) ; No brake ) - (set-brake-rel 0) + (set-brake-rel 0) ; No brake input when off ) ) ) @@ -187,8 +221,8 @@ (loopwhile t (progn ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: - ;(if (<= (* (get-speed) 3.6) min-speed) - ;(progn + (if (<= (* (get-speed) 3.6) min-speed) + (progn (if (> buttonold (gpio-read 'pin-rx)) (progn (setvar 'presses (+ presses 1)) @@ -257,7 +291,7 @@ ) (setvar 'buttonold (gpio-read 'pin-rx)) - ;)) + )) (sleep 0.01) ) ) \ No newline at end of file From 3b74a0671da3396911b2d80c18870ceafdac03b9 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Tue, 13 Sep 2022 23:20:07 +0200 Subject: [PATCH 13/14] fixed lock function --- res/Lisp/Examples/m365_dash.lisp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index a91e57f57..80bdfc9e5 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -220,7 +220,7 @@ (loopwhile t (progn - ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: + ; Random button presses can occour (while braking as ex.), that's why I decided to disable button interaction while driving by default. (if (<= (* (get-speed) 3.6) min-speed) (progn (if (> buttonold (gpio-read 'pin-rx)) @@ -255,7 +255,7 @@ (if (>= presses 2) ; double press (progn - (if (> brake 0.02) + (if (> (/(- brake-in cal-brk-lo) cal-brk-hi) brk-deadzone) (setvar 'lock (bitwise-xor lock 1)) (progn (if (= speedmode 1) ; is drive? From 7876788490b7e84c4a2e781eb50a236d0df1b31c Mon Sep 17 00:00:00 2001 From: 1zuna Date: Thu, 15 Sep 2022 08:11:00 +0200 Subject: [PATCH 14/14] Revert "fixed lock function" This reverts commit 3b74a0671da3396911b2d80c18870ceafdac03b9. --- res/Lisp/Examples/m365_dash.lisp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/Lisp/Examples/m365_dash.lisp b/res/Lisp/Examples/m365_dash.lisp index 80bdfc9e5..a91e57f57 100644 --- a/res/Lisp/Examples/m365_dash.lisp +++ b/res/Lisp/Examples/m365_dash.lisp @@ -220,7 +220,7 @@ (loopwhile t (progn - ; Random button presses can occour (while braking as ex.), that's why I decided to disable button interaction while driving by default. + ; If you do not have any R470 resistors or it still occours to press buttons randomly, try uncommenting this: (if (<= (* (get-speed) 3.6) min-speed) (progn (if (> buttonold (gpio-read 'pin-rx)) @@ -255,7 +255,7 @@ (if (>= presses 2) ; double press (progn - (if (> (/(- brake-in cal-brk-lo) cal-brk-hi) brk-deadzone) + (if (> brake 0.02) (setvar 'lock (bitwise-xor lock 1)) (progn (if (= speedmode 1) ; is drive?