#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_ADDRESS 0x3C
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define NUM_ALIEN_COLUMNS 7
#define NUM_ALIEN_ROWS 3
// bit maps
static const unsigned char PROGMEM nave1 []={
B00100000,B10000000,
B00010001,B00000000,
B00111111,B10000000,
B01101110,B11000000,
B11111111,B11100000,
B10111111,B10100000,
B10100000,B10100000,
B00011011,B00000000
};
struct matrix {
// base object which most other objects will include
signed int X;
signed int Y;
};
struct nave_structura {
matrix Ord;
};
int h=1,s=1;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
nave_structura naves[NUM_ALIEN_COLUMNS][NUM_ALIEN_ROWS];
void setup() {
display.begin(SSD1306_SWITCHCAPVCC,OLED_ADDRESS);
Inicio_nave();
}
void Inicio_nave() {
for (int a=0;a<6;a++)
for (int b=0;b<3;b++){
naves[a][b].Ord.X=2*(a*8);
naves[a][b].Ord.Y=2*(b*6);
}
}
void Mueve_nave(int pos,int mm) {
for (int a=0;a<6;a++)
for (int b=0;b<3;b++){
naves[a][b].Ord.X=naves[a][b].Ord.X+(pos*mm);
}
}
void pnave(){
display.clearDisplay();
for(int a=0;a<6;a++)
for (int b=0;b<3;b++){
display.drawBitmap(naves[a][b].Ord.X,naves[a][b].Ord.Y,nave1,11,8,WHITE);
}
display.display();
}
void loop() {
if ((s==1)){
h++;
if (h==9) s=-1;
}
pnave();
Mueve_nave(h,s);
delay(300);
if ( (s==-1)){
h--;
if (h==2) s=1;
}
}