#include <WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <NewPing.h>
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST"; // SSID Wokwi
const char* password = ""; // Password Wokwi
// Konfigurasi NTP
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600, 60000);
// Konfigurasi OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Konfigurasi sensor ultrasonik
#define TRIGGER_PIN 5 // Pin untuk trigger
#define ECHO_PIN 4 // Pin untuk echo
#define MAX_DISTANCE 200 // Maksimal jarak dalam cm
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
// Variabel untuk menghitung rakaat
int rakaat = 0;
long duration;
int distance;
void setup() {
// Memulai serial komunikasi
Serial.begin(115200);
// Memulai WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi...");
}
Serial.println("Terhubung ke WiFi");
// Memulai NTP
timeClient.begin();
timeClient.update();
// Memulai OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Gagal menginisialisasi OLED"));
for(;;);
}
display.clearDisplay();
display.display();
}
void loop() {
// Memperbarui waktu dari NTP
timeClient.update();
// Membaca jarak dari sensor ultrasonik
duration = sonar.ping();
distance = duration / US_ROUNDTRIP_CM;
// Logika untuk menghitung rakaat
if (distance < 50) { // Jika jarak lebih kecil dari 50 cm (bisa disesuaikan)
rakaat++;
delay(1000); // Delay untuk menghindari penghitung ganda
}
// Menampilkan waktu dan jumlah rakaat di OLED
display.clearDisplay();
// Menampilkan waktu
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Waktu: ");
display.println(timeClient.getFormattedTime());
// Menampilkan jumlah rakaat
display.setCursor(0, 20);
display.print("Jumlah Rakaat: ");
display.println(rakaat);
display.display();
delay(1000); // Delay 1 detik
}