Rotary encoder KY-040 adalah komponen elektronik yang banyak digunakan untuk membaca posisi rotasi atau perubahan sudut, seperti pada tombol volume di perangkat elektronik. Pada tutorial ini, kita akan membahas cara menggunakan rotary encoder KY-040 dengan ESP32 untuk mendeteksi pergerakan dan perubahan nilai rotasi.
Komponen yang Dibutuhkan
- Software Arduino IDE.
- ESP32.
- Rotary Encoder KY-040.
- Breadboard.
- Kabel jumper.
- Kabel USB untuk menghubungkan ESP32 ke komputer.
Rangkaian
- Hubungkan rotary encoder KY-040 ke ESP32 dengan konfigurasi berikut:
- Pin + (VCC) pada KY-040 ke 3.3V ESP32.
- Pin CLK (Clock) pada KY-040 ke A0 (GPIO ESP32).
- Pin DT (Data) pada KY-040 ke A1 (GPIO ESP32).
- Pin GND pada KY-040 ke GND ESP32.

#include <Arduino.h>
#include <Wire.h>
#include <SparkFun_APDS9960.h>
#define APDS9960_INT 15
SparkFun_APDS9960 apds = SparkFun_APDS9960();
volatile int isr_flag = 0;
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
break;
case DIR_RIGHT:
Serial.println("RIGHT");
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
void setup()
{
Serial.begin(9600);
pinMode(APDS9960_INT, INPUT);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop(){
if( isr_flag == 1 ) {
detachInterrupt(APDS9960_INT);
handleGesture();
isr_flag = 0;
attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING);
}
}
Selamat Mencoba!!
Semoga Berhasil!!
Kalau teman-teman berminat menggnakan jasa kami bisa wa kami di kontak whatsapp dibawah ini atau bisa cek tiktok kami disini : @labrobotika

