// Acelerometro y mando
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
const int pinManVer = A0, pinManHor = A1, pinAceSCL = A4, pinAceSDA = A5;
const int pinManBoton = 2;
// Pantalla de matriz
#include <MD_MAX72xx.h>
// Se puede cambiar la configuración del componente en
// diagram.json para agregar mas o menos, cambiar colores
// y otros parametros
#define maxMatriz 2
int maxX = 8 * maxMatriz - 1; //de 0 a x matrices y vectores
int maxY = 7;
#define pinMatClk 13
#define pinMatDat 11
#define pinMatCs 10
int x = 0, y = 0;
// Se define variable asociada al componente, con parametros especificos que
// incluyen la incluyen la cantidad de matrices a utlilzar
MD_MAX72XX mx = MD_MAX72XX(MD_MAX72XX::PAROLA_HW, pinMatCs, maxMatriz);
void setup() {
Serial.begin(115200);
pinMode(pinAceSCL, INPUT);
pinMode(pinAceSDA, INPUT);
pinMode(pinManBoton, INPUT_PULLUP);
while (!mpu.begin()) {
Serial.println("No se detecta el MPU6050!");
delay(1000);
}
Serial.println("MPU6050 listo!");
// Inicializamos matriz de puntos
mx.begin();
mx.control(MD_MAX72XX::INTENSITY, MAX_INTENSITY / 2);
mx.clear();
x = maxX / 2;
y = maxY / 2;
}
sensors_event_t event;
void loop() {
int ejeVer, ejeHor;
mpu.getAccelerometerSensor()->getEvent(&event);
Serial.print("[");
Serial.print(millis());
Serial.print("] X: ");
Serial.print(event.acceleration.x);
Serial.print(", Y: ");
Serial.print(event.acceleration.y);
Serial.print(", Z: ");
Serial.print(event.acceleration.z);
Serial.print(" m/s^2");
ejeVer = analogRead(pinManVer);
ejeHor = analogRead(pinManHor);
bool botonPresionado = digitalRead(pinManBoton) == LOW;
Serial.println((String)" V = " + ejeVer + " - H = " + ejeHor + " Botón = " + botonPresionado );
// Abajo
if (ejeVer < 300) y = min(y + 1, maxY);
// Arriba
if (ejeVer > 700) y = max(y - 1, 0);
// Izquierda
if (ejeHor > 700) x = min(x + 1, maxX);
// Derecha
if (ejeHor < 300) x = max(x - 1, 0);
if (botonPresionado) mx.clear();
// Coloca un punto en la matriz
mx.setPoint(y, x, true);
// Vuelve a pintar la matriz
mx.update();
delay(200);
}
Si se presiona el botón central del mando se borra la matriz de puntos
Se puede usa el mando para dibujar en la matriz de puntos