//=====================
//KY-040 Rotary Encoder
//=====================
#include <Wire.h>
#include <Adafruit_SSD1306.h>
//-----------------------------------------------
//Adafruit_SSD1306 display(128, 64, &Wire, 4);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
//-----------------------------------------------
#define CLK 2
#define DT 3
#define SW 4
//-----------------------------------------------
int counter = 0; int currentCLK; int previousCLK;
String encdir ="";
//=========================================================
void setup()
{
pinMode(CLK,INPUT); pinMode(DT,INPUT); pinMode(SW,INPUT);
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
analogReference(INTERNAL);
previousCLK = digitalRead(CLK);
}
//=========================================================
void loop()
{
if(digitalRead(SW) == LOW)
{
reset_OLED();
counter = 0;
}
currentCLK = digitalRead(CLK);
if(currentCLK != previousCLK)
{
if(digitalRead(DT) != currentCLK)
{
counter++;
encdir = "clockwise";
}
else
{
counter--;
encdir = "counterclk";
}
disp_OLED();
}
previousCLK = currentCLK;
}
//=========================================================
void disp_OLED()
{
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0,0);
display.println(encdir); display.print("----------");
display.setTextSize(4);
display.setCursor(35,30);
display.print(counter);
display.display();
}
//=========================================================
void reset_OLED()
{
display.setTextColor(WHITE);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(32,0);
display.print("count");
display.setTextSize(4);
display.setCursor(5,20);
display.print("RESET");
display.display();
}Loading
ssd1306
ssd1306