#include <Arduino.h>
#include <U8g2lib.h> //graphics library
#include <Wire.h>
/*
Set your screen info below depending on your screen type https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
*/
//U8G2_SSD1327_WS_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
//U8G2_SSD1327_WS_128X128_F_SW_I2C u8g2(U8G2_R0,SCL,SDA, /* reset=*/ U8X8_PIN_NONE);
U8G2_SH1107_128X128_1_HW_I2C u8g2(U8G2_R0);
#define U8LOG_WIDTH 32
#define U8LOG_HEIGHT 4
uint8_t u8log_buffer[U8LOG_WIDTH*U8LOG_HEIGHT*2];
U8G2LOG u8g2log;
//int center_x = 64; // display x center, 64px for the 128x128px display
//int center_y = 64; // display y center, 64px for the 128x128px display
int xlon;
int ylat;
int xlonb;
int ylatb;
int gpschar;
// XBM file for World Map Image. Map must be equirectalinear projection.
#define world_width 128
#define world_height 62
static unsigned char world_bits[] = {
0x00, 0x00, 0x00, 0x00, 0xF0, 0x81, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9,
0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0xFB, 0x0F, 0xF9, 0xFF, 0x01, 0x00, 0x00, 0x78, 0x80,
0xFF, 0x01, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xF7, 0x3F, 0xF0, 0xFF, 0x00,
0x00, 0x00, 0x0C, 0xFB, 0xFF, 0x3F, 0x1E, 0x00, 0xC0, 0x7F, 0xDF, 0xEF,
0xFF, 0xE0, 0xFF, 0x00, 0xC0, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xE7, 0xFF, 0xFF, 0xFF, 0xE7, 0xF3, 0x0F, 0x00, 0xF0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0x03, 0x06,
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0x7F,
0xF0, 0x81, 0x01, 0x00, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0xC0, 0x83, 0xFF, 0x7F, 0xF0, 0x03, 0x00, 0x40, 0x7C, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0x03, 0x80, 0x00, 0xFF, 0xFF, 0xE7, 0x07, 0x00, 0x40,
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0x03, 0x00, 0x00, 0xFE, 0xFF,
0xF7, 0x1F, 0x00, 0xE0, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x01,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x17, 0x00, 0xC0,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF,
0xFF, 0x02, 0x00, 0xA0, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00,
0x00, 0x00, 0xF0, 0xFF, 0x7F, 0x00, 0x00, 0xE0, 0xF9, 0xF7, 0xFD, 0xFF,
0xFF, 0x7F, 0x04, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x3F, 0x00, 0x00, 0xE0,
0x6D, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x02, 0x00, 0x00, 0x00, 0xE0, 0xFF,
0x1F, 0x00, 0x00, 0xE0, 0x0F, 0xF8, 0xFF, 0xFF, 0xFF, 0xE7, 0x03, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xF0, 0x9F, 0xEA, 0xFF, 0xFF,
0xFF, 0x67, 0x01, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x0D, 0x00, 0x00, 0xF0,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xBF,
0x0C, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3D, 0x08, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x3F, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x11, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x3F, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0x61, 0x00, 0x00, 0xFC, 0xFF, 0xDF, 0x0F, 0x3E, 0x3E, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE0, 0x07, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x03, 0x1C,
0x7C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x01, 0x1C, 0x78, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE6, 0x03, 0x00, 0xFC, 0xFF, 0xFF, 0x07, 0x08, 0x68, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x10,
0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00, 0xE0,
0xFC, 0xFF, 0x01, 0x00, 0x1C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x7F, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x98, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00,
0x98, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x03, 0x00,
0xF0, 0x7F, 0x00, 0x00, 0xB0, 0xCF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0x0F, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0xE0, 0x00, 0x0E, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00, 0xE0, 0x3F, 0x00, 0x00,
0x00, 0x14, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x07, 0x00,
0xE0, 0x3F, 0x00, 0x00, 0x00, 0xC0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0xFF, 0x07, 0x00, 0xF0, 0x7F, 0x03, 0x00, 0x00, 0xE0, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xF0, 0xBF, 0x03, 0x00,
0x00, 0xF8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x07, 0x00,
0xF0, 0x1F, 0x01, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0x01, 0x00, 0xE0, 0x9F, 0x01, 0x00, 0x00, 0xFF, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00,
0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00,
0xE0, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x7F, 0x00, 0x00, 0xC0, 0x07, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00,
0x00, 0x0E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20,
0x00, 0x00, 0x00, 0x00, 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00,
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xFF, 0xD1, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xF9,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x20, 0xC0, 0x07, 0x00, 0xF0,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xF9,
0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x03, 0x40, 0xFE, 0xFF, 0xFF, 0xBF, 0xC4, 0xF8, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, };
void setup(void) {
//Serial1.begin(115200);
//Serial.begin(9600); //uncomment to debug the GPS
u8g2.begin();
u8g2log.begin(U8LOG_WIDTH, U8LOG_HEIGHT, u8log_buffer);
u8g2log.setLineHeightOffset(1); // set extra space between lines in pixels, this can be negative
u8g2log.setRedrawMode(1); // 0: Update screen with newline, 1: Update screen for every char
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_u8glib_4_tr);
u8g2.drawXBMP(0,0, world_width, world_height, world_bits); //draw World Map
u8g2.drawFrame(0,0,128,63); //setup fixed screen info and borders
u8g2.drawFrame(0, 64, 128,64);
u8g2.drawLine(0, 73, 128,73);
u8g2.drawLine(0, 91, 128,91);
u8g2.drawStr(2, 71, "MINI MISSION CONTROL ");
u8g2.drawLine(0, 118, 128,118);
u8g2.drawStr(2, 125, "OKUBO HEAVY INDUSTRIES");
u8g2.drawLog(3, 98, u8g2log); // draw the log content on the display
} while ( u8g2.nextPage() );
}
Loading
grove-oled-sh1107
grove-oled-sh1107