#define joyXpin 0
#define joyYpin 1
#define botonPin 2
#define umbral 100
#define umbralMax 500
#define __DEBUG__
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int posX = 60;
int posY = 50;
int joyX;
int joyY;
int frame=1;
// Definir constantes
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
// Objeto de la clase Adafruit_SSD1306
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
//Dibujo Nave
const unsigned char bitmapNave01 [] PROGMEM = {
0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x1f, 0x00, 0x4e, 0x40, 0xce, 0x60, 0xf1, 0xe0,
0xca, 0x60, 0x8e, 0x20, 0x84, 0x20
};
const unsigned char bitmapNave02 [] PROGMEM = {
0x04, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x55, 0x40, 0xdf, 0x60, 0xce, 0x60, 0xca, 0x60, 0xb1, 0xa0,
0x8e, 0x20, 0x0e, 0x00, 0x04, 0x00
};
void setup() {
pinMode(2,INPUT);
pinMode(botonPin, INPUT_PULLUP);
#ifdef __DEBUG__
Serial.begin(9600);
delay(100);
Serial.println("Iniciando pantalla OLED");
#endif
// Iniciar pantalla OLED en la dirección 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
#ifdef __DEBUG__
Serial.println("No se encuentra la pantalla OLED");
#endif
while (true);
}
}
void loop() {
//Lee posicion del joystick
joyX = analogRead(joyXpin)-512;
joyY = analogRead(joyYpin)-512;
//Calculo del movimiento
if (joyX < -umbral ){ posX--; }
if (joyX < -umbralMax ){ posX=posX-2; }
if (joyX > umbral ){ posX++; }
if (joyX > umbralMax ){ posX=posX+2; }
if (joyY < -umbral ){ posY--; }
if (joyY < -umbralMax ){ posY=posY-2; }
if (joyY > umbral ){ posY++; }
if (joyY > umbralMax ){ posY=posY+2; }
//Evita limites de la pantalla
if (posX < 0){ posX = 117; }
if (posX > 117){ posX = 0; }
if (posY < 0){ posY = 0; }
if (posY > 53){ posY = 53; }
//Dibuja Nave en la nueva posicion
display.clearDisplay();
if (frame == 1){
display.drawBitmap(posX, posY, bitmapNave01, 11, 11, SSD1306_WHITE);
frame++;
}
else {
display.drawBitmap(posX, posY, bitmapNave02, 11, 11, SSD1306_WHITE);
frame = 1;
}
display.display();
delay(50);
}