I want to update the screen but when I do it it flickers too much.
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1351.h>
// OLED Display Dimesions (pixels)
#define OLED_WIDTH 128
#define OLED_HEIGHT 128
// OLED Display PINS
#define DIN_PIN 12
#define CLK_PIN 11
#define CS_PIN 10
#define DC_PIN 9
#define RST_PIN 8
// On / Off Button Pin
#define OnOff_TOGGLE_SWITCH_PIN 4
// OLED Colours
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_SSD1351 display = Adafruit_SSD1351(OLED_WIDTH, OLED_HEIGHT, CS_PIN, DC_PIN, DIN_PIN, CLK_PIN, RST_PIN);
// Alien Settings
#define NUM_ALIEN_COLUMNS 7
#define NUM_ALIEN_ROWS 3
#define X_START_OFFSET 6
#define SPACE_BETWEEN_ALIEN_COLUMNS 5
#define LARGEST_ALIEN_WIDTH 11
#define SPACE_BETWEEN_ROWS 9
// OLED Graphics
static const unsigned char PROGMEM InvaderTopGfx [] =
{
B00011000,
B00111100,
B01111110,
B11011011,
B11111111,
B00100100,
B01011010,
B10100101
};
static const unsigned char PROGMEM InvaderMiddleGfx [] =
{
B00100000, B10000000,
B00010001, B00000000,
B00111111, B10000000,
B01101110, B11000000,
B11111111, B11100000,
B10111111, B10100000,
B10100000, B10100000,
B00011011, B00000000
};
static const unsigned char PROGMEM InvaderBottomGfx [] =
{
B00001111, B00000000,
B01111111, B11100000,
B11111111, B11110000,
B11100110, B01110000,
B11111111, B11100000,
B00111001, B11000000,
B01100110, B01100000,
B00110000, B11000000
};
struct GameObjectStruct {
signed int X;
signed int Y;
};
struct AlienStruct {
GameObjectStruct Ord;
};
AlienStruct Alien[NUM_ALIEN_COLUMNS][NUM_ALIEN_ROWS];
byte AlienWidth[]={8,11,12}; // top, middle ,bottom widths
void setup()
{
display.begin();
InitAliens(0);
}
void loop()
{
UpdateDisplay();
}
void UpdateDisplay()
{
display.fillScreen(BLACK);
for(int across=0;across<NUM_ALIEN_COLUMNS;across++)
{
for(int down=0;down<NUM_ALIEN_ROWS;down++)
{
switch(down)
{
case 0:
display.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y, InvaderTopGfx, AlienWidth[down], 8,WHITE);
break;
case 1:
display.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y, InvaderMiddleGfx, AlienWidth[down], 8,WHITE);
break;
default:
display.drawBitmap(Alien[across][down].Ord.X, Alien[across][down].Ord.Y, InvaderBottomGfx, AlienWidth[down], 8,WHITE);
}
}
}
}
void InitAliens(int YStart) {
for(int across=0;across<NUM_ALIEN_COLUMNS;across++) {
for(int down=0;down<3;down++) {
Alien[across][down].Ord.X=X_START_OFFSET+(across*(LARGEST_ALIEN_WIDTH+SPACE_BETWEEN_ALIEN_COLUMNS))-down;
Alien[across][down].Ord.Y=YStart+(down*SPACE_BETWEEN_ROWS);
}
}
}
The reason I want to update it every frame is because I am going to animate them.