W artykule zostanie omówiony enkoder obrotowy KY-040, przedstawimy połączenie, użycie przykładu z biblioteki, napiszemy program gdzie przy pomocy enkodera będziemy wyświetlać na wyświetlaczu lcd wartość od 0 do 100 i na odwrót, a na końcu przerobimy ten kod na wyświetlanie ON i OFF co może przydać się w menu.

Spis treści
- Specyfikacja
- Podłączenie do arduino
- Importowanie biblioteki oraz wykorzystanie przykładu przykładu
- Napisanie programu wyświetlającego wartości od 0 do 100
- Przerobienie napisanego programu aby wyświetlał ON albo OFF w zależności od ustawienia enkodera
- Pliki do pobrania
Specyfikacja
Napięcie robocze: 5 V
Impuls koło: 20
Materiał: komponenty elektroniczne + PCB
Rozmiar: 31*19*29mm
Podłączenie do arduino
Na początku zajmiemy się podłączeniem enkodera, nie jest ono zbyt skomplikowane, będą nas interesowały następujące piny CLK, DT, GND, + (VCC). CLK łączymy do pinu 2 w arduino, a DT do 3. Poniżej znajduje się schemat połączenia.

Importowanie biblioteki oraz wykorzystanie z niej przykładu
Będziemy też potrzebowali biblioteki która w łatwy sposób umożliwi nam obsługę enkodera, możecie ją pobrać na samym dole lub klikając tutaj (jak zainstalować bibliotekę, dowiesz się tutaj). Na razie będziemy wyświetlać wartości w monitorze portów szeregowych, a dopiero później przejdziemy do pracy z wyświetlaczem na którym będziemy wyświetlać wartości z enkodera.
Zaczniemy od wykorzystania przykładu „Basic” z naszej biblioteki w następujący sposób

Wybieramy przykład Basic

Zmieniamy wartości myEnc na 3 i 2
Włączamy monitor portu szeregowego i kręcąc pokrętłem enkodera zgodnie z ruchem wskazówek zegara będziemy otrzymywali wartość rosnącą, a kręcąc w drugą stronę będzie się ona zmniejszała. Możemy też ustawić tak, aby enkoder zwracał nam 0 i 1 niezależnie od strony w którą kręcimy, wystarczy zmienić wartość myEnc na 2 i 0.
Napisanie programu wyświetlającego wartości od 0 do 100
Skoro już zapoznaliśmy się z podstawowym działaniem enkodera, oraz biblioteki przejdźmy do wyświetlania wartości od 0 do 100 na wyświetlaczu OLED 0.96. Sprawa może wydawać nam się trochę skomplikowana, ale wcale taka nie jest, wystarczy zapoznać się z artykułem o wyświetlaczach oled który dostępny jest tutaj. Po zapoznaniu się z artykułem należy podłączyć zasilanie i uziemienie do płytki stykowej od Arduino, następnie podłączamy zasilanie oraz uziemienie z enkodera i wyświetlacza, kiedy to już mamy gotowe możemy przejść do programowania.
Zaczniemy od zdefiniowania pinów CLK i DT, następnie zaimplementujemy wszystkie biblioteki potrzebne do wyświetlacza oraz enkodera.
#define CLK 2
#define DT 3
#include <Encoder.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
//Tworzymy obiekty
Adafruit_SSD1306 display(0);
Encoder myEnc(DT, CLK);
//W funkcji setup wklejamy wszystkie potrzebne ustawienia wyświetlacza
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C
display.clearDisplay();//czyścimy ekran
display.setTextSize(3);// ustawiamy rozmiar czcionki
display.setTextColor(WHITE);//ustawiamy kolor biały
}W funkcji loop pobieramy wartość z enkodera i zapisujemy ją do zmiennej wartość, oraz ustalamy limit od 0 do 100, zrobimy to za pomocą instrukcji warunkowych, jeżeli wartość jest mniejsza od zera, ustaw wartość na 0 w przeciwnym wypadku jeżeli jest większa od 100 ustaw pozycję na 100. Gdybyśmy nie zmienili wartości z enkodera wartości wychodziłyby poza nasz zakres.
void loop() {
long wartosc = myEnc.read();//odczytujemy wartość z enkodera
if(wartosc < 0) {//jeżeli wartość z enkodera jest mniejsza od 0 ustaw ją na 0
myEnc.write(0);//ustawiamy pozycję enkodera na 0
} else if (wartosc > 100) {//w przeciwnym wypadku jeżeli wartość jest większa od 100 ustaw ją na 100
myEnc.write(100);//ustawiamy pozycję enkodera na 100
}
//Ponownie wczytujemy wartości z enkodera
wartosc = myEnc.read();//wczytaj ponownie wartość enkodera w razie gdyby uległa ona zmianie przez instrukcje warunkowe
//Wyświetlamy pobraną wartość na wyświetlaczu
display.setCursor(42, 22);//ustawiamy kursor na pozycje 42, 22
display.println(wartosc);//piszemy tekst który ma się ukazać
display.display();//wyświetlamy na ekranie, bez tego nie zadziała
display.clearDisplay();
}Teraz po kręceniu w lewo i prawo enkoderem powinniśmy zauważyć rosnącą i malejącą wartość od 0 do 100 na naszym wyświetlaczu.
Przerobienie napisanego programu aby wyświetlał ON albo OFF w zależności od ustawienia enkodera
Przerobimy powyższy program który umożliwi nam wyświetlanie na ekranie ON i OFF, może się nam to przydać przy robieniu menu.
#define CLK 2
#define DT 3
#include <Encoder.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(0);
//W tym miejscu zamieniamy DT, CLK na CLK, 0
Encoder myEnc(CLK, 0);//zmieniamy ustawienia na CLK, 0 aby nasz enkoder zwracał 1 albo 0
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C
display.clearDisplay();//czyścimy ekran
display.setTextSize(3);//ustawiamy rozmiar czcionki
display.setTextColor(WHITE);//ustawiamy kolor biały
}
void loop() {
long wartosc = myEnc.read();//odczytujemy wartość z enkodera
//Zmieniamy instrukcję warunkową if, jeżeli 0 to wyświetl OFF, w przeciwnym wypadku jeżeli wartość równa 1 wyświetl ON
if(wartosc == 0) {//jeżeli wartość z enkodera jest równa 0 wyświetl OFF
display.setCursor(42, 22);
display.println(”OFF”);
display.display();
display.clearDisplay();
} else if (wartosc == 1) {//w przeciwnym wypadku jeżeli wartość jest równa 1 wyświetl ON
display.setCursor(52, 22);
display.println(”ON”);
display.display();
display.clearDisplay();
}
}To będzie na tyle z obsługi enkodera, mam nadzieję, że wyżej ukazane programy przydadzą się w waszych późniejszych projektach.







