#include <ezButton.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int stepAngleButton = 4;
Servo myServo; // Servo object
int servoPin = 10; // Pin servo terhubung
int servoPosition = 0;
ezButton button(stepAngleButton);
// Gambar kucing
const unsigned char cat_bitmap1 [] PROGMEM = {
};
// Gambar kucing kedua
const unsigned char cat_bitmap2 [] PROGMEM = {
};
const unsigned char cat_bitmap3 [] PROGMEM = {
};
const unsigned char cat_bitmap4 [] PROGMEM = {
};
const unsigned char cat_bitmap5 [] PROGMEM = {
};
const unsigned char cat_bitmap6 [] PROGMEM = {
};
const unsigned char cat_bitmap7 [] PROGMEM = {
};
const unsigned char cat_bitmap8 [] PROGMEM = {
};
void setup() {
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
pinMode(stepAngleButton, INPUT_PULLUP);
button.setDebounceTime(50);
myServo.attach(servoPin); // Hubungkan servo ke pin
myServo.write(0); // Servo mulai dari posisi 0 derajat
// Tampilkan gambar kucing pertama di awal
display.clearDisplay();
display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap1, 128, 64, SSD1306_WHITE);
display.display();
}
void loop() {
button.loop();
if (button.isPressed()) {
// Gerakkan servo dari 0° ke 180°
for (servoPosition = 0; servoPosition <= 180; servoPosition += 10) {
myServo.write(servoPosition);
delay(1);
// Tampilkan gambar kucing dari cat_bitmap1 hingga cat_bitmap8
int bitmapIndex = (servoPosition / 30) + 1; // Pilih bitmap berdasarkan posisi servo
display.clearDisplay();
switch (bitmapIndex) {
case 1: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap1, 128, 64, SSD1306_WHITE); break;
case 2: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap2, 128, 64, SSD1306_WHITE); break;
case 3: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap3, 128, 64, SSD1306_WHITE); break;
case 4: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap4, 128, 64, SSD1306_WHITE); break;
case 5: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap5, 128, 64, SSD1306_WHITE); break;
case 6: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap6, 128, 64, SSD1306_WHITE); break;
case 7: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap7, 128, 64, SSD1306_WHITE); break;
case 8: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap8, 128, 64, SSD1306_WHITE); break;
}
display.display();
}
delay(1); // Beri jeda sebelum kembali ke posisi awal
// Gerakkan servo kembali dari 180° ke 0°
for (servoPosition = 180; servoPosition >= 0; servoPosition -= 10) {
myServo.write(servoPosition);
delay(1);
// Tampilkan gambar kucing dari cat_bitmap8 hingga cat_bitmap1
int bitmapIndex = (servoPosition / 30) + 1;
display.clearDisplay();
switch (bitmapIndex) {
case 1: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap1, 128, 64, SSD1306_WHITE); break;
case 2: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap2, 128, 64, SSD1306_WHITE); break;
case 3: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap3, 128, 64, SSD1306_WHITE); break;
case 4: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap4, 128, 64, SSD1306_WHITE); break;
case 5: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap5, 128, 64, SSD1306_WHITE); break;
case 6: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap6, 128, 64, SSD1306_WHITE); break;
case 7: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap7, 128, 64, SSD1306_WHITE); break;
case 8: display.drawBitmap((SCREEN_WIDTH - 128) / 2, (SCREEN_HEIGHT - 64) / 2, cat_bitmap8, 128, 64, SSD1306_WHITE); break;
}
display.display();
}
}
}