#include <Wire.h>
#include <MPU6050.h>
#include <SD.h>
#include <SPI.h>
MPU6050 mpu;
File dataFile;
const int chipSelect = 4; // Pin CS untuk micro SD (ubah sesuai pin yang digunakan pada Arduino)
const int buttonPin = 7; // Pin tombol (ubah sesuai pin yang digunakan pada Arduino)
bool recording = false;
unsigned long lastMillis = 0;
const unsigned long recordInterval = 10; // Interval pencatatan 10 ms
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(115200);
// Inisialisasi MPU6050
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println(F("MPU6050 connection failed"));
while (true);
}
// Inisialisasi SD card
if (!SD.begin(chipSelect)) {
Serial.println(F("Card failed, or not present"));
while (true);
}
Serial.println(F("Ready"));
}
void loop() {
// Cek tombol untuk mulai/berhenti perekaman
if (digitalRead(buttonPin) == LOW) {
delay(200); // Debounce tombol
recording = !recording;
if (recording) {
startRecording();
} else {
stopRecording();
}
}
if (recording && (millis() - lastMillis >= recordInterval)) {
lastMillis = millis();
recordData();
}
}
void startRecording() {
// Membuat file baru dengan timestamp unik
String fileName = "DATA_" + String(millis()) + ".txt";
dataFile = SD.open(fileName, FILE_WRITE);
Serial.println(F("Recording started"));
}
void stopRecording() {
if (dataFile) {
dataFile.close();
}
Serial.println(F("Recording stopped"));
}
void recordData() {
int16_t ax, ay, az, gx, gy, gz;
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// Tampilkan data gyroscope di Serial Monitor
Serial.print("Gx: "); Serial.print(gx);
Serial.print(" Gy: "); Serial.print(gy);
Serial.print(" Gz: "); Serial.println(gz);
// Simpan data ke SD card
if (dataFile) {
dataFile.print(millis()); dataFile.print(",");
dataFile.print(gx); dataFile.print(",");
dataFile.print(gy); dataFile.print(",");
dataFile.println(gz);
}
}