From 3eb11a27aa2e8d574c4ba16bed245db3058f70ad Mon Sep 17 00:00:00 2001 From: Amar Mahmutbegovic Date: Sun, 9 Feb 2025 13:19:00 +0100 Subject: [PATCH] add Chapter18 --- Chapter18/accelerometer_interface.cpp | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Chapter18/accelerometer_interface.cpp diff --git a/Chapter18/accelerometer_interface.cpp b/Chapter18/accelerometer_interface.cpp new file mode 100644 index 0000000..af37787 --- /dev/null +++ b/Chapter18/accelerometer_interface.cpp @@ -0,0 +1,53 @@ +#include +#include + +class accelerometer { +public: + struct data{ + float x; + float y; + float z; + }; + enum class sampling_rate { + c_20_hz, + c_50_hz, + c_100_hz, + }; + virtual void set_sampling_rate(sampling_rate) = 0; + virtual data get_data() = 0; +}; + +class adxl_345 : public accelerometer { +public: + void set_sampling_rate(sampling_rate) override { + printf("adxl_345: setting sampling rate\r\n"); + } + data get_data() override { + return data{0.02f, 0.981f, 0.03f}; + } +}; + +class tap_detection_algo { +public: + tap_detection_algo(accelerometer &accel) : + accel_(accel) { + accel_.set_sampling_rate(accelerometer::sampling_rate::c_100_hz); + } + bool run () { + auto accel_data = accel_.get_data(); + printf("algo: x = %.2f, y = %.2f, z = %.2f\r\n", + accel_data.x, accel_data.y, accel_data.z); + // process data + return false; + } +private: + accelerometer &accel_; +}; + +int main() { + adxl_345 accel; + tap_detection_algo algo(accel); + algo.run(); + + return 0; +} \ No newline at end of file