From 71c060b71def0d076c85371ee2780853e4e7ccc2 Mon Sep 17 00:00:00 2001 From: 1zuna Date: Fri, 20 May 2022 00:59:56 +0200 Subject: [PATCH 1/4] 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 2/4] 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 3/4] 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 4/4] 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 + ) ) )