2 * Rotary encoder example
4 * Copyright (C) 2018 Antonio Ospite <ao2@ao2.it>
5 * SPDX-License-Identitier: WTFPL
10 #include <LiquidCrystal.h>
12 #define ENCODER_CHANNEL_A 2
13 #define ENCODER_CHANNEL_B 3
15 #define COUNTS_PER_ROTATION 84
25 #define BACKLIGHT_VALUE 1023
28 Encoder encoder(ENCODER_CHANNEL_A, ENCODER_CHANNEL_B);
29 LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
32 pinMode(LCD_BL, OUTPUT);
33 analogWrite(LCD_BL, BACKLIGHT_VALUE);
38 lcd.print("Rotary Encoder");
40 lcd.print("https://ao2.it");
42 DFRkeypad::FastADC(true);
43 DFRkeypad::iDEFAULT_THRESHOLD=140;
47 byte key = DFRkeypad::GetKey();
48 if (key == DFRkeypad::eSELECT) {
52 long new_counts = encoder.read();
53 if (new_counts != old_counts) {
54 old_counts = new_counts;
61 lcd.print(new_counts);
63 /* Position normalized between 0 and COUNTS_PER_ROTATION */
64 long position = ((new_counts % COUNTS_PER_ROTATION) + COUNTS_PER_ROTATION) % COUNTS_PER_ROTATION;
66 float angle = position * (360.0 / COUNTS_PER_ROTATION);