lqml/snippets/sensor-reading/run.lisp
2023-03-23 18:14:37 +01:00

28 lines
674 B
Common Lisp

(in-package :qml-user)
;;; low-pass filter
(defun make-low-pass-filter (&optional (alpha 0.02))
(let ((a alpha)
filtered)
(lambda (value)
(setf filtered (if filtered
(+ (* value a)
(* filtered (- 1.0 a)))
value)))))
(defvar *accel-x* (make-low-pass-filter))
(defvar *accel-y* (make-low-pass-filter))
(defvar *accel-z* (make-low-pass-filter))
;;; sensor data
(defun hr (x)
"Human readable."
(floor (+ 0.5 (* 1000 x))))
(defun accel-changed (x y z)
(qlog :x (hr (funcall *accel-x* x)))
(qlog :y (hr (funcall *accel-y* y)))
(qlog :z (hr (funcall *accel-z* z))))