#include <MPU6050.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const int ledBatRojo = 12;
const int ledBatVerde = 11;
const int ledBatAzul = 10;
const int pinBat = A0;
MPU6050 mpu;
const int rotationThreshold = 90;
const int precisionRotation = 3;
void setup() {
pinMode(ledBatRojo, OUTPUT);
pinMode(ledBatVerde, OUTPUT);
pinMode(ledBatAzul, OUTPUT);
pinMode(pinBat, INPUT);
//Serial.begin(9600);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.print("Rotation MPU6050");
lcd.clear();
lcd.print("Rotation:");
}
int giroscopio(){
/*giroscopio :
Mientras el dispositivo no haya girado de 90 ° las LEDs estan apagadas.
Cuando ha llegado a 90° la LED se enciende en verde.
Si supera los 90° se apaga de nuevo.
https://www.instructables.com/MPU-6050-Tutorial-How-to-Program-MPU-6050-With-Ard/
*/
if (rotationThreshold-precisionRotation < mpu.getRotationX() < rotationThreshold + precisionRotation) {
digitalWrite(ledBatRojo, LOW);
digitalWrite(ledBatVerde, HIGH);
digitalWrite(ledBatAzul,LOW);
delay(100);
digitalWrite(ledBatRojo, LOW);
digitalWrite(ledBatVerde, LOW);
digitalWrite(ledBatAzul,LOW);
}
else {
digitalWrite(ledBatRojo, HIGH);
digitalWrite(ledBatVerde, LOW);
digitalWrite(ledBatAzul, LOW);
}
}
int bateria (){
int tensionBateria = analogRead(pinBat) * (5 / 1023.0);
if (tensionBateria<2.5) { //definicion del umbral de la bateria
digitalWrite(ledBatRojo, LOW);
digitalWrite(ledBatVerde, HIGH);
digitalWrite(ledBatAzul, HIGH);
}
else if (tensionBateria <3) {
digitalWrite(ledBatRojo, LOW);
digitalWrite(ledBatVerde, LOW);
digitalWrite(ledBatAzul, HIGH);
}
else {
digitalWrite(ledBatRojo, HIGH);
digitalWrite(ledBatVerde, LOW);
digitalWrite(ledBatAzul, HIGH);
}
}
void loop() {
// Lecture des valeurs de rotation sur les axes X, Y et Z
int16_t gyroX = mpu.getRotationX();
// Affichage des valeurs sur l'écran LCD
lcd.setCursor(0, 1);
lcd.print("X: ");
lcd.print(gyroX);
lcd.print(" ");
delay(500);
}