#include <U8g2lib.h>
#include<Arduino.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
const unsigned char weekpic0 [] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFD, 0x3F, 0x0F, 0x70, 0xEF, 0xF7, 0xEF, 0xF7, 0xEF, 0xF7, 0x0F, 0xF0, 0xEF, 0xF7, 0xEF, 0xF7, 0xEF, 0xF7, 0xEF, 0xF7, 0x0E, 0x70, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期日.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic1[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期一.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic2[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期二.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic3[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0x06, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期三.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic4[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0x06, 0x60, 0xB7, 0xED, 0xB7, 0xED, 0xD7, 0xED, 0xE7, 0xE1, 0xF7, 0xEF, 0xF7, 0xEF, 0xF7, 0xEF, 0x07, 0xE0, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期四.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic5[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3F, 0xFE, 0x7F, 0x0F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期二.bmp0
/* (16 X 16 )*/
};
const unsigned char weekpic6[] U8X8_PROGMEM{
0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x3F, 0xFE, 0x7E, 0x07, 0xE0, 0xFF, 0xFF, 0xBF, 0xFD, 0xDF, 0xFB, 0xDF, 0xFB, 0xDF, 0xF7, 0xEF, 0xF7, 0xF7, 0xEF, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\星期图\星期六.bmp0
/* (16 X 16 )*/
};
const unsigned char weaPic[] U8X8_PROGMEM {
0x00, 0xFE, 0x1F, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 0x03, 0xF8, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xFF, 0x1F,
0xFE, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F,
0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFE, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0x0F,
0xF8, 0xFF, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x03, 0xC0, 0xFF, 0xFF, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\单位图\[email protected]
/* (30 X 30 )*/
};
const unsigned char locPic[] U8X8_PROGMEM{
0xFC, 0x00, 0xFE, 0x01, 0xFE, 0x01, 0x87, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x87, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xFE, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0x78, 0x00, 0x30, 0x00, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\定位.bmp0
/* (10 X 16 )*/
};
const unsigned char temPic[] U8X8_PROGMEM{
0x30, 0x00, 0x48, 0x00, 0x58, 0x00, 0x48, 0x00, 0x48, 0x00, 0x58, 0x00, 0x48, 0x00, 0xCC, 0x00, 0x86, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x87, 0x03, 0xCF, 0x03, 0xFE, 0x01, 0xFC, 0x00, //C:\Users\Lenovo\Desktop\知心天气星期相关代码\温度计.bmp0
/* (10 X 16 )*/
};
unsigned char weekPic[32] U8X8_PROGMEM;
void selectWeekPic(int weekDay, unsigned char weekPic[32]) {
switch (weekDay) {
case 0:
memcpy_P(weekPic, weekpic0, sizeof(weekpic0));
break;
case 1:
memcpy_P(weekPic, weekpic1, sizeof(weekpic1));
break;
case 2:
memcpy_P(weekPic, weekpic2, sizeof(weekpic2));
break;
case 3:
memcpy_P(weekPic, weekpic3, sizeof(weekpic3));
break;
case 4:
memcpy_P(weekPic, weekpic4, sizeof(weekpic4));
break;
case 5:
memcpy_P(weekPic, weekpic5, sizeof(weekpic5));
break;
case 6:
memcpy_P(weekPic, weekpic6, sizeof(weekpic6));
break;
default:
// 如果输入的星期值无效,则使用默认图案或进行其他处理
break;
}
}
short disapper_temp = 0;
short come_temp = 8;
unsigned char ui_disapper(void)
{
int len = 8 * u8g2.getBufferTileHeight() * u8g2.getBufferTileWidth();
unsigned char *p = u8g2.getBufferPtr();
unsigned char return_flag = 0;
//1 byte = 8 bit
// 1111 1111
// 1111 1111 &
// 0000 0000
// rand()%0xff = 0 ~ 0xff
for ( int i = 0; i < len ; i++)
{
p[i] = p[i] & (rand() % 0xff) >> disapper_temp;
}
disapper_temp += 2;
if (disapper_temp > 8)
{
return_flag = 1;
disapper_temp = 0;
}
return return_flag ? 0 : 1;
}
unsigned char ui_come(void)
{
int len = 8 * u8g2.getBufferTileHeight() * u8g2.getBufferTileWidth();
unsigned char *p = u8g2.getBufferPtr();
unsigned char return_flag = 0;
for ( int i = 0; i < len ; i++)
{
p[i] = p[i] & (rand() % 0xff) >> come_temp;
}
come_temp -= 2;
if (come_temp < 0)
{
return_flag = 1;
come_temp = 8;
}
return return_flag ? 0 : 1;
}
void setup() {
u8g2.begin();
pinMode(13, INPUT_PULLUP);
pinMode(12, OUTPUT);
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println(sizeof(weaPic));
selectWeekPic(1, weekPic);
}
String city = "厦门";
//drawXBMP 坐标位图片的左上角
//drwaUTF8 坐标在字的左下角
//drawStr 坐标在字的左下角
int led = 0;
int key = 0;
int last_key = 0;
int state = 0;
void loop() {
if (!digitalRead(13) && key == 0) {
if (led == 0) {
digitalWrite(12, HIGH);
led = 1;
}
else {
digitalWrite(12, LOW);
led = 0;
}
key = 1;
switch (state)
{
case 0:
//界面2切换到界面1
while (1) {
u8g2.clearBuffer();
//时间绘制
u8g2.setFont(u8g2_font_logisoso28_tf );
u8g2.drawStr(0, 30, "02:10");
if (ui_disapper() == 0)
{
break;
}
u8g2.sendBuffer();
}
while (1) {
u8g2.clearBuffer();
u8g2.drawXBMP(80, 30, 10, 16, temPic);
u8g2.setFont(u8g2_font_wqy14_t_gb2312a); // 设置字体
u8g2.drawStr(92, 45, "14°C");
u8g2.drawXBMP(80, 48, 10, 16, locPic);
u8g2.drawUTF8(92, 62, city.c_str()); //z重要结论:c_str()的返回值就是字符串
if (ui_come() == 0)
{
break;
}
u8g2.sendBuffer();
}
state = 1;
break;
case 1:
while (1) {
u8g2.clearBuffer();
u8g2.drawXBMP(80, 30, 10, 16, temPic);
u8g2.setFont(u8g2_font_wqy14_t_gb2312a); // 设置字体
u8g2.drawStr(92, 45, "14°C");
u8g2.drawXBMP(80, 48, 10, 16, locPic);
if (ui_disapper() == 0)
{
break;
}
u8g2.sendBuffer();
}
while (1) {
u8g2.clearBuffer();
//时间绘制
u8g2.setFont(u8g2_font_logisoso28_tf );
u8g2.drawStr(0, 30, "02:10");
if (ui_come() == 0)
{
break;
}
u8g2.sendBuffer();
}
state = 0;
break;
}
}
else {
key = 0;
}
switch (state) {
case 0:
u8g2.clearBuffer();
//时间绘制
u8g2.setFont(u8g2_font_logisoso28_tf );
u8g2.drawStr(0, 30, "02:10");
u8g2.sendBuffer();
break;
case 1:
u8g2.clearBuffer();
u8g2.drawXBMP(80, 30, 10, 16, temPic);
u8g2.setFont(u8g2_font_wqy14_t_gb2312a); // 设置字体
u8g2.drawStr(92, 45, "14°C");
u8g2.drawXBMP(80, 48, 10, 16, locPic);
u8g2.sendBuffer();
break;
}
}