#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Definisikan lebar layar OLED
#define SCREEN_HEIGHT 64 // Definisikan tinggi layar OLED
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int potPin = A0; // Pin analog untuk potensiometer
const int buzzerPin = 8; // Pin digital untuk buzzer
const int greenLedPin = 10; // Pin digital untuk LED hijau
const int redLedPin = 11; // Pin digital untuk LED merah
const int numReadings = 10; // Jumlah pembacaan untuk averaging
int readings[numReadings]; // Array untuk menyimpan pembacaan
int index = 0; // Indeks pembacaan saat ini
int total = 0; // Total pembacaan
int safeAngle = 3; // Sudut aman
void setup() {
// Inisialisasi display OLED dengan alamat I2C 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display(); // Tampilkan splash screen (default: logo BORNEO)
delay(2000); // Tunda 2 detik
// Bersihkan display
display.clearDisplay();
display.display();
// Inisialisasi pembacaan potensiometer
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
readings[thisReading] = 0;
}
// Inisialisasi pin buzzer
pinMode(buzzerPin, OUTPUT);
// Inisialisasi pin LED hijau dan merah
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
}
void loop() {
total = total - readings[index]; // Kurangi nilai pembacaan yang akan di-overwrite
readings[index] = analogRead(potPin); // Baca nilai potensiometer
total = total + readings[index]; // Tambahkan nilai baru ke total
index = (index + 1) % numReadings; // Pindah ke indeks berikutnya, dengan pembulatan jika mencapai batas
int average = total / numReadings; // Hitung rata-rata pembacaan
int angle = map(average, 0, 1023, 0, 90); // Konversi nilai potensiometer ke sudut
// Tampilkan informasi sudut pada OLED
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(" IT_PLANT_PRO ");
display.setCursor(0, 10);
display.print(" SENSOR KEMIRINGAN ");
display.setCursor(0, 29);
display.print("Sudut: ");
display.print(angle);
display.print(" Derajat");
// Peringatkan jika sudut melewati batas aman
if (angle > safeAngle) {
display.setCursor(0, 38);
display.print("Status:Over ");
display.print(safeAngle);
display.print("Derajat");
// Tampilkan tulisan di bawah peringatan
display.setCursor(3, 48);
display.print("Terlalu Miring OM!");
// Bunyikan buzzer
tone(buzzerPin, 1000); // Bunyikan buzzer dengan frekuensi 1000 Hz
// Nyalakan LED merah dan matikan LED hijau
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
} else {
noTone(buzzerPin); // Matikan bunyi jika sudut kembali aman
// Nyalakan LED hijau dan matikan LED merah
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
// Tampilkan status aman
display.setCursor(0, 20);
display.print("Status: Aman");
}
display.display(); // Tampilkan tampilan yang telah diperbarui
delay(100); // Delay untuk stabilitas tampilan
}
Integrasi controller
data (J1939,J1850,FMS)
GNSS,DAS,ADAS
SERVER: 147.93.111.160