#include <Wire.h>
#include <MPU6050.h>
#include <SD.h>
#include <SPI.h>
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int calib = 0;
uint8_t pinoSS = 10;
const uint8_t pinRelay = 2;
const uint8_t pinButton = 3;
int calibrar();
void setup() {
Wire.begin();
mpu.initialize();
Serial.begin(9600);
while (!Serial);
pinMode(pinoSS, OUTPUT);
pinMode(pinRelay, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
Serial.println("Pressione o botão para iniciar a calibragem.");
while (digitalRead(pinButton) == HIGH) {
delay(500);
}
Serial.println("Calibrando.");
calib = calibrar();
Serial.println("Calibrado!");
}
void loop() {
// mpu.getMotion6(&ax, &ay, &az);
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
Serial.print("Acelerometro: ");
Serial.println(ax);
// Serial.print(", ");
// Serial.print(ay);
// Serial.print(", ");
// Serial.print(az);
// Serial.print(" | Giroscopio: ");
// Serial.print(gx);
// Serial.print(", ");
// Serial.print(gy);
// Serial.print(", ");
// Serial.println(gz);
if (abs(ax-calib) > 16383) {
digitalWrite(pinRelay, HIGH);
} else {
digitalWrite(pinRelay, LOW);
}
delay(1000);
}
int calibrar() {
int cont = 1;
int soma = 0;
while (cont < 20) {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
soma += ax;
Serial.println(soma);
cont++;
}
return soma / cont;
}