/*
* 16X16點陣顯示 取模方式 陰碼+逐行式+順向
**/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DS18B20.h"
float Temp_Buffer = 0; //存放溫度值的10倍
DS18B20 myDS18B20(A0);
#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 Strong_16x16[] = {
0x00,0x40,0x40,0x40,0x20,0x40,0x20,0x44,0x00,0x68,0x07,0x70,0x11,0x60,0x11,0x50,
0x21,0x50,0xE2,0x48,0x22,0x48,0x24,0x44,0x28,0x42,0x20,0x40,0x21,0x40,0x00,0x80,/*"冰",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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
}
void loop() {
x++;
if(x==60)x=0;
//1.檢測全屏顯示(看看有沒有大面積壞點)
display.fillScreen(WHITE);//檢測全屏顯示(看看有沒有大面積壞點)
display.clearDisplay(); // clears the screen and buffer
/*
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(60,40,23,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//7.畫實心圓
display.fillCircle(60,40,2,WHITE);//(控制圓心位置列0/127 控制圓心位置行0/63 )(控制大小=0+x )
//3. 畫線 從(0,0)到(50,50)
if(x==0)display.drawLine(60,20,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63) /////00
if(x==1)display.drawLine(62,22,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==2)display.drawLine(64,24,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==3)display.drawLine(66,26,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==4)display.drawLine(68,28,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==6)display.drawLine(70,30,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==7)display.drawLine(71,31,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==8)display.drawLine(72,32,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==9)display.drawLine(73,33,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==10)display.drawLine(74,34,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==11)display.drawLine(75,35,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==12)display.drawLine(76,36,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==13)display.drawLine(78,38,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==14)display.drawLine(79,39,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==15)display.drawLine(80,40,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)////15
if(x==16)display.drawLine(78,42,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==17)display.drawLine(76,44,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==18)display.drawLine(74,46,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==19)display.drawLine(72,48,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==20)display.drawLine(70,50,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==21)display.drawLine(69,51,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==22)display.drawLine(68,52,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==23)display.drawLine(67,53,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==24)display.drawLine(66,54,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==25)display.drawLine(65,55,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==26)display.drawLine(64,56,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==27)display.drawLine(63,57,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==28)display.drawLine(62,58,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==29)display.drawLine(61,59,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==30)display.drawLine(60,60,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)////18
if(x==31)display.drawLine(58,58,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==32)display.drawLine(56,56,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==33)display.drawLine(54,54,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==34)display.drawLine(52,52,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==35)display.drawLine(50,50,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==36)display.drawLine(49,49,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==37)display.drawLine(48,48,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==38)display.drawLine(47,47,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==39)display.drawLine(46,46,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==40)display.drawLine(45,45,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==41)display.drawLine(44,44,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==42)display.drawLine(43,43,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==43)display.drawLine(42,42,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==44)display.drawLine(41,41,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==45)display.drawLine(40,40,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)//00
if(x==46)display.drawLine(42,38,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==47)display.drawLine(44,36,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==48)display.drawLine(46,34,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==49)display.drawLine(48,32,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==50)display.drawLine(49,31,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==51)display.drawLine(50,30,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==52)display.drawLine(51,29,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==53)display.drawLine(52,28,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==54)display.drawLine(53,27,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==55)display.drawLine(54,26,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==56)display.drawLine(55,25,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==57)display.drawLine(56,24,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==58)display.drawLine(57,23,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
if(x==59)display.drawLine(58,22,60,40, WHITE);//(開始列127 開始行63)( 結束列127 結束行63)
//13.顯示英文
display.setTextSize(1);//設置字體大小
display.setTextColor(WHITE);//設置字體不反白
display.setCursor(58,18);//列127 行63 坐標
display.println("0");
display.setCursor(70,35);//列127 行63 坐標
display.println("15");
display.setCursor(56,55);//列127 行63 坐標
display.println("30");
display.setCursor(38,35);//列127 行63 坐標
display.println("45");
// 17.顯示多個文字(在庫里面加入一個ShowCN_16方法 為了同時顯示多個中文 16X16 ,不然的話 就得一個一個drawBitmap)
display.ShowCN_16(0,40, bbjj_16x16,sizeof(bbjj_16x16)/32,WHITE);//查找數組法(控制位置列0/127 控制位置行0/63 )
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,17);
Temp_Buffer = myDS18B20.Get_temp();////溫度
display.println((int)Temp_Buffer);////溫度
x=Temp_Buffer;
display.display();
//delay(2000);
} |