#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_MPU6050.h>
#include <Servo.h>
Servo arm;
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
// Initialize the ADXL345 sensor
Adafruit_MPU6050 mpu;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
arm.attach(D12);
arm.write(0);
// Initialize the I2C OLED display
display.begin(SSD1306_SWITCHCAPVCC, 0x3c);
// Clear the display
display.clearDisplay();
display.display();
// Initialize the ADXL345 sensor
if(!mpu.begin()) {
Serial.println("MPU6050 not found");
while(1);
}
}
void loop() {
// Read the acceleration data from the ADXL345 sensor
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// Calculate the direction of the sensor movement
int x = a.acceleration.x;
int y = a.acceleration.y;
int z = a.acceleration.z;
if (abs(x) > abs(y) && abs(x) > abs(z)) {
if (x > 0) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,10);
display.println("UP");
display.display();
arm.write(180);
} else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,10);
display.println("DOWN");
display.display();
arm.write(0);
}
} else if (abs(y) > abs(x) && abs(y) > abs(z)) {
if (y > 0) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,10);
display.println("LEFT");
display.display();
arm.write(45);
} else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,10);
display.println("RIGHT");
display.display();
arm.write(135);
}
} else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,10);
display.println("MIDDLE");
display.display();
arm.write(90);
}
// Print the sensor data to the serial monitor
Serial.print("X: ");
Serial.print(x);
Serial.print(" Y: ");
Serial.print(y);
Serial.print(" Z: ");
Serial.println(z);
delay(100);
}