// Basic demo for accelerometer readings from Adafruit MPU6050
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
const int buttonPin = 13; // Pino do botão (conectado ao GND)
const int ledPin = 2; // Pino do LED
int ledState = LOW; // Estado inicial do LED (apagado)
bool buttonPressed = false; // Flag para controle do pressionamento
Adafruit_MPU6050 mpu;
void setup(void) {
Serial.begin(115200);
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit MPU6050 test!");
//button parte
pinMode(buttonPin, INPUT_PULLUP); // Botão com resistor pull-up interno
pinMode(ledPin, OUTPUT); // LED como saída
digitalWrite(ledPin, ledState); // Garante estado inicial //
// Try to initialize!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
Serial.println("MPU6050 Found!");
calibrar();
while (1){
button();
while(ledState){
coleta();
button();
}
}
}
void calibrar(){
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
//set define o intervalo de medição do acelerômetro (8g).
Serial.print("Accelerometer range set to: ");
switch (mpu.getAccelerometerRange()) { //get obtém o intervalo configurado.
case MPU6050_RANGE_2_G:
Serial.println("+-2G");
// Imprime o alcance configurado no monitor serial.
break;
case MPU6050_RANGE_4_G:
Serial.println("+-4G");
break;
case MPU6050_RANGE_8_G:
Serial.println("+-8G");
break;
case MPU6050_RANGE_16_G:
Serial.println("+-16G");
break;
}
mpu.setGyroRange(MPU6050_RANGE_500_DEG);
Serial.print("Gyro range set to: ");
switch (mpu.getGyroRange()) {
case MPU6050_RANGE_250_DEG:
Serial.println("+- 250 deg/s");
break;
case MPU6050_RANGE_500_DEG:
Serial.println("+- 500 deg/s");
break;
case MPU6050_RANGE_1000_DEG:
Serial.println("+- 1000 deg/s");
break;
case MPU6050_RANGE_2000_DEG:
Serial.println("+- 2000 deg/s");
break;
}
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
//Define a largura de banda do filtro digital interno do sensor para reduzir ruídos.
Serial.print("Filter bandwidth set to: ");
switch (mpu.getFilterBandwidth()) {
case MPU6050_BAND_94_HZ:
Serial.println("94 Hz");
break;
case MPU6050_BAND_44_HZ:
Serial.println("44 Hz");
break;
case MPU6050_BAND_21_HZ:
Serial.println("21 Hz");
break;
case MPU6050_BAND_10_HZ:
Serial.println("10 Hz");
break;
case MPU6050_BAND_5_HZ:
Serial.println("5 Hz");
break;
}
Serial.println("");
delay(100);
}
void coleta(){
/* Get new sensor events with the readings */
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print("Acceleration X: ");
Serial.print(a.acceleration.x);
Serial.print(", Y: ");
Serial.print(a.acceleration.y);
Serial.print(", Z: ");
Serial.print(a.acceleration.z);
Serial.println(" m/s^2");
Serial.print("Rotation X: ");
Serial.print(g.gyro.x);
Serial.print(", Y: ");
Serial.print(g.gyro.y);
Serial.print(", Z: ");
Serial.print(g.gyro.z);
Serial.println(" rad/s");
Serial.print("Temperature: ");
Serial.print(temp.temperature);
Serial.println(" degC");
Serial.println("");
delay(500);
}
void button (){
// Lê o estado atual do botão
int buttonState = digitalRead(buttonPin);
// Se o botão foi pressionado (LOW porque é PULLUP)
if (buttonState == LOW) {
// Aguarda um pequeno tempo para debounce
delay(50);
// Só muda o estado se não foi um pressionamento anterior
if (buttonPressed == false) {
ledState = !ledState; // Inverte o LED
digitalWrite(ledPin, ledState); // Atualiza o LED
buttonPressed = true; // Marca como pressionado //
// Debug no monitor serial
Serial.print("Estado do LED: ");
Serial.println(ledState == HIGH ? "LIGADO" : "DESLIGADO");
}
} else {
// Quando soltar o botão, reseta o controle
buttonPressed = false;
}
}
void loop() {
//nada ;-;
}