add snippet 'sensor-reading'

This commit is contained in:
pls.153 2023-03-23 18:14:37 +01:00
parent 5a39941fac
commit 22c92da97c
3 changed files with 56 additions and 0 deletions

View file

@ -0,0 +1,23 @@
import QtQuick 2.15
import QtSensors 5.15
Rectangle {
width: 300
height: 500
Accelerometer {
id: accel
active: true
accelerationMode: Accelerometer.User // exclude gravity
}
Timer {
id: timer
interval: 50
repeat: true
running: true
onTriggered: Lisp.call("qml-user:accel-changed",
accel.reading.x, accel.reading.y, accel.reading.z)
}
}

View file

@ -0,0 +1,5 @@
Description
-----------
Shows how to read sensor data with a timer, plus a trivial low-pass filter.

View file

@ -0,0 +1,28 @@
(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))))