Buenas, estoy realizando un proyecto para la facultad, el mismo tiene como componentes un mpu6050, arduino micro, un sensor de presión conectado con un hx711. Todo esto es para un mouse que se mueve con la cabeza y el click lo haces soplando. El código inicial andaba bien, el problema surgió cuando quise convertir todo en un objeto. Creé el objeto, compilaba bien, pero cuando la cargue al Arduino este dejó de ser reconocido para la Pc, ahora lo conecto y no hace ni el ruido de cuando se conecta un periférico USB.
Les adjunto el código a ver si alguien me puede guiar en cual puede ser el problema
Maux.ino
#include "Maux.h"
Maux maux;
void setup(){}
void loop() {
maux.click();
maux.move();
}
Maux.h
#define hx711_data_pin 4
#define hx711_clock_pin 5
#include <Q2HX711.h>
#include <MPU6050.h>
#include <Wire.h>
#include <I2Cdev.h>
#include <Mouse.h>
class Maux{
private:
MPU6050 mpu;
Q2HX711 hx711=Q2HX711(hx711_data_pin,hx711_clock_pin);
float valor1;
float valor_anterior=1000;
float tara1;
int16_t ax, ay, az, gx, gy, gz;
int vx=0, vy=0;
unsigned long tiempoEnvio=0;
unsigned long tiempo=0;
long count=0;
boolean clickeado=false;
boolean dobleclick = false;
public:
Maux();
void move();
void click();
};
Maux.cpp
#include "Maux.h"
Maux::Maux()
{
Serial.begin(115200);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection())
{
while (1)
;
}
for (byte y = 0; y < 10; y++)
{
valor1 = valor1 + hx711.read();
}
tara1 = valor1 / 50;
valor1 = 0;
Mouse.begin();
}
void Maux::click()
{
//for ( byte y = 0; y < 1; y++){
valor1 = valor1 + hx711.read();
//}
//valor1=valor1/1;
valor1 = (valor1 - tara1) / 223;
//Serial.print("presion=");
//Serial.print(valor1,1);
//Serial.println(" Pas");
if (valor1 - valor_anterior > 20 && dobleclick == false)
{
//Mouse.click(MOUSE_RIGHT);
Mouse.click();
Mouse.click();
clickeado = true;
dobleclick = true;
valor_anterior = valor1;
}
if (valor1 - valor_anterior > 2 && clickeado == false)
{
digitalWrite(LED_BUILTIN, HIGH);
//Serial.print("Valor click: ");
//Serial.println(valor1);
clickeado = true;
Mouse.press();
//delay(10);
}
else if (valor1 - valor_anterior < 2 && clickeado == true)
{
digitalWrite(LED_BUILTIN, LOW);
clickeado = false;
if (dobleclick == true)
{
dobleclick = false;
}
Mouse.release();
}
//Serial.print("Valor click: ");
//Serial.println(valor1);
/*Serial.println("Valor1 = ");
Serial.println(valor1);*/
if (clickeado == true)
{
valor_anterior = valor_anterior;
Serial.print("Valor1 = ");
Serial.println(valor1 - valor_anterior);
}
else
{
valor_anterior = valor1;
Serial.print("Valor2 = ");
Serial.println(valor1 - valor_anterior);
}
valor1 = 0;
}
void Maux::move()
{
//x, &ay, &az, &gx, &gy, &gz);
mpu.getRotation(&gx, &gy, &gz);
vx += -3 * ((gx - 450) / 150); // "+300" because the x axis of gyroscope give values about -350 while it's not moving. Change this value if you get something different using the TEST code, chacking if there are values far from zero.
vy += 3 * ((gz + 150) / 150); // same here about "-100"
count++;
//click();
Serial.print(gx);
Serial.print(',');
Serial.println(gz);
if (millis() - tiempoEnvio > 1)
{ //mpu.getMotion6(&a
if (vx / count < 100 || vx / count > -100 || vx / count > 20 || vx / count < -20 || vy / count > 20 || vy / count < 100 || vy / count > -100 || vy / count < -20)
{
//if(vx/count>20||vx/count<-20||vy/count>20||vy/count<-20 ){
/*Serial.print(vx/count);
Serial.print(',');
Serial.print(vy/count);
Serial.print(',');
Serial.println(0);*/
tiempoEnvio = millis();
Mouse.move(vx / count, vy / count);
count = 0;
vx = 0;
vy = 0;
//valor1=0;
}
else
{
Mouse.move(0, 0);
}
}
}
Nuevamente. Si ese código lo pongo en el archivo .ino anda. El problema fue cuando lo convertí en objeto.
Bueno, espero que me puedan ayudar. Saludos.