#include <Wire.h>
#include <MPU6050.h>
MPU6050 mpu;
const int ledPins[] = {3, 5, 6, 9}; // Pinos para os LEDs
const int buttonPins[] = {2, 4, 7, 8, 10, 11}; // Pinos dos botões
int ledBrightness[] = {0, 0, 0, 0}; // Brilho inicial dos LEDs
const int brightnessStep = 5; // Passo de ajuste de brilho
const int maxBrightness = 255; // Brilho máximo
const int minBrightness = 0; // Brilho mínimo
void setup() {
Serial.begin(9600);
// Inicializa os LEDs como saídas
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
analogWrite(ledPins[i], ledBrightness[i]);
}
// Configura os botões como entradas com pull-up interno
for (int i = 0; i < 6; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Inicializa o MPU6050
Wire.begin();
mpu.initialize();
// Verifica a conexão com o MPU6050
if (!mpu.testConnection()) {
Serial.println("Falha na conexão com o MPU6050");
while (1);
}
}
void loop() {
// Leitura dos botões
bool buttonStates[6];
for (int i = 0; i < 6; i++) {
buttonStates[i] = digitalRead(buttonPins[i]) == LOW;
}
// Comportamento dos botões
if (buttonStates[0]) {
// Decolar (aumentar brilho dos LEDs gradualmente)
for (int i = 0; i < 4; i++) {
for (int brightness = 0; brightness <= 255; brightness += brightnessStep) {
analogWrite(ledPins[i], brightness);
delay(20);
}
}
}
if (buttonStates[1]) {
// Pousar (diminuir brilho dos LEDs gradualmente)
for (int i = 0; i < 4; i++) {
for (int brightness = 255; brightness >= 0; brightness -= brightnessStep) {
analogWrite(ledPins[i], brightness);
delay(20);
}
}
}
if (buttonStates[2]) {
// Frente (aumenta brilho dos LEDs da frente, diminui dos de trás)
changeBrightness(0, 1, 2, 3);
}
if (buttonStates[3]) {
// Trás (aumenta brilho dos LEDs de trás, diminui dos da frente)
changeBrightness(2, 3, 0, 1);
}
if (buttonStates[4]) {
// Esquerda (aumenta brilho dos LEDs da esquerda, diminui dos da direita)
changeBrightness(0, 2, 1, 3);
}
if (buttonStates[5]) {
// Direita (aumenta brilho dos LEDs da direita, diminui dos da esquerda)
changeBrightness(1, 3, 0, 2);
}
// Leitura dos dados do acelerômetro
int16_t ax, ay, az;
mpu.getAcceleration(&ax, &ay, &az);
// Exibição dos dados no Serial Monitor
Serial.print("Acelerômetro: ");
Serial.print("X: "); Serial.print(ax);
Serial.print(" | Y: "); Serial.print(ay);
Serial.print(" | Z: "); Serial.println(az);
delay(100); // Pequeno atraso para evitar leituras muito rápidas
}
void changeBrightness(int increase1, int increase2, int decrease1, int decrease2) {
ledBrightness[increase1] += brightnessStep;
ledBrightness[increase2] += brightnessStep;
ledBrightness[decrease1] -= brightnessStep;
ledBrightness[decrease2] -= brightnessStep;
// Garantir que os valores estejam dentro dos limites
ledBrightness[increase1] = constrain(ledBrightness[increase1], minBrightness, maxBrightness);
ledBrightness[increase2] = constrain(ledBrightness[increase2], minBrightness, maxBrightness);
ledBrightness[decrease1] = constrain(ledBrightness[decrease1], minBrightness, maxBrightness);
ledBrightness[decrease2] = constrain(ledBrightness[decrease2], minBrightness, maxBrightness);
// Ajusta o brilho dos LEDs
analogWrite(ledPins[increase1], ledBrightness[increase1]);
analogWrite(ledPins[increase2], ledBrightness[increase2]);
analogWrite(ledPins[decrease1], ledBrightness[decrease1]);
analogWrite(ledPins[decrease2], ledBrightness[decrease2]);
}