/*
  GYROGAME

  Alexander Hugo Tartari
*/

#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

const int MPU = 0x68; // endereço I2C do MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;
Adafruit_SSD1306 display = Adafruit_SSD1306();

int pixX, pixY;
int rdX = 0, rdY = 0;
int cont = 0;


void resetRandomPixel()
{
  rdX = random(6, 22);
  rdY = random(20, 108);
}

void setup()
{
  //  Serial.begin(9600);
  resetRandomPixel();
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B); // registro PWR_MGMT_1
  Wire.write(0);    // definido como zero (ativa o MPU-6050)
  Wire.endTransmission(true);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.clearDisplay();
}

void updateReadings()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU, 14, true);      // 14 bytes with stop message
  AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
}

void updatePixels()
{
  pixX = map(AcX, -18000, 18000, 32, 0);
  pixY = map(AcY, -18000, 18000, 128, 0);
}

boolean verifyPoint()
{
  if (pixX == rdX && pixY == rdY)
  {
    cont++;
    resetRandomPixel();
    return true;
  }
  return false;
}

void drawPixels()
{
  display.drawPixel(pixY, pixX, 1);
  display.drawPixel(rdY, rdX, 1);

  //  uncomment for bigger player pixel
  //  display.drawPixel(pixY+1, pixX+1, 1);
  //  display.drawPixel(pixY+1, pixX-1, 1);
  //  display.drawPixel(pixY-1, pixX+1, 1);
  //  display.drawPixel(pixY-1, pixX-1, 1);
  //
  //  display.drawPixel(pixY, pixX+1, 1);
  //  display.drawPixel(pixY, pixX-1, 1);
  //  display.drawPixel(pixY-1, pixX, 1);
  //  display.drawPixel(pixY+1, pixX, 1);

  display.setCursor(0, 0);
  display.print(cont);
  display.display();
  display.clearDisplay();
}

void loop()
{
  updateReadings();
  updatePixels();
  verifyPoint();
  drawPixels();
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
imu1:INT
imu1:AD0
imu1:XCL
imu1:XDA
imu1:SDA
imu1:SCL
imu1:GND
imu1:VCC
Loading
ssd1306