#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Definisi pin rotary encoder
#define ENCODER_CLK 2
#define ENCODER_DT 3
#define ENCODER_SW 4
// Variabel untuk menyimpan nilai parameter sound system
int volume = 0; // Nilai volume (0 - 100)
int bass = 0; // Nilai bass (0 - 100)
int treble = 0; // Nilai treble (0 - 100)
int currentParameter = 0; // 0 = Volume, 1 = Bass, 2 = Treble
void setup() {
// Inisialisasi OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Sound System Control");
display.display();
// Inisialisasi pin rotary encoder
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
// Interrupt untuk rotasi rotary encoder
attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}
void loop() {
// Tampilkan nilai parameter sound system pada OLED
displayParameters();
// Cek apakah tombol pada rotary encoder ditekan untuk pindah parameter
if (digitalRead(ENCODER_SW) == LOW) {
delay(200); // Debouncing tombol
currentParameter++;
if (currentParameter > 2) {
currentParameter = 0;
}
}
}
// Fungsi untuk membaca putaran rotary encoder
void readEncoder() {
int dtValue = digitalRead(ENCODER_DT);
// Perubahan nilai tergantung parameter yang aktif
if (dtValue == HIGH) {
if (currentParameter == 0 && volume < 100) {
volume++;
} else if (currentParameter == 1 && bass < 100) {
bass++;
} else if (currentParameter == 2 && treble < 100) {
treble++;
}
} else {
if (currentParameter == 0 && volume > 0) {
volume--;
} else if (currentParameter == 1 && bass > 0) {
bass--;
} else if (currentParameter == 2 && treble > 0) {
treble--;
}
}
}
// Fungsi untuk menampilkan parameter sound system pada OLED
void displayParameters() {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Sound System Control");
// Tampilkan parameter Volume
display.setCursor(0, 20);
display.print("Volume: ");
display.print(volume);
if (currentParameter == 0) {
display.print(" <-");
}
// Tampilkan parameter Bass
display.setCursor(0, 30);
display.print("Bass: ");
display.print(bass);
if (currentParameter == 1) {
display.print(" <-");
}
// Tampilkan parameter Treble
display.setCursor(0, 40);
display.print("Treble: ");
display.print(treble);
if (currentParameter == 2) {
display.print(" <-");
}
display.display();
}