From f9f1b54ef672e4b98e83e18814994f2924399387 Mon Sep 17 00:00:00 2001 From: dadij <126593917+dadij@users.noreply.github.com> Date: Thu, 3 Sep 2026 19:26:09 +0000 Subject: [PATCH] =?UTF-8?q?Kominn=20simple=20klasi=20sem=20virkar,=20?= =?UTF-8?q?=C3=BEarf=20s=C3=AD=C3=B0an=20a=C3=B0=20henda=20=C3=AD=20interr?= =?UTF-8?q?upt=20service=20routine=20til=20=C3=BEess=20a=C3=B0=20telja=20?= =?UTF-8?q?=C3=AD=20sta=C3=B0in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 73 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/main.cpp b/main.cpp index 54faf56..6163131 100644 --- a/main.cpp +++ b/main.cpp @@ -5,46 +5,61 @@ #include "digital_in.h" #include "digital_out.h" +class RotaryEncoderDriver { + int count{0}; + bool last_lo{false}; + + Digital_out led{5}; + + Digital_in eA; + Digital_in eB; + +public: + RotaryEncoderDriver(unsigned short pin_a = 4, unsigned short pin_b = 5) : eA(pin_a), eB(pin_b) { + led.init(); + eA.init(); + eB.init(); + last_lo = eA.is_lo(); + } + + int position() { + bool curr_hi = eA.is_hi(); + + if (last_lo && curr_hi) { + count += eB.is_hi() ? 1 : -1; + led.set_hi(); + } else { + led.set_lo(); + } + + last_lo = !curr_hi; + return count; + } + +}; int main() { uint8_t cycle{0}; - int8_t counter{0}; - double ratio; - - bool last_lo = false; - - Digital_in encoderA{4}; - Digital_in encoderB{5}; - Digital_out led{5}; - - encoderA.init(); - encoderB.init(); - led.init(); + RotaryEncoderDriver encoder; Serial.begin(9600); + int prev_pos = encoder.position(); while (true) { _delay_us(100); - led.set_lo(); + int curr_pos = encoder.position(); - bool curr_hi = encoderA.is_hi(); + if (cycle++ == 255) { + int delta = curr_pos - prev_pos; + float rpm = delta * 60.0f / (700.0f * 0.0256f); - if (last_lo && curr_hi) { - counter += encoderB.is_lo() ? -1 : 1; - led.set_hi(); + Serial.print("Count: "); + Serial.print(delta); + Serial.print("\tRPM: "); + Serial.println(rpm); + + prev_pos = curr_pos; } - ++cycle; - - if (cycle == 255) { - ratio = counter / (0.0255 * 700); - counter = 0; - cycle = 0; - Serial.println(ratio); - } - - last_lo = !curr_hi; } - - return 0; }