圖片在底部
- //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;//動畫變量不能用char型變量無法計算
- int sec;//動畫變量不能用char型變量無法計算
- 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;//動畫變量
- //顯示一個心形
- 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();
- /*
- //改時間
- 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()//讀取時間
- {
- second=Clock.getSecond(); //時間
- minute=Clock.getMinute();//時間
- hour=Clock.getHour(h12, PM);//時間
- date=Clock.getDate(); //日期
- month=Clock.getMonth(Century);//日期
- year=Clock.getYear(); //日期
- DoW=Clock.getDoW();//星期
-
- temperature=Clock.getTemperature();//溫度
- }
- void loop() {
- ReadDS3231();//讀取時間
-
- //1.檢測全屏顯示(看看有沒有大面積壞點)
- display.fillScreen(WHITE);//檢測全屏顯示(看看有沒有大面積壞點)
- display.clearDisplay(); // clears the screen and buffer
-
- /*
- //2.畫點 點坐標(10,10)
- display.drawPixel(20, 20, WHITE);// 列127 行63 畫點 點坐標
-
- //3. 畫線 從(0,0)到(50,50)
- display.drawLine(20, 25,20,63, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
-
- //4.畫空心矩形 左上角坐標(x0,y0) 右下角坐標(x1,y1)
- display.drawRect(2,50,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y)
-
- //5.畫個實心矩形
- display.fillRect(2,35,10,10,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y)
-
- //6.畫空心圓
- display.drawCircle(36,50,6,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
-
- //7.畫實心圓
- display.fillCircle(36,30,6,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
-
- //8.畫空心三角形
- display.drawTriangle(60,32,45,43,70,43,WHITE);//(控制三角形A點列0/127 行0/63 控制三角形B點列0/127 行0/63 控制三角形C點列0/127 行0/63)
-
- //9.畫實心三角形
- display.fillTriangle(86,32,72,43,100,43,WHITE);//(控制三角形A點列0/127 行0/63 控制三角形B點列0/127 行0/63 控制三角形C點列0/127 行0/63)
-
- //10.畫空心圓角矩形
- display.drawRoundRect(50,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y 控制圓角=+x)
-
- //11.畫實心圓角矩形
- display.fillRoundRect(70,17,15,15,2,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y 控制圓角=+x)
-
- //12.畫心形(自己用取模軟件畫的)相當于一個任意16X16字
- display.drawBitmap(88,17,Heart_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 結束大小=16)這里只能是16X16因為是16X16字
-
- //13.顯示英文
- display.setTextSize(2);//設置字體大小
- display.setTextColor(WHITE);//設置字體不反白
- display.setCursor(0,0);//列127 行63 坐標
- display.println("bb");
-
- //14.顯示數字變量
- display.setTextSize(2);//設置字體大小
- display.setTextColor(BLACK, WHITE); //設置字體反白
- display.setCursor(30,0);//列127 行63 坐標
- display.println(x);
-
- //15.顯示16進制變量
- display.setTextSize(2);
- display.setTextColor(WHITE);//設置字體不反白
- display.setCursor(60,0);//列127 行63 坐標
- display.print("0x");
- display.println(x, HEX);
-
- //16.顯示單個文字 就是調用drawBitmap(自己用取模軟件取模)相當于一個任意16X16字
- //display.drawBitmap(0,17,Strong_16x16,16,16,BLACK);//可用BLACK黑字在圖片上顯示(控制位置列0/127 控制位置行0/63 )(控制大小=16 結束大小=16)這里只能是16X16因為是16X16字
- display.drawBitmap(0,17,Strong_16x16,16,16,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=16 結束大小=16)這里只能是16X16因為是16X16字
-
- //17.顯示多個文字(在庫里面加入一個ShowCN_16方法 為了同時顯示多個中文 16X16 ,不然的話 就得一個一個drawBitmap)
- display.ShowCN_16(0,45, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找數組法(控制位置列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.畫實心圓
- display.fillCircle(xo,yo,2,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
- //不能用char型變量無法計算
- r=17;//指針半徑
- xo=80;//圓心坐標x MAX 127
- yo=32;//圓心坐標y MAX 63
- z=180;//圓
- //second=0;//調整
- // minute=0;//調整
- // hour=0;//調整
- 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
- //.畫一圈實心圓
- int B;
- for(B=0;B<12;B++)//.畫一圈實心圓
- {
- int A=B*30;//圓角度
- if(B==0||B==3||B==6||B==9)//跳過這幾個點畫實心圓
- {}
- 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時針線
- display.drawLine((xo+(r*cos(a*3.14/z))),(yo+(r*sin(a*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結束列127 結束行63) /////00
- //.畫minute時針線
- display.drawLine((xo+((r-2)*cos(b*3.14/z))),(yo+((r-2)*sin(b*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結束列127 結束行63) /////00
- //.畫hour時針線
- display.drawLine((xo+((r-6)*cos(c*3.14/z))),(yo+((r-6)*sin(c*3.14/z))),xo,yo, WHITE);//(開始列127 開始行63)( 結束列127 結束行63) /////00
-
- //7.畫實心圓//.畫sec時針線
- 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);//設置字體大小
- display.setTextColor(WHITE);//設置字體不反白
- display.setCursor(xo-6,yo-29);//列127 行63 坐標
- display.println("12");
- display.setCursor(xo+22,yo-2);//列127 行63 坐標
- display.println("3");
- display.setCursor(xo-2,yo+22);//列127 行63 坐標
- display.println("6");
- display.setCursor(xo-27,yo-3);//列127 行63 坐標
- display.println("9");
-
-
- // 17.顯示多個文字(在庫里面加入一個ShowCN_16方法 為了同時顯示多個中文 16X16 ,不然的話 就得一個一個drawBitmap)
- display.ShowCN_16(0,40, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找數組法(控制位置列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 畫點 點坐標
- display.drawPixel(15, 10, WHITE);// 列127 行63 畫點 點坐標
- display.drawPixel(33, 6, WHITE);// 列127 行63 畫點 點坐標
- display.drawPixel(33, 10, WHITE);// 列127 行63 畫點 點坐標
-
- //11.畫空心圓角矩形
- display.drawRoundRect(37,16,9,30,3,WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y 控制圓角=+x)
- //6.畫空心圓
- display.fillCircle(41,50,7,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
- //5.畫個實心矩形
- display.fillRect(39,(16+((60-temperature)/2)),5,30-(((60-temperature)/2)),WHITE);//(控制位置列0/127 控制位置行0/63 )(控制大小=列+x 結束大小=行+Y)//溫度
-
- display.display();
-
-
- }
復制代碼 |