;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/terror-3/ev3-motor.el (require 'cl-lib) (require 'ev3-motor-init) (require 'file-write-to) ;; speed file (defun get-motor-speed-file (motor) "Get the speed file for MOTOR. Note: Speed file data does not tell the actual speed of the hardware droid." (cl-case motor ((left quote) left-motor-speed-file) ((right quote) right-motor-speed-file) ((m quote) m-motor-speed-file) )) (defun get-motor-speed (motor) (file-to-integer (get-motor-speed-file motor) )) (defun set-motor-speed (motor speed) (write-to-file (get-motor-speed-file motor) speed) ) ;; motor commands, interacts with droid hardware (defun get-motor-cmd-file (motor) (cl-case motor ((left quote) left-motor-cmd-file) ((right quote) right-motor-cmd-file) ((m quote) m-motor-cmd-file) )) (defun motor-cmd (motor cmd) (write-to-file (get-motor-cmd-file motor) cmd) ) (defun stop (motor) (motor-cmd motor "stop") ) (defun run-forever (motor) (motor-cmd motor "run-forever") ) ;; software motor control, use these from Elisp (defun set-motor (motor speed) (let*((max-speed 1050) ; TODO: get from file (min-speed (- max-speed)) ) (when (and (<= min-speed speed) (<= speed max-speed) ) (set-motor-speed motor speed) (if (zerop speed) (stop motor) (run-forever motor) )))) ;; set motors (defun set-motor-m (speed) (set-motor 'm speed) ) (defun set-motor-left (speed) (set-motor 'left speed) ) (defun set-motor-right (speed) (set-motor 'right speed) ) (defun set-motor-both (speed &optional right) (or right (setq right speed)) (set-motor-left speed) (set-motor-right speed) ) ;; stop motors (defun stop-motor-m () (set-motor 'm 0) ) (defun stop-motor-left () (set-motor 'left 0) ) (defun stop-motor-right () (set-motor 'right 0) ) (defun stop-motor-both () (stop-motor-left) (stop-motor-right) ) (provide 'ev3-motor)