//21100011074 Aykut ÖRS
//OLED ekran icin gerekli kutuphaneler
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//MPU6050 sensoru icin kutuphaneler
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
//OLED ekran icin tanimlamalar
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//MPU6050 sensoru icin tanimlamalar
Adafruit_MPU6050 mpu;
//SD Card kütüphanesi ve tanimlamalar
#include "SdFat.h"
#define SPI_SPEED SD_SCK_MHZ(4)
#define CS_PIN 53
SdFat sd;
//servo motor kütüphanesi ve tanimlamalar
#include <Servo.h>
Servo servoMotor1;
int servoMin1 = 0;
int servoMax1 = 180;
Servo servoMotor2;
int servoMin2 = 0;
int servoMax2 = 180;
void setup() {
Serial.begin(9600);
//OLED baslamazsa durumun yazdirilmasi
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
//MPU6050 sensorunun baslamamasi durumunda, baslayana kadar uyari yazdirilmasi
while (!mpu.begin()) {
OLEDEkranaYazdir("MPU6050 not connected!");
delay(1000);
}
//MPU6050 sensorunun bağlanma bilgisinin yazdirilmasi
OLEDEkranaYazdir("MPU6050 ready!");
//SD card ayarlari
if (!sd.begin(CS_PIN, SPI_SPEED)) {
if (sd.card()->errorCode()) {
Serial.println("SD initialization failed.");
} else if (sd.vol()->fatType() == 0) {
Serial.println("Can't find a valid FAT16/FAT32 partition.");
} else {
Serial.println("Can't determine error type");
}
return;
}
//servo motor ayarlamalari
servoMotor1.attach(8);
servoMotor2.attach(9);
}
void loop() {
//MPU6050 icin event tanimliyoruz
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
//servo motorların Gyroscope'un x ve y degerine gore hareket etmesi
int servoPos1 = map(g.gyro.x, -4.3, +4.3, servoMin1, servoMax1);
servoMotor1.write(servoPos1);
int servoPos2 = map(g.gyro.y, -4.3, +4.3, servoMin2, servoMax2);
servoMotor2.write(servoPos2);
// MPU6050 sensorunun ölçümlerinin yazdırılması
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("Accelerometer - m/s^2");
display.print(a.acceleration.x);
display.print(", ");
display.print(a.acceleration.y);
display.print(", ");
display.println(a.acceleration.z);
display.println("");
display.println("Gyroscope - rps");
display.print(g.gyro.x);
display.print(", ");
display.print(g.gyro.y);
display.print(", ");
display.println(g.gyro.z);
display.println("");
display.println("Temperature");
display.print(temp.temperature);
display.println(" degC");
display.display();
delay(500);
//SD Card İŞLEMLERİ
// SD card da yer alan "mpu6050.txt" dosyasının yazma icin acilmasi
File dataFile = sd.open("mpu6050.txt", FILE_WRITE);
if (dataFile) {
// Bilgilerin dosyaya yazilmasi
dataFile.println("Accelerometer - m/s^2");
dataFile.print(a.acceleration.x);
dataFile.print(", ");
dataFile.print(a.acceleration.y);
dataFile.print(", ");
dataFile.println(a.acceleration.z);
dataFile.println("Gyroscope - rps");
dataFile.print(g.gyro.x);
dataFile.print(", ");
dataFile.print(g.gyro.y);
dataFile.print(", ");
dataFile.println(g.gyro.z);
dataFile.println("Temperature");
dataFile.print(temp.temperature);
dataFile.println(" degC");
//dosyanin kapatilmasi
dataFile.close();
}
else {
Serial.println("Dosyanin acilma hatasi.");
}
// Tekrar yazmadan önce 1 saniye bekleme
delay(1000);
// SD card da yer alan "mpu6050.txt" dosyasının okuma icin acilmasi
File dataFile2 = sd.open("mpu6050.txt", FILE_READ);
Serial.println("");
Serial.println("SD karta yazılan ölçümler:");
Serial.println("");
if (dataFile2) {
// Dosyadan bilgilerin okunmasi
while (dataFile2.available()) {
Serial.write(dataFile2.read());
}
// dosyanin kapatilmasi
dataFile2.close();
}
else {
Serial.println("Dosyanin acilma hatasi.");
}
}
//OLED ekrana basit mesaj yazdiran fonksiyon
void OLEDEkranaYazdir(String mesaj){
//OLED'de ekrana yazdirma
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(mesaj);
display.display();
}