#include <SPI.h> //deklarasi library SPI utk komunikasi modul SD-card
#include <SD.h> //deklarasi library SD
File myFile; //deklarasi variabel myFile sebagai tipe File
File root; //deklarasi variabel root sebagai tipe File
//======================================================================
String extension = ".txt"; //deklarasi variabel extension utk nama file
String fileName; //variabel nama file utk membuat file
String dataSerial; //variabel utk menampung data serial dari komputer
#define Buz 6 //deklarasi pin 6 terkonek ke Buz
int menuChoice; //deklarasi variabel pemilihan menu
//======================================================================
void setup() {
Serial.begin(9600);
while (!Serial) { /*menunggu hingga Serial port terhubung*/ }
Serial.print("Initializing SD card...");
if (!SD.begin(4)) { //inisialisasi library SD dg Chip Select (CS)=4
Serial.println("initialization failed!"); //jika SD.begin(4)=0 maka
while (1); //berhenti
}
Serial.println("initialization done.");
}
//----------------------------------------------------------------------
void loop() { menuSet(); }
//----------------------------------------------------------------------
void petunjuk() {
tone(Buz, 400); Serial.println();
Serial.println(F("!---------------------------------------------------!"));
Serial.println(F("! MENU MEMBUAT, MENULIS, MEMBACA & MENGHAPUS FILE !"));
Serial.println(F("!---------------------------------------------------!"));
Serial.println(F("! Ketik hanya angka desimal untuk pilih Menu !"));
Serial.println(F("!---------------------------------------------------!"));
Serial.println(F("! Pilih 1 untuk membuat File !"));
Serial.println(F("! Pilih 2 untuk membuat & menulis ke dalam File !"));
Serial.println(F("! Pilih 3 untuk membaca isi File !"));
Serial.println(F("! Pilih 4 untuk menghapus File !"));
Serial.println(F("! Pilih 5 untuk menampilkan isi SD-card !"));
Serial.println(F("!---------------------------------------------------!"));
noTone(Buz); }
//----------------------------------------------------------------------
void bacaNamaFile() {
while(Serial.available() == 0 ) {} //tunggu hingga ada data serial masuk
dataSerial = Serial.readString();//membaca teks yang ditulis dari Serial
dataSerial.concat(extension); //menggabung dengan 'TXT'
fileName = dataSerial;
}
void bacaDataFile() {
while(Serial.available() == 0 ) {} //tunggu hingga ada data serial masuk
dataSerial = Serial.readString();//membaca teks yang ditulis dari Serial
}
//----------------------------------------------------------------------
void menuSet() {
petunjuk(); //panggil fungsi petunjuk
tone(Buz, 400); delay(100); noTone(Buz);
while(Serial.available() == 0) {} // menunggu data serial masuk
menuChoice = Serial.read() - 48; // baca data byte serial, koreksi dg -48
switch (menuChoice) {
case 1:
Serial.println(F("MEMBUAT FILE TEXT"));
Serial.print(F("Ketik nama file : "));
Serial.end(); //matikan Serial komunikasi
Serial.begin(9600); //aktifkan kembali Serial komunikasi
bacaNamaFile(); //panggil fungsi buatan 'bacaNamaFile'
Serial.println(fileName); //tampilkan nama file pd Serial Monitor
if (SD.exists(fileName)) //cek nama file di SD-card
Serial.print(" sudah ada");//jika sudah ada, lompat ke baris 73
else {
myFile = SD.open(fileName, FILE_WRITE); //jika belum, buat file & open
myFile.close(); //close file
Serial.print(("File " + fileName + " Sukses dibuat"));
}
break; //keluar dari blok 'switch'
//----------------------------------------------------------------------
case 2:
Serial.println(F("MEMBUAT & MENULIS DATA KE DALAM FILE"));
Serial.print(F("Ketik Nama file : "));
Serial.end(); //matikan Serial komunikasi
Serial.begin(9600); //aktifkan kembali Serial komunikasi
bacaNamaFile(); //panggil fungsi buatan 'bacaNamaFile'
myFile = SD.open(fileName, FILE_WRITE); //buat file dan open
Serial.println(fileName);
Serial.print(F("Ketik data untuk disimpan : "));
bacaDataFile();
Serial.println(dataSerial);
myFile.println(dataSerial);//tulis dataSerial ke dlm SD-card
myFile.close(); //tutup file
Serial.println("Selesai menulis...");
break; //keluar dari blok 'switch'
//----------------------------------------------------------------------
case 3:
Serial.println(F("MEMBACA DATA DARI FILE"));
Serial.print(F("Ketik Nama file : "));
Serial.end(); //matikan Serial komunikasi
Serial.begin(9600); //aktifkan kembali Serial komunikasi
bacaNamaFile(); //panggil fungsi buatan 'bacaNamaFile'
Serial.println(fileName);
myFile = SD.open(fileName); //buka file
if (myFile) { //cek jika file ada & bisa dibuka
while (myFile.available()) { //tunggu hingga ada data serial masuk
//membaca data dari SD-card dan tulis ke Serial Monitor
Serial.print(char(myFile.read()));
}
myFile.close(); //close myFile
} else { Serial.println("error membuka file"); }
break; //keluar dari blok 'switch'
//----------------------------------------------------------------------
case 4:
Serial.println(F("MENGHAPUS FILE TEXT"));
Serial.print(F("Ketik Nama file : "));
Serial.end(); //matikan Serial komunikasi
Serial.begin(9600); //aktifkan kembali Serial komunikasi
bacaNamaFile(); //panggil fungsi buatan 'bacaNamaFile'
Serial.println(fileName);
Serial.print("File "); Serial.print(fileName); Serial.print(" ");
if (SD.exists(fileName)) { //cek jika apakah file sudah ada
Serial.println("exists.");
SD.remove(fileName); //delete the file if existed
myFile.close();
Serial.print("File "); Serial.print(fileName);
Serial.print(" sudah dihapus");
} else { Serial.println("doesn't exist."); } //jika file tidak ada, tulis "dosen't exist"
break; //keluar dari blok 'switch'
//----------------------------------------------------------------------
case 5:
Serial.println(F("Menampilkan isi SD-card"));
Serial.end(); //matikan Serial komunikasi
Serial.begin(9600); //aktifkan kembali Serial komunikasi
Serial.println("\nFile yang ditemukan pada kartu (nama dan ukuran dalam bytes): ");
root = SD.open("/"); //panggil fungsi open dengan parameter '/'
printDirectory(root, 0); //panggil fungsi baru 'printDirectory'
break; //keluar dari blok 'switch'
}
} //akhir dari blok 'switch'
//----------------------------------------------------------------------
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile(); //fungsi root.openNextFile()
if (! entry) { // jika tidak ada file lain
break; //keluar dari blok 'switch'
}
Serial.print(entry.name()); //cetak nama file
if (entry.isDirectory()) { //apakah direktori ?
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else { //jika bukan nama direktori maka ukuran file
Serial.print("\t\t"); //file memiliki ukuran, direktori tidak
Serial.println(entry.size(), DEC); //tulis ukuran file dalam desimal
}
entry.close(); //close entry
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5