;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/terror-3/ev3-demo.el (require 'cl-lib) (require 'ev3-color-stop-on-color) (require 'ev3-ir-prox-stop) (require 'ev3-leds) (require 'ev3-monitor) (require 'ev3-motor-rotate) (require 'ev3-motor-speed) (require 'ev3-motor-stop) (require 'ev3-motor-straight) (require 'ev3-motor-turn) (require 'ev3-touch) (require 'pcase) (defalias '** #'expt) (defun get-prob (prob) (pcase prob ("never" (** 2 0)) ("rare" (** 2 1)) ("uncommon" (** 2 2)) ("sometimes" (** 2 3)) ("common" (** 2 4)) ("routine" (** 2 5)) ("nonstop" (** 2 6)) (_ (error "Argument error")) )) (defun t100 () (random 100) ) (defun do-it (fun prob &optional led) (or led (setq led nil)) (let ((roll (t100)) (prb (get-prob prob)) ) (when (<= roll prb) (when led (ev3-led-random) ) (apply fun nil) ))) (defun ev3-demo (&optional kill) "Run the ev3 demo, after that optionally KILL Emacs." (interactive) (let*((its 1850) (sleep-ms 40) (fs (list (list #'ev3-stop "never") (list #'ev3-reverse-inc "never") (list #'ev3-speed-down "never") (list #'ev3-turn-reverse-left "rare") (list #'ev3-turn-reverse-right "rare") (list #'ev3-turn-forward-sharp-left "uncommon") (list #'ev3-turn-forward-sharp-right "uncommon") (list #'ev3-rotate-left "sometimes") (list #'ev3-rotate-right "sometimes") (list #'ev3-turn-forward-left "common") (list #'ev3-turn-forward-right "routine") (list #'ev3-forward-inc "routine") (list #'ev3-speed-up "routine") )) (fsl (length fs)) ) (cl-loop for i from 0 to its do (let*((fp (nth (% i fsl) fs)) (f (car fp)) (p (cadr fp)) ) (when (zerop (random 3)) (do-it f p t) ) (color-stop-on-color 0 sleep-ms) (ir-prox-stop) (ev3-touch-boost) (sleep-for 0 sleep-ms) )) (ev3-stop) (insert "ev3 done\n") (when kill (kill-emacs) ))) (provide 'ev3-demo)