#include <Servo.h> //servo library
#include <DallasTemperature.h> // for temp
#include <OneWire.h> // for temp (one digital wire)
#include <Adafruit_MPU6050.h> //accelerometer
#include <Adafruit_Sensor.h> //accelerometer
#include <Wire.h> //accelerometer
#include "SD.h" //file system
File root;
#define SPI_SPEED SD_SCK_MHZ(4)//SD card
#define CS_PIN 53//SD Card
#define PIN_TRIG 5
#define PIN_ECHO 4
int count = 0;
int mpu_6050[6] = {0,0,0,0,0,0};
//String formatted;
OneWire oneWire(3);
DallasTemperature temp_sensor(&oneWire);
Servo myServo;
Adafruit_MPU6050 mpu;
File textFile;
char buf[100];
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.");
Serial.println("Files in the card:");
root = SD.open("/");
printDirectory(root, 0);
Serial.println("");
// Example of reading file from the card:
textFile = SD.open("wokwi.txt");
if (textFile) {
Serial.print("wokwi.txt: ");
while (textFile.available()) {
Serial.write(textFile.read());
}
textFile.close();
} else {
Serial.println("error opening wokwi.txt!");
}
while (!mpu.begin()) {
Serial.println("MPU6050 not connected!");
delay(1000);
}
Serial.println("MPU6050 ready!");
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
temp_sensor.begin();
myServo.attach(2);
}
sensors_event_t event;
void loop() {
// count the number of transmissions
count++;
root = SD.open("/");
textFile = SD.open("wokwi.txt", FILE_WRITE);
//Write code to read data from all the sensors listed in [Devices].
//read temperature
temp_sensor.requestTemperatures();
float temp = temp_sensor.getTempCByIndex(0);
//Serial.print("temp is: " + String(temp) + "\r\n");
//Initialize the servo motor at 0 degrees.
myServo.write(0);
//read the distance from Ultrasonic sensor
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
int distance=(duration / 58);
//get accelerometer values
mpu.getAccelerometerSensor()->getEvent(&event);
mpu_6050[0] = event.acceleration.x;
mpu_6050[1] = event.acceleration.y;
mpu_6050[2] = event.acceleration.z;
mpu_6050[3] = event.gyro.x;
mpu_6050[4] = event.gyro.y;
mpu_6050[5] = event.gyro.z;
String formatted = String(count) + "_" + String(temp) + "_" + String(distance) + "_";
for(int x=0; x<6;x++){
//Serial.println(mpu_6050[x]);
formatted += String(mpu_6050[x]) + "_";
}
//Serial.println(formatted);
textFile.println(formatted);
textFile.flush();
textFile.close();
textFile = SD.open("wokwi.txt");
if (textFile) {
Serial.print("wokwi.txt: ");
while (textFile.available()) {
Serial.write(textFile.read());
}
textFile.close();
} else {
Serial.println("error opening wokwi.txt!");
}
//change servo angle according to temperature
while(count>99){
if(temp>= 35){
myServo.write(90);
}
else if(temp<35){
myServo.write(0);
}
}
delay(1000);
}
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}