/*
* Kita coba masukkan libary yg diperlukan
* contohnya seperti OLED, dan Servo
* Wire, GFX, dan SSD1306 merupakan kesatuan
* yang digunakan sebagai kontroler OLED
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP32Servo.h>
#include <WebServer.h>
#define SCREEN_WIDTH 128 // total lebar pixel di layar oled
#define SCREEN_HEIGHT 64 // total tinggi pixel di layar oled
#define SCREEN_ADDRESS 0x3C // alamat i2c dari OLED
/*
* Pin fisik yang kita gunakan untuk servo dan sensor jarak hcsr04
*/
#define HCSR04_TRIGGER 27
#define HCSR04_ECHO 26
#define SERVO_OUTPUT 15
Servo servo; // kita create "object" namanya servo
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // kita create "object" namanya oled
void init_sensor_distance (uint8_t pin_trig, uint8_t pin_echo); // function untuk inisialisasi sensor hcsr04
float read_sensor_distance (uint8_t pin_trig, uint8_t pin_echo); // function untuk baca sensor hcsr04
void oled_write_text (String text, uint8_t x, uint8_t y, uint8_t text_size); // function untuk menulis text di oled
void setup() {
Serial.begin(115200);
servo.attach(SERVO_OUTPUT);
init_sensor_distance(HCSR04_TRIGGER, HCSR04_ECHO);
if (!oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println("[ERROR] Oled tidak dapat dimulai");
while(1);
}
oled.display();
delay(2000); // perlu jeda 2 detik sebelum mulai
oled.clearDisplay();
oled_write_text("Auto. Cat Feeder", 10, 0, 1);
}
void loop() {
}
void init_sensor_distance (uint8_t pin_trig, uint8_t pin_echo) {
pinMode(pin_trig, OUTPUT);
pinMode(pin_echo, INPUT);
}
float read_sensor_distance (uint8_t pin_trig, uint8_t pin_echo) {
digitalWrite(pin_trig, LOW);
delayMicroseconds(2);
digitalWrite(pin_trig, HIGH);
delayMicroseconds(10);
digitalWrite(pin_trig, LOW);
uint16_t duration = pulseIn(pin_echo, HIGH);
float dist_cm = ((float)duration * 0.034) / 2;
return dist_cm;
}
void oled_write_text (String text, uint8_t x, uint8_t y, uint8_t text_size) {
oled.setTextSize(text_size);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(x, y);
oled.println(text);
oled.display();
}