From 22c92da97ce5e11ae8774cbc06e85be2583f06f1 Mon Sep 17 00:00:00 2001 From: "pls.153" Date: Thu, 23 Mar 2023 18:14:37 +0100 Subject: [PATCH] add snippet 'sensor-reading' --- snippets/sensor-reading/qml/main.qml | 23 +++++++++++++++++++++++ snippets/sensor-reading/readme.md | 5 +++++ snippets/sensor-reading/run.lisp | 28 ++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 snippets/sensor-reading/qml/main.qml create mode 100644 snippets/sensor-reading/readme.md create mode 100644 snippets/sensor-reading/run.lisp diff --git a/snippets/sensor-reading/qml/main.qml b/snippets/sensor-reading/qml/main.qml new file mode 100644 index 0000000..3858beb --- /dev/null +++ b/snippets/sensor-reading/qml/main.qml @@ -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) + } +} diff --git a/snippets/sensor-reading/readme.md b/snippets/sensor-reading/readme.md new file mode 100644 index 0000000..477eb88 --- /dev/null +++ b/snippets/sensor-reading/readme.md @@ -0,0 +1,5 @@ +Description +----------- + +Shows how to read sensor data with a timer, plus a trivial low-pass filter. + diff --git a/snippets/sensor-reading/run.lisp b/snippets/sensor-reading/run.lisp new file mode 100644 index 0000000..680a739 --- /dev/null +++ b/snippets/sensor-reading/run.lisp @@ -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)))) +