#include <Wire.h>
#include "SD.h"
#include "SPI.h"
#include <RTClib.h>
RTC_DS3231 rtc;
//sleep
#define uS_TO_S_FACTOR 1000000ULL
#define TIME_TO_SLEEP 5 /* menit, detik */
//Sensor Jarak
const int trigPin = 13, echoPin = 12;
unsigned long nilaiarray[10], swap, durasi, jarak;
unsigned long rata;
int tanggal, bulan, tahun;
int jam, menit, detik;
//SD Card
File file;
String newFileName, fileName = "/File";
RTC_DATA_ATTR unsigned int fileNumber = 1;
void setup() {
Serial.begin(9600);
//Sensor Jarak
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
//SD Card
if (!SD.begin(5)) {
Serial.println("Gagal inisialisasi kartu SD");
return;
}
//Mulai Bangun
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
if (wakeup_reason == 0) {
while (SD.exists(fileName + String(fileNumber) + ".txt")) {
fileNumber++;
}
newFileName = fileName + String(fileNumber) + ".txt";
file = SD.open(newFileName, FILE_APPEND);
file.print("Tanggal, Ketinggian Air");
file.close();
Serial.println("File baru dibuat: " + newFileName);
}
const unsigned long mulai = millis();
waktu();
urutdata();
simpanData();
const unsigned long akhir = millis();
const unsigned long selisih = akhir - mulai;
double waktuproses = selisih / 1000;
Serial.println("Waktu Kerja : " + String(waktuproses) + " detik");
//Mulai Tidur
esp_sleep_enable_timer_wakeup((TIME_TO_SLEEP * uS_TO_S_FACTOR) - selisih);
Serial.println("Mulai Tidur Selama " + String(TIME_TO_SLEEP) + " Seconds");
Serial.flush();
esp_deep_sleep_start();
}
void loop() {
}
void kedalaman(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durasi = pulseIn(echoPin, HIGH);
jarak = durasi * 0.034 / 2;
}
void urutdata(){
for (int i = 0; i < 9; i++) {
kedalaman();
nilaiarray[i] = jarak;
}
for (int i = 0 ; i < 9 - 1; i++){
for (int j = 0 ; j < 9 - i - 1; j++){
if (nilaiarray[j] > nilaiarray[j+1]){
swap = nilaiarray[j];
nilaiarray[j] = nilaiarray[j+1];
nilaiarray[j+1] = swap;
}
}
}
rata = nilaiarray[5];
}
void simpanData(){
Serial.print(tanggal);
Serial.print('/');
Serial.print(bulan);
Serial.print('/');
Serial.print(tahun);
Serial.print(" ");
Serial.print(jam);
Serial.print(':');
Serial.print(menit);
Serial.print(':');
Serial.print(detik);
Serial.println();
Serial.println(", Jarak : " + String(rata));
newFileName = (fileName + String(fileNumber) + ".txt");
file = SD.open(newFileName, FILE_APPEND);
file.print(tanggal);
file.print('/');
file.print(bulan);
file.print('/');
file.print(tahun);
file.print(" ");
file.print(jam);
file.print(':');
file.print(menit);
file.print(':');
file.print(detik);
file.print(", ");
file.println(rata);
file.close();
}
void waktu(){
DateTime now = rtc.now();
tanggal = now.day();
bulan = now.month();
tahun = now.year();
jam = now.hour();
menit = now.minute();
detik = now.second();
}