#include <Servo.h>
#include <SD.h>
#define pin_cs 4 // Digital Input SD Card
Servo servoKu;
File Fileku, root;
int potPin = A0; // Analof input potensio
int buzzerPin = 5; //Pin buzzer
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);
}
buat_file(); // Membuat file dan cek isi kartu SD
cekIsiCard();
pinMode (potPin, INPUT); // Set Servo
servoKu.attach(10);
pinMode(buzzerPin, OUTPUT); // Set Buzzer
noTone(buzzerPin);
}
void loop() {
int adc = analogRead(potPin); // Membaca nilai dari pin analog A0
isiFile(adc);// Menyimpan nilai ADC ke dalam file
bacaFile();// Baca isi file dan tampilkan di Serial Monitor
int sudutServo = map(adc, 0, 1023, 0, 180); // Menggerakkan servo sesuai dengan nilai potensio
servoKu.write(sudutServo);
Serial.println(String(adc) + " --> " + String(sudutServo));
if (sudutServo == 0 || sudutServo == 91 || sudutServo == 180) // Mengendalikan buzzer berdasarkan sudut servo
{
tone(buzzerPin, 900); // Bunyikan buzzer
delay(500); // Tahan bunyi selama 500ms
noTone(buzzerPin); // Matikan buzzer
}
delay(1000); // Delay selama 1 detik
}
void isiFile(int nilaiadc) {
Fileku = SD.open("test.txt", FILE_WRITE); // Membuka file "test.txt" untuk ditulis
if (Fileku) {
Fileku.print(nilaiadc); // Menuliskan nilai ADC, sudut servo, dan status buzzer ke dalam file
Fileku.print(", ");
Fileku.print(servoKu.read());
Fileku.print(", ");
if (servoKu.read() == 0 || servoKu.read() == 91 || servoKu.read() == 180) {
Fileku.println("ON");
} else {
Fileku.println("OFF");
}
Fileku.close();
} else {
Serial.println("Gagal mengisi file"); // Jika gagal membuka file, tampilkan pesan
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() {
root = SD.open("/"); // Membuka direktori root (akar) kartu SD
while (true) {
File cekfile = root.openNextFile(); // Membaca file dan ukuran file dalam kartu SD
if (!cekfile) {
break;
}
Serial.print(cekfile.name()); // Menampilkan nama file dan ukuran file ke Serial Monitor
Serial.print(" ");
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);
}
}