|
//A4 SDA
//A5 SCL
//0X57 0X68
#include <Arduino.h>
#include <DS3231.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
int r,xo,yo,a,b,c,z;//動(dòng)畫變量不能用char型變量無法計(jì)算
int sec;//動(dòng)畫變量不能用char型變量無法計(jì)算
DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;
int second,minute,hour,date,month,year,DoW;
byte temperature;//溫度
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
int x;//動(dòng)畫變量
//顯示一個(gè)心形
static const uint8_t PROGMEM Heart_16x16[] = {
0x00,0x00,0x18,0x18,0x3C,0x3C,0x7E,0x7E,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x7F,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x00,0x00//未命名文件0
};
static const uint8_t PROGMEM bbjj_16x16[] ={
0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8,
0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00,/*"溫",0*/
0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20,
0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E,/*"度",1*/
};
void setup() {
// Serial.begin(115200);
delay(500);
Wire.begin();
/*
//改時(shí)間
Clock.setSecond(10);//Set the second
Clock.setMinute(40);//Set the minute
Clock.setHour(1); //Set the hour
Clock.setDoW(7); //Set the day of the week
Clock.setDate(24); //Set the date of the month
Clock.setMonth(6); //Set the month of the year
Clock.setYear(18); //Set the year (Last two digits of the year)
*/
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
}
void ReadDS3231()//讀取時(shí)間
{
second=Clock.getSecond(); //時(shí)間
minute=Clock.getMinute();//時(shí)間
hour=Clock.getHour(h12, PM);//時(shí)間
date=Clock.getDate(); //日期
month=Clock.getMonth(Century);//日期
year=Clock.getYear(); //日期
DoW=Clock.getDoW();//星期
temperature=Clock.getTemperature();//溫度
}
void loop() {
ReadDS3231();//讀取時(shí)間
//1.檢測全屏顯示(看看有沒有大面積壞點(diǎn))
display.fillScreen(WHITE);//檢測全屏顯示(看看有沒有大面積壞點(diǎn))
display.clearDisplay(); // clears the screen and buffer
/*
//2.畫點(diǎn) 點(diǎn)坐標(biāo)(10,10)
display.drawPixel(20, 20, WHITE);// 列127 行63 畫點(diǎn) 點(diǎn)坐標(biāo)
//3. 畫線 從(0,0)到(50,50)
display.drawLine(20, 25,20,63, WHITE);//(開始列127 開始行63)( 結(jié)束列127 結(jié)束行63)
//4.畫空心矩形 左上角坐標(biāo)(x0,y0) 右下角坐標(biāo)(x1,y1)
display.drawRect(2,50,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y)
//5.畫個(gè)實(shí)心矩形
display.fillRect(2,35,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y)
//6.畫空心圓
display.drawCircle(36,50,6,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//7.畫實(shí)心圓
display.fillCircle(36,30,6,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//8.畫空心三角形
display.drawTriangle(60,32,45,43,70,43,WHITE);//(控制三角形A點(diǎn)列0/127 行0/63 控制三角形B點(diǎn)列0/127 行0/63 控制三角形C點(diǎn)列0/127 行0/63)
//9.畫實(shí)心三角形
display.fillTriangle(86,32,72,43,100,43,WHITE);//(控制三角形A點(diǎn)列0/127 行0/63 控制三角形B點(diǎn)列0/127 行0/63 控制三角形C點(diǎn)列0/127 行0/63)
//10.畫空心圓角矩形
display.drawRoundRect(50,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y 控制圓角=+x)
//11.畫實(shí)心圓角矩形
display.fillRoundRect(70,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y 控制圓角=+x)
//12.畫心形(自己用取模軟件畫的)相當(dāng)于一個(gè)任意16X16字
display.drawBitmap(88,17,Heart_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 結(jié)束大小=16)這里只能是16X16因?yàn)槭?6X16字
//13.顯示英文
display.setTextSize(2);//設(shè)置字體大小
display.setTextColor(WHITE);//設(shè)置字體不反白
display.setCursor(0,0);//列127 行63 坐標(biāo)
display.println("bb");
//14.顯示數(shù)字變量
display.setTextSize(2);//設(shè)置字體大小
display.setTextColor(BLACK, WHITE); //設(shè)置字體反白
display.setCursor(30,0);//列127 行63 坐標(biāo)
display.println(x);
//15.顯示16進(jìn)制變量
display.setTextSize(2);
display.setTextColor(WHITE);//設(shè)置字體不反白
display.setCursor(60,0);//列127 行63 坐標(biāo)
display.print("0x");
display.println(x, HEX);
//16.顯示單個(gè)文字 就是調(diào)用drawBitmap(自己用取模軟件取模)相當(dāng)于一個(gè)任意16X16字
//display.drawBitmap(0,17,Strong_16x16,16,16,BLACK);//可用BLACK黑字在圖片上顯示(控制位置列0/127 控制位置行0/63 )(控制大小=16 結(jié)束大小=16)這里只能是16X16因?yàn)槭?6X16字
display.drawBitmap(0,17,Strong_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 結(jié)束大小=16)這里只能是16X16因?yàn)槭?6X16字
//17.顯示多個(gè)文字(在庫里面加入一個(gè)ShowCN_16方法 為了同時(shí)顯示多個(gè)中文 16X16 ,不然的話 就得一個(gè)一個(gè)drawBitmap)
display.ShowCN_16(0,45, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找數(shù)組法(控制位置列0/127 控制位置行0/63 )
*/
//6.畫空心圓
display.drawCircle(xo,yo,19,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
display.drawCircle(xo,yo,25+6,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//7.畫實(shí)心圓
display.fillCircle(xo,yo,2,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//不能用char型變量無法計(jì)算
r=17;//指針半徑
xo=80;//圓心坐標(biāo)x MAX 127
yo=32;//圓心坐標(biāo)y MAX 63
z=180;//圓
//second=0;//調(diào)整
// minute=0;//調(diào)整
// hour=0;//調(diào)整
int hour1=hour;
if(hour1>12)
{hour1=hour1-12;}
else
{hour1=hour1;}
a=(second-15)*6;//圓角度360/60
b=(minute-15)*6;//圓角度360/60
c=(hour1-15)*30;//圓角度360/12
//.畫一圈實(shí)心圓
int B;
for(B=0;B<12;B++)//.畫一圈實(shí)心圓
{
int A=B*30;//圓角度
if(B==0||B==3||B==6||B==9)//跳過這幾個(gè)點(diǎn)畫實(shí)心圓
{}
else
{
display.fillCircle((xo+((r+9)*cos(A*3.14/z))),(yo+((r+9)*sin(A*3.14/z))),1,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
}
}
//.畫sec時(shí)針線
display.drawLine((xo+(r*cos(a*3.14/z))),(yo+(r*sin(a*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結(jié)束列127 結(jié)束行63) /////00
//.畫minute時(shí)針線
display.drawLine((xo+((r-2)*cos(b*3.14/z))),(yo+((r-2)*sin(b*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結(jié)束列127 結(jié)束行63) /////00
//.畫hour時(shí)針線
display.drawLine((xo+((r-6)*cos(c*3.14/z))),(yo+((r-6)*sin(c*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結(jié)束列127 結(jié)束行63) /////00
//7.畫實(shí)心圓//.畫sec時(shí)針線
display.fillCircle((xo+((r-4)*cos(a*3.14/z))),(yo+((r-4)*sin(a*3.14/z))),2,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//13.顯示英文
display.setTextSize(1);//設(shè)置字體大小
display.setTextColor(WHITE);//設(shè)置字體不反白
display.setCursor(xo-6,yo-29);//列127 行63 坐標(biāo)
display.println("12");
display.setCursor(xo+22,yo-2);//列127 行63 坐標(biāo)
display.println("3");
display.setCursor(xo-2,yo+22);//列127 行63 坐標(biāo)
display.println("6");
display.setCursor(xo-27,yo-3);//列127 行63 坐標(biāo)
display.println("9");
// 17.顯示多個(gè)文字(在庫里面加入一個(gè)ShowCN_16方法 為了同時(shí)顯示多個(gè)中文 16X16 ,不然的話 就得一個(gè)一個(gè)drawBitmap)
display.ShowCN_16(0,40, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找數(shù)組法(控制位置列0/127 控制位置行0/63 )
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(0,17);
display.println((int)temperature);////溫度
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,5);
display.println((int)hour/10);////
display.setCursor(7,5);
display.println((int)hour%10);////
display.setCursor(18,5);
display.println((int)minute/10);////
display.setCursor(25,5);
display.println((int)minute%10);////
display.setCursor(37,5);
display.println((int)second/10);////
display.setCursor(44,5);
display.println((int)second%10);////
display.drawPixel(15, 6, WHITE);// 列127 行63 畫點(diǎn) 點(diǎn)坐標(biāo)
display.drawPixel(15, 10, WHITE);// 列127 行63 畫點(diǎn) 點(diǎn)坐標(biāo)
display.drawPixel(33, 6, WHITE);// 列127 行63 畫點(diǎn) 點(diǎn)坐標(biāo)
display.drawPixel(33, 10, WHITE);// 列127 行63 畫點(diǎn) 點(diǎn)坐標(biāo)
//11.畫空心圓角矩形
display.drawRoundRect(37,16,9,30,3,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y 控制圓角=+x)
//6.畫空心圓
display.fillCircle(41,50,7,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//5.畫個(gè)實(shí)心矩形
display.fillRect(39,(16+((60-temperature)/2)),5,30-(((60-temperature)/2)),WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結(jié)束大小=行+Y)//溫度
display.display();
} |
|