#include <Servo.h>
#include <SD.h>
#define pin_cs 10
#define potPin A0
#define buzzerPin 5 // Pin buzzer
File fileku, root;
Servo servoUnda;
void setup() {
Serial.begin(115200);
//Memeriksa apakah kartu SD terhubung
if (!SD.begin(pin_cs)) {
Serial.println("Mungkin ada masalah dengan memory card");
while (1);
}
// Membuat file dan mengecek isi kartu SD
buat_file();
cekIsiCard();
// Setup Servo
pinMode(potPin, INPUT);
servoUnda.attach(11);
// Setup Buzzer
pinMode(buzzerPin, OUTPUT);
noTone(buzzerPin);
}
void loop() {
// Membaca nilai dari pin Analog A0
int nilaiPot = analogRead(potPin);
// Menyimpan nilai Pot kedalam file
isiFile(nilaiPot);
// Baca isi file dan tampilkan di Serial Monitor
bacaFile();
// Menggerakkan servo sesuai dengan nilai potensio
int sudutServo = map(nilaiPot, 0, 1023, 0, 180);
servoUnda.write(sudutServo);
Serial.println(String(nilaiPot) + " --> " + String(sudutServo));
// Mengendalikan buzzer berdasarkan sudut servo
if (sudutServo == 0 || sudutServo == 90 || sudutServo == 180) {
tone(buzzerPin, 1000); // Bunyikan buzzer
delay(500); // Tahan bunyi selama 500ms
noTone(buzzerPin); // Matikan buzzer
}
// Delay selama 1 detik
delay(1000);
}
void isiFile(int nilaipot) {
// Membuka file "test.txt" untuk ditulis
fileku = SD.open("test.txt", FILE_WRITE);
if (fileku) {
// Menuliskan nilaiPot, sudut Servo, dan status buzzer kedalam file
fileku.print(nilaipot);
fileku.print(", ");
fileku.print(servoUnda.read());
fileku.print(", ");
if (servoUnda.read() == 0 || servoUnda.read() == 90 || servoUnda.read() == 180) {
fileku.println("ON");
} else {
fileku.println("OFF");
}
fileku.close();
} else {
// Jika gagal membuka file, tampilkan pesan kesalahan
Serial.println("Gagal mengisi file");
while (1);
}
}
void bacaFile() {
// Membuka file "test.txt" untuk dibaca
fileku = SD.open("test.txt");
if (fileku) {
// Membaca dan menampilkan isi file ke serial monitor
while (fileku.available()) {
Serial.write(fileku.read());
}
fileku.close();
} else {
// Jika gagal membaca file, tampilkan pesan kesalahan
Serial.println("Gagal membaca file");
while (1);
}
}
void cekIsiCard() {
// Membuka direktori root (akar) kartu SD
root = SD.open("/");
while (true) {
// Membaca file dan ukuran file dalam kartu SD
File cekfile = root.openNextFile();
if (!cekfile) {
break;
}
// Menampilkan nama file dan ukuran file ke Serial Monitor
Serial.print(cekfile.name());
Serial.println(" ");
Serial.println(cekfile.size());
cekfile.close();
}
}
void buat_file() {
// Membuka file "test.txt" untuk ditulis
fileku = SD.open("test.txt", FILE_WRITE);
if (fileku) {
// Menulis header file log
fileku.println("Potensiometer, Servo Sudut, Buzzer Status");
fileku.close();
} else {
// Jika gagal membuka file, tampilkan pesan kesalahan
Serial.println("Gagal membuat file");
while (1);
}
}