標(biāo)題: 【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(145)---0.91寸OLED液晶屏 [打印本頁]

作者: eagler8    時(shí)間: 2020-2-19 13:13
標(biāo)題: 【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(145)---0.91寸OLED液晶屏
37款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實(shí)踐出真知(一定要?jiǎng)邮肿觯┑睦砟睿詫W(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動(dòng)手嘗試系列實(shí)驗(yàn),不管成功(程序走通)與否,都會(huì)記錄下來---小小的進(jìn)步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料+代碼+圖形+仿真)
實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC 12832液晶屏 兼容3.3v-5V









作者: eagler8    時(shí)間: 2020-2-19 14:26
本帖最后由 eagler8 于 2020-2-19 14:55 編輯



OLED
OLED是英文Organic Light Emitting Display(有機(jī)發(fā)光顯示器)的簡(jiǎn)稱,它的發(fā)光原理是指有機(jī)半導(dǎo)體材料和發(fā)光材料在電場(chǎng)驅(qū)動(dòng)下,通過載流子注入和復(fù)合導(dǎo)致發(fā)光。通過搭配不同的有機(jī)材料,就可以發(fā)出不同顏色的光,來達(dá)到彩顯示器的要求。也有人把OLED拼寫為 Organic Light Emitting Diode (有機(jī)發(fā)光二極管),兩種寫法意思基本一樣。

由于OLED是自發(fā)光器件,每個(gè)像素自己都會(huì)發(fā)光,并且透光率很高,因此,與時(shí)下液晶電視都采用的LCD面板相比,其亮度與對(duì)比度都比LCD勝出一籌,視角可達(dá)170度,圖像更加鮮艷,耗電量更小。另外,OLED的發(fā)光層比較輕,因此它的基層可使用富于柔韌性的材料,而不會(huì)使用剛性材料。OLED基層為塑料材質(zhì),而LCD、PDP、SED、TDEL等顯示器則需使用玻璃基板,因此,OLED顯示器的發(fā)光效率是目前所有顯示器中排名最高。

最近幾年,在歐洲還誕生了一種用高分子有機(jī)材料制造發(fā)光二極管的技術(shù),稱為POLED(Polymer Organic Light Emitting Display)技術(shù),由于高分子有機(jī)材料可以溶于有機(jī)溶劑,因此,POLED顯示器將來可以用印刷技術(shù)來進(jìn)行生產(chǎn),從而可以大大降低生產(chǎn)成本。


作者: eagler8    時(shí)間: 2020-2-19 14:41
OLED結(jié)構(gòu)
OLED器件由基板、陰極、陽極、空穴注入層(HIL)、電子注入層(EIL)、空穴傳輸層(HTL)、電子傳輸層(ETL)、電子阻擋層(EBL)、空穴阻擋層(HBL)、發(fā)光層(EML)等部分構(gòu)成。其中,基板是整個(gè)器件的基礎(chǔ),所有功能層都需要蒸鍍到器件的基板上;通常采用玻璃作為器件的基板,但是如果需要制作可彎曲的柔性O(shè)LED器件,則需要使用其它材料如塑料等作為器件的基板。陽極與器件外加驅(qū)動(dòng)電壓的正極相連,陽極中的空穴會(huì)在外加驅(qū)動(dòng)電壓的驅(qū)動(dòng)下向器件中的發(fā)光層移動(dòng),陽極需要在器件工作時(shí)具有一定的透光性,使得器件內(nèi)部發(fā)出的光能夠被外界觀察到;陽極最常使用的材料是ITO。空穴注入層能夠?qū)ζ骷年枠O進(jìn)行修飾,并可以使來自陽極的空穴順利的注入到空穴傳輸層;空穴傳輸層負(fù)責(zé)將空穴運(yùn)輸?shù)桨l(fā)光層;電子阻擋層會(huì)把來自陰極的電子阻擋在器件的發(fā)光層界面處,增大器件發(fā)光層界面處電子的濃度;發(fā)光層為器件電子和空穴再結(jié)合形成激子然后激子退激發(fā)光的地方;空穴阻擋層會(huì)將來自陽極的空穴阻擋在器件發(fā)光層的界面處,進(jìn)而提高器件發(fā)光層界面處電子和空穴再結(jié)合的概率,增大器件的發(fā)光效率;電子傳輸層負(fù)責(zé)將來自陰極的電子傳輸?shù)狡骷陌l(fā)光層中;電子注入層起對(duì)陰極修飾及將電子傳輸?shù)诫娮觽鬏攲拥淖饔;陰極中的電子會(huì)在器件外加驅(qū)動(dòng)電壓的驅(qū)動(dòng)下向器件的發(fā)光層移動(dòng),然后在發(fā)光層與來自陽極的空穴進(jìn)行再結(jié)合。





作者: eagler8    時(shí)間: 2020-2-19 14:54


OLED特性
OLED技術(shù)之所以能夠獲得廣泛的應(yīng)用,在于其與其它技術(shù)相比,具有以下優(yōu)點(diǎn):
(1)功耗低
與LCD相比,OLED不需要背光源,而背光源在LCD中是比較耗能的一部分,所以O(shè)LED是比較節(jié)能的。例如,24in的AMOLED模塊功耗僅僅為440mw,而24in的多晶硅LCD模塊達(dá)到了605mw。
(2)響應(yīng)速度快
OLED技術(shù)與其他技術(shù)相比,其響應(yīng)速度快,響應(yīng)時(shí)間可以達(dá)到微秒級(jí)別。較高的響應(yīng)速度更好的實(shí)現(xiàn)了運(yùn)動(dòng)的圖像。根據(jù)有關(guān)的數(shù)據(jù)分析,其響應(yīng)速度達(dá)到了液晶顯示器響應(yīng)速度的1000倍左右。
(3)較寬的視角
與其他顯示相比,由于OLED是主動(dòng)發(fā)光的,所以在很大視角范圍內(nèi)畫面是不會(huì)顯示失真的。其上下,左右的視角寬度超過170度。
(4)能實(shí)現(xiàn)高分辨率顯示
大多高分辨率的OLED顯示采用的是有源矩陣也就是AMOLED,它的發(fā)光層可以是吸納26萬真彩色的高分辨率,并且隨著科學(xué)技術(shù)的發(fā)展,其分辨率在以后會(huì)得到更高的提升。
(5)寬溫度特性
與LCD相比,OLED可以在很大的溫度范圍內(nèi)進(jìn)行工作,根據(jù)有關(guān)的技術(shù)分析,溫度在-40攝氏度到80攝氏度都是可以正常運(yùn)行的。這樣就可以降低地域限制,在極寒地帶也可以正常使用。
(6)OLED能夠?qū)崿F(xiàn)軟屏
OLED可以在塑料、樹脂等不同的柔性襯底材料上進(jìn)行生產(chǎn),將有機(jī)層蒸鍍或涂布在塑料基襯上,就可以實(shí)現(xiàn)軟屏。
(7)OLED成品的質(zhì)量比較輕
與其他產(chǎn)品相比,OLED的質(zhì)量比較小,厚度與LCD相比是比較小的,其抗震系數(shù)較高,能夠適應(yīng)較大的加速度,振動(dòng)等比較惡劣的環(huán)境。


作者: eagler8    時(shí)間: 2020-2-19 15:07
OLED優(yōu)勢(shì)
相比傳統(tǒng)的LCD技術(shù),OLED顯示技術(shù)具有明顯的優(yōu)勢(shì),OLED屏幕厚度可以控制在1mm以內(nèi),而LCD屏幕厚度通常在3mm左右,并且重量更加輕盈。OLED屏幕的液態(tài)結(jié)構(gòu)可以保證屏幕的抗衰性能,并且具有LCD不具備的廣視角,可以實(shí)現(xiàn)超大范圍內(nèi)觀看同一塊屏幕,畫面不會(huì)失真。反應(yīng)速度是LCD屏幕的千分之一。并且OLED屏幕耐低溫,可以在-40℃環(huán)境下正常顯示內(nèi)容,發(fā)光效率更高、能耗低、生態(tài)環(huán)保,可以制作成曲面屏,從而給人們帶來不同的視覺沖擊。

OLED是一種利用多層有機(jī)薄膜結(jié)構(gòu)產(chǎn)生電致發(fā)光的器件,它很容易制作,而且只需要低的驅(qū)動(dòng)電壓,這些主要的特征使得OLED在滿足平面顯示器的應(yīng)用上顯得非常突出。OLED顯示屏比LCD更輕薄、亮度高、功耗低、響應(yīng)快、清晰度高、柔性好、發(fā)光效率高,能滿足消費(fèi)者對(duì)顯示技術(shù)的新需求。全球越來越多的顯示器廠家紛紛投入研發(fā),大大的推動(dòng)了OLED的產(chǎn)業(yè)化進(jìn)程。





作者: eagler8    時(shí)間: 2020-2-20 10:13


0.91寸OLED液晶屏顯示模塊參數(shù)
驅(qū)動(dòng)芯片:SSD1306
支持接口:I2C
顯示顏色:白色
高分辨率: 128×32
可視角度:大于160°
工作電壓:3.3V / 5V
模塊大。36 x 12.5(mm)


作者: eagler8    時(shí)間: 2020-2-20 10:39
驅(qū)動(dòng)芯片SSD1306方塊圖




作者: eagler8    時(shí)間: 2020-2-20 10:52
模塊電原理圖




作者: eagler8    時(shí)間: 2020-2-20 11:05





作者: eagler8    時(shí)間: 2020-2-20 11:20


作者: eagler8    時(shí)間: 2020-2-20 11:33
本帖最后由 eagler8 于 2020-2-20 14:23 編輯


OLED模塊引腳說明
GND ------ 地線
VCC ------ 電源
(因?yàn)槟K內(nèi)部自帶穩(wěn)壓,所以3.3~5V供電都是ok的)
SDA ------ I2C 數(shù)據(jù)線(接A4)
SCL  ------ I2C 時(shí)鐘線(接A5)
(可以看到模塊后面有一個(gè)U2芯片,就是用來穩(wěn)壓的)


作者: eagler8    時(shí)間: 2020-2-20 11:48
下載安裝最新庫
https://learn.adafruit.com/monoc ... ibrary-and-examples
其中OLED模塊的專用庫名稱是SSD1306,另外需要配合圖形庫GFX操作
不建議使用NB的U8glib,因?yàn)檫@個(gè)庫強(qiáng)大到哭,所以編譯和下載都太消耗時(shí)間了。





作者: eagler8    時(shí)間: 2020-2-20 11:58



將這些OLED與Arduino一起使用需要安裝兩個(gè)庫:Adafruit_SSD1306和Adafruit_GFX,Adafruit_SSD1306處理與硬件之間的低級(jí)通信,Adafruit_GFX在此基礎(chǔ)上構(gòu)建以添加圖形功能,例如線條,圓圈和文本。

作者: eagler8    時(shí)間: 2020-2-20 12:50
Arduino的Adafruit_GFX庫為我們所有的LCD和OLED顯示器提供了通用語法和圖形功能集。這使Arduino草圖可以輕松地在顯示類型之間進(jìn)行調(diào)整,而不必花太多精力……而且任何新功能,性能改進(jìn)和錯(cuò)誤修復(fù)將立即應(yīng)用于我們完整的彩色顯示屏產(chǎn)品中。該Adafruit_GFX庫可以使用安裝Arduino的庫管理 ...這是首選的和現(xiàn)代的方式。從Arduino的“草圖”菜單中,選擇“包含庫”,然后選擇“管理庫…”。

另有下載庫鏈接  https://codeload.github.com/adaf ... -Library/zip/master





作者: eagler8    時(shí)間: 2020-2-20 14:43
實(shí)驗(yàn)開源測(cè)試代碼


  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之一:點(diǎn)亮SSD1306_128x32 OLED_i2c屏
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  19. #define SCREEN_HEIGHT 32 // OLED display height, in pixels

  20. // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
  21. #define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
  22. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

  23. #define NUMFLAKES     10 // Number of snowflakes in the animation example

  24. #define LOGO_HEIGHT   16
  25. #define LOGO_WIDTH    16
  26. static const unsigned char PROGMEM logo_bmp[] =
  27. { B00000000, B11000000,
  28.   B00000001, B11000000,
  29.   B00000001, B11000000,
  30.   B00000011, B11100000,
  31.   B11110011, B11100000,
  32.   B11111110, B11111000,
  33.   B01111110, B11111111,
  34.   B00110011, B10011111,
  35.   B00011111, B11111100,
  36.   B00001101, B01110000,
  37.   B00011011, B10100000,
  38.   B00111111, B11100000,
  39.   B00111111, B11110000,
  40.   B01111100, B11110000,
  41.   B01110000, B01110000,
  42.   B00000000, B00110000
  43. };

  44. void setup() {
  45.   Serial.begin(9600);

  46.   // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  47.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
  48.     Serial.println(F("SSD1306 allocation failed"));
  49.     for (;;); // Don't proceed, loop forever
  50.   }

  51.   // Show initial display buffer contents on the screen --
  52.   // the library initializes this with an Adafruit splash screen.
  53.   display.display();
  54.   delay(2000); // Pause for 2 seconds

  55.   // Clear the buffer
  56.   display.clearDisplay();

  57.   // Draw a single pixel in white
  58.   display.drawPixel(10, 10, SSD1306_WHITE);

  59.   // Show the display buffer on the screen. You MUST call display() after
  60.   // drawing commands to make them visible on screen!
  61.   display.display();
  62.   delay(2000);
  63.   // display.display() is NOT necessary after every single drawing command,
  64.   // unless that's what you want...rather, you can batch up a bunch of
  65.   // drawing operations and then update the screen all at once by calling
  66.   // display.display(). These examples demonstrate both approaches...

  67.   testdrawline();      // Draw many lines

  68.   testdrawrect();      // Draw rectangles (outlines)

  69.   testfillrect();      // Draw rectangles (filled)

  70.   testdrawcircle();    // Draw circles (outlines)

  71.   testfillcircle();    // Draw circles (filled)

  72.   testdrawroundrect(); // Draw rounded rectangles (outlines)

  73.   testfillroundrect(); // Draw rounded rectangles (filled)

  74.   testdrawtriangle();  // Draw triangles (outlines)

  75.   testfilltriangle();  // Draw triangles (filled)

  76.   testdrawchar();      // Draw characters of the default font

  77.   testdrawstyles();    // Draw 'stylized' characters

  78.   testscrolltext();    // Draw scrolling text

  79.   testdrawbitmap();    // Draw a small bitmap image

  80.   // Invert and restore display, pausing in-between
  81.   display.invertDisplay(true);
  82.   delay(1000);
  83.   display.invertDisplay(false);
  84.   delay(1000);

  85.   testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps
  86. }

  87. void loop() {
  88. }

  89. void testdrawline() {
  90.   int16_t i;

  91.   display.clearDisplay(); // Clear display buffer

  92.   for (i = 0; i < display.width(); i += 4) {
  93.     display.drawLine(0, 0, i, display.height() - 1, SSD1306_WHITE);
  94.     display.display(); // Update screen with each newly-drawn line
  95.     delay(1);
  96.   }
  97.   for (i = 0; i < display.height(); i += 4) {
  98.     display.drawLine(0, 0, display.width() - 1, i, SSD1306_WHITE);
  99.     display.display();
  100.     delay(1);
  101.   }
  102.   delay(250);

  103.   display.clearDisplay();

  104.   for (i = 0; i < display.width(); i += 4) {
  105.     display.drawLine(0, display.height() - 1, i, 0, SSD1306_WHITE);
  106.     display.display();
  107.     delay(1);
  108.   }
  109.   for (i = display.height() - 1; i >= 0; i -= 4) {
  110.     display.drawLine(0, display.height() - 1, display.width() - 1, i, SSD1306_WHITE);
  111.     display.display();
  112.     delay(1);
  113.   }
  114.   delay(250);

  115.   display.clearDisplay();

  116.   for (i = display.width() - 1; i >= 0; i -= 4) {
  117.     display.drawLine(display.width() - 1, display.height() - 1, i, 0, SSD1306_WHITE);
  118.     display.display();
  119.     delay(1);
  120.   }
  121.   for (i = display.height() - 1; i >= 0; i -= 4) {
  122.     display.drawLine(display.width() - 1, display.height() - 1, 0, i, SSD1306_WHITE);
  123.     display.display();
  124.     delay(1);
  125.   }
  126.   delay(250);

  127.   display.clearDisplay();

  128.   for (i = 0; i < display.height(); i += 4) {
  129.     display.drawLine(display.width() - 1, 0, 0, i, SSD1306_WHITE);
  130.     display.display();
  131.     delay(1);
  132.   }
  133.   for (i = 0; i < display.width(); i += 4) {
  134.     display.drawLine(display.width() - 1, 0, i, display.height() - 1, SSD1306_WHITE);
  135.     display.display();
  136.     delay(1);
  137.   }

  138.   delay(2000); // Pause for 2 seconds
  139. }

  140. void testdrawrect(void) {
  141.   display.clearDisplay();

  142.   for (int16_t i = 0; i < display.height() / 2; i += 2) {
  143.     display.drawRect(i, i, display.width() - 2 * i, display.height() - 2 * i, SSD1306_WHITE);
  144.     display.display(); // Update screen with each newly-drawn rectangle
  145.     delay(1);
  146.   }

  147.   delay(2000);
  148. }

  149. void testfillrect(void) {
  150.   display.clearDisplay();

  151.   for (int16_t i = 0; i < display.height() / 2; i += 3) {
  152.     // The INVERSE color is used so rectangles alternate white/black
  153.     display.fillRect(i, i, display.width() - i * 2, display.height() - i * 2, SSD1306_INVERSE);
  154.     display.display(); // Update screen with each newly-drawn rectangle
  155.     delay(1);
  156.   }

  157.   delay(2000);
  158. }

  159. void testdrawcircle(void) {
  160.   display.clearDisplay();

  161.   for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 2) {
  162.     display.drawCircle(display.width() / 2, display.height() / 2, i, SSD1306_WHITE);
  163.     display.display();
  164.     delay(1);
  165.   }

  166.   delay(2000);
  167. }

  168. void testfillcircle(void) {
  169.   display.clearDisplay();

  170.   for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 3) {
  171.     // The INVERSE color is used so circles alternate white/black
  172.     display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);
  173.     display.display(); // Update screen with each newly-drawn circle
  174.     delay(1);
  175.   }

  176.   delay(2000);
  177. }

  178. void testdrawroundrect(void) {
  179.   display.clearDisplay();

  180.   for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
  181.     display.drawRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
  182.                           display.height() / 4, SSD1306_WHITE);
  183.     display.display();
  184.     delay(1);
  185.   }

  186.   delay(2000);
  187. }

  188. void testfillroundrect(void) {
  189.   display.clearDisplay();

  190.   for (int16_t i = 0; i < display.height() / 2 - 2; i += 2) {
  191.     // The INVERSE color is used so round-rects alternate white/black
  192.     display.fillRoundRect(i, i, display.width() - 2 * i, display.height() - 2 * i,
  193.                           display.height() / 4, SSD1306_INVERSE);
  194.     display.display();
  195.     delay(1);
  196.   }

  197.   delay(2000);
  198. }

  199. void testdrawtriangle(void) {
  200.   display.clearDisplay();

  201.   for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 5) {
  202.     display.drawTriangle(
  203.       display.width() / 2  , display.height() / 2 - i,
  204.       display.width() / 2 - i, display.height() / 2 + i,
  205.       display.width() / 2 + i, display.height() / 2 + i, SSD1306_WHITE);
  206.     display.display();
  207.     delay(1);
  208.   }

  209.   delay(2000);
  210. }

  211. void testfilltriangle(void) {
  212.   display.clearDisplay();

  213.   for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 5) {
  214.     // The INVERSE color is used so triangles alternate white/black
  215.     display.fillTriangle(
  216.       display.width() / 2  , display.height() / 2 - i,
  217.       display.width() / 2 - i, display.height() / 2 + i,
  218.       display.width() / 2 + i, display.height() / 2 + i, SSD1306_INVERSE);
  219.     display.display();
  220.     delay(1);
  221.   }

  222.   delay(2000);
  223. }

  224. void testdrawchar(void) {
  225.   display.clearDisplay();

  226.   display.setTextSize(1);      // Normal 1:1 pixel scale
  227.   display.setTextColor(SSD1306_WHITE); // Draw white text
  228.   display.setCursor(0, 0);     // Start at top-left corner
  229.   display.cp437(true);         // Use full 256 char 'Code Page 437' font

  230.   // Not all the characters will fit on the display. This is normal.
  231.   // Library will draw what it can and the rest will be clipped.
  232.   for (int16_t i = 0; i < 256; i++) {
  233.     if (i == '\n') display.write(' ');
  234.     else          display.write(i);
  235.   }

  236.   display.display();
  237.   delay(2000);
  238. }

  239. void testdrawstyles(void) {
  240.   display.clearDisplay();

  241.   display.setTextSize(1);             // Normal 1:1 pixel scale
  242.   display.setTextColor(SSD1306_WHITE);        // Draw white text
  243.   display.setCursor(0, 0);            // Start at top-left corner
  244.   display.println(F("Hello, world!"));

  245.   display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
  246.   display.println(3.141592);

  247.   display.setTextSize(2);             // Draw 2X-scale text
  248.   display.setTextColor(SSD1306_WHITE);
  249.   display.print(F("0x")); display.println(0xDEADBEEF, HEX);

  250.   display.display();
  251.   delay(2000);
  252. }

  253. void testscrolltext(void) {
  254.   display.clearDisplay();

  255.   display.setTextSize(2); // Draw 2X-scale text
  256.   display.setTextColor(SSD1306_WHITE);
  257.   display.setCursor(10, 0);
  258.   display.println(F("scroll"));
  259.   display.display();      // Show initial text
  260.   delay(100);

  261.   // Scroll in various directions, pausing in-between:
  262.   display.startscrollright(0x00, 0x0F);
  263.   delay(2000);
  264.   display.stopscroll();
  265.   delay(1000);
  266.   display.startscrollleft(0x00, 0x0F);
  267.   delay(2000);
  268.   display.stopscroll();
  269.   delay(1000);
  270.   display.startscrolldiagright(0x00, 0x07);
  271.   delay(2000);
  272.   display.startscrolldiagleft(0x00, 0x07);
  273.   delay(2000);
  274.   display.stopscroll();
  275.   delay(1000);
  276. }

  277. void testdrawbitmap(void) {
  278.   display.clearDisplay();

  279.   display.drawBitmap(
  280.     (display.width()  - LOGO_WIDTH ) / 2,
  281.     (display.height() - LOGO_HEIGHT) / 2,
  282.     logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);
  283.   display.display();
  284.   delay(1000);
  285. }

  286. #define XPOS   0 // Indexes into the 'icons' array in function below
  287. #define YPOS   1
  288. #define DELTAY 2

  289. void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  290.   int8_t f, icons[NUMFLAKES][3];

  291.   // Initialize 'snowflake' positions
  292.   for (f = 0; f < NUMFLAKES; f++) {
  293.     icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
  294.     icons[f][YPOS]   = -LOGO_HEIGHT;
  295.     icons[f][DELTAY] = random(1, 6);
  296.     Serial.print(F("x: "));
  297.     Serial.print(icons[f][XPOS], DEC);
  298.     Serial.print(F(" y: "));
  299.     Serial.print(icons[f][YPOS], DEC);
  300.     Serial.print(F(" dy: "));
  301.     Serial.println(icons[f][DELTAY], DEC);
  302.   }

  303.   for (;;) { // Loop forever...
  304.     display.clearDisplay(); // Clear the display buffer

  305.     // Draw each snowflake:
  306.     for (f = 0; f < NUMFLAKES; f++) {
  307.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE);
  308.     }

  309.     display.display(); // Show the display buffer on the screen
  310.     delay(200);        // Pause for 1/10 second

  311.     // Then update coordinates of each flake...
  312.     for (f = 0; f < NUMFLAKES; f++) {
  313.       icons[f][YPOS] += icons[f][DELTAY];
  314.       // If snowflake is off the bottom of the screen...
  315.       if (icons[f][YPOS] >= display.height()) {
  316.         // Reinitialize to a random position, just off the top
  317.         icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());
  318.         icons[f][YPOS]   = -LOGO_HEIGHT;
  319.         icons[f][DELTAY] = random(1, 6);
  320.       }
  321.     }
  322.   }
  323. }
復(fù)制代碼




作者: eagler8    時(shí)間: 2020-2-20 14:55


作者: eagler8    時(shí)間: 2020-2-20 15:24
  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之二:自動(dòng)計(jì)數(shù)器
  13. */

  14. #include <Arduino.h>
  15. #include <U8x8lib.h>

  16. U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE);


  17. int i = 0;
  18. void setup(void)
  19. {
  20.   u8x8.begin();
  21.   u8x8.setPowerSave(0);
  22. }

  23. void loop(void)
  24. {
  25.   
  26.   //u8x8.setFont(u8x8_font_chroma48medium8_r); //小字體,細(xì)
  27.   //u8x8.setFont(u8x8_font_pxplustandynewtv_r); //小字體,粗
  28.   //u8x8.setFont(u8x8_font_lucasarts_scumm_subtitle_r_2x2_r); //兩行字體,細(xì)
  29.   u8x8.setFont(u8x8_font_px437wyse700a_2x2_r); //兩行字體,粗

  30.   
  31.   String s = "PA:" ;
  32.   String s2;
  33.   s2 = s + i;
  34.   u8x8.drawString(0,0,s2.c_str());

  35.   s = "TL:";
  36.   s2 = s + (i * 2);

  37.   u8x8.drawString(0,2,s2.c_str());

  38.   delay(50);
  39.   i ++;
  40. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-20 15:25


作者: eagler8    時(shí)間: 2020-2-20 16:09
  1. /*
  2.     【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.     實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.     安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.     安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.     實(shí)驗(yàn)接線方法
  7.     oled模塊    Ardunio Uno
  8.     GND---------GND接地線
  9.     VCC---------5V 接電源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     實(shí)驗(yàn)之三:顯示英文 Hello, world!
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)
  21. #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  22. #endif

  23. void setup()   {
  24.   Serial.begin(9600);

  25.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  26.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  27.   // init done

  28.   display.clearDisplay();

  29.   //英文字符顯示
  30.   display.setTextSize(1);             //設(shè)置字體大小
  31.   display.setTextColor(WHITE);        //設(shè)置字體顏色白色
  32.   display.setCursor(0, 0);            //設(shè)置字體的起始位置
  33.   display.println("Hello, world!");   //輸出字符并換行

  34.   display.setTextColor(BLACK, WHITE); //設(shè)置字體黑色,字體背景白色
  35.   display.println(3.141592);          //輸出數(shù)字并換行

  36.   display.setTextSize(2);             //設(shè)置字體大小
  37.   display.setTextColor(WHITE);        //設(shè)置字體白色
  38.   display.print("0x");                //輸出字符
  39.   display.println(0xDEADBEEF, HEX);   //輸出為ASCII編碼的十六進(jìn)制
  40.   //display.display();                  //顯示以上
  41. }

  42. void loop() {

  43. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-20 16:14


作者: eagler8    時(shí)間: 2020-2-21 08:59
I2C驅(qū)動(dòng)的128x32 OLED
I2C (Inter-Integrated Circuit) 集成電路總線是I2CBus的簡(jiǎn)稱,是一種串行通信總線,使用多主從架構(gòu)。飛利浦公司在1980年代為了讓主板,嵌入式系統(tǒng)或手機(jī)用以連接低速周邊設(shè)備而發(fā)展。 I2C的正確讀法為"I-squared-C"。I2C只使用兩條雙向漏極開路(Open Drain): 串行數(shù)據(jù)SDA及串行時(shí)鐘頻率SCL總線,且利用上拉電阻將兩條總線的電位上拉。I2C允許相當(dāng)大的工作電壓范圍,但典型的電壓準(zhǔn)位為+3.3V或+5V. I2C的參考設(shè)計(jì)使用一個(gè)7bit長度的地址空間但保留了16個(gè)地址,所以在一組總線最多可和112個(gè)節(jié)點(diǎn)通信。

常見的I2C總線依傳輸速率的不同而有不同的模式: 標(biāo)準(zhǔn)模式100 Kbit/s,低速模式10 Kbit/s,但時(shí)鐘頻率可被允許下降至零,這代表可以暫停通信。而新一代的I2C總線可以和更多的節(jié)點(diǎn)(支持10比特長度的地址空間)以更快的速率通信: 快速模式400 Kbit/s,高速模式3.4 Mbit/s。在單片機(jī)中使用I2C通信協(xié)議的時(shí)候,需要編寫程序去模擬I2C總線的通信,對(duì)于I2C通信協(xié)議需要補(bǔ)充的一點(diǎn)是: 在實(shí)際通信傳輸數(shù)據(jù)時(shí),SCL總線拉高的時(shí)間只要大于1.5μs都能夠正常傳輸數(shù)據(jù)。

這塊128x32 OLED的裸屏是由SSD1306驅(qū)動(dòng)的,該芯片專為共陰極 OLED 面板設(shè)計(jì),SSD1306 中嵌入了對(duì)比度控制器,顯示 RAM 和晶振,并因此減少了外部器件和功耗,有 256級(jí)亮度控制,數(shù)據(jù)/命令的發(fā)送有三種接口可選擇: 6800/8000串口、I2C接口或 SPI 接口。適用于多數(shù)簡(jiǎn)單的應(yīng)用,移動(dòng)電話的屏顯, MP3播放器和計(jì)算器等。

SSD1306本身支持多種總線驅(qū)動(dòng)方式包括SPI以及并口等,通過芯片的相應(yīng)IO口拉低拉高來選擇哪一種接口。模塊通過電阻將相應(yīng)IO口配置固化使用了I2C接口方式,但可能你買到的同樣的驅(qū)動(dòng)芯片的模塊會(huì)采用其他接口。使用I2C接口時(shí), SSD1306允許有最多兩個(gè)7位的I2C地址,同樣通過相應(yīng)的IO口拉低拉高來切換, 一般默認(rèn)是0x3C。在有些模塊(不是所有,有些PCB沒有預(yù)留)的背面,可以看到I2C地址選項(xiàng)提示,需要改變模塊I2C地址時(shí)只需要把提示位置的電阻取下焊接到另外一端即可。要注意的是版上的I2C地址是加上了第零位讀寫位后的數(shù)值。





作者: eagler8    時(shí)間: 2020-2-21 09:22
本帖最后由 eagler8 于 2020-2-21 09:25 編輯
  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之四:輸出直線和文字以及文字滾動(dòng)
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)

  21. #endif

  22. void setup() {
  23.   Serial.begin(115200);

  24.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  25.   display.display();
  26.   delay(2000);
  27. }

  28. void loop() {
  29.   display.clearDisplay();
  30.   testdrawline();
  31.   delay(1000);

  32.   display.clearDisplay();
  33.   testdrawchar();
  34.   delay(1000);

  35.   display.clearDisplay();
  36.   testdrawchar2();
  37.   delay(2000);

  38.   display.clearDisplay();
  39.   testscrolltext();
  40.   delay(2000);
  41. }

  42. void testdrawline() {
  43.   for (int16_t i = 0; i < display.width(); i += 2) {
  44.     // x1 y1 x2 y2
  45.     display.drawLine(i, 0, i, display.height(), WHITE);
  46.     display.display();
  47.     delay(5);
  48.   }
  49.   delay(250);
  50.   display.clearDisplay();
  51.   for (int16_t i = 0; i < display.height(); i += 2) {
  52.     display.drawLine(0, i, display.width(), i, WHITE);
  53.     display.display();
  54.     delay(5);
  55.   }
  56. }

  57. void testdrawchar(void) {
  58.   display.setTextSize(1);
  59.   display.setTextColor(WHITE);
  60.   display.setCursor(0, 0);

  61.   for (uint8_t i = 0; i < 168; i++) {
  62.     if (i == '\n') continue;
  63.     display.write(i);
  64.     if ((i > 0) && (i % 21 == 0))
  65.       display.println();
  66.   }
  67.   display.display();
  68.   delay(1);
  69. }

  70. void testdrawchar2(void) {
  71.   display.setTextSize(2);
  72.   display.setTextColor(WHITE);

  73.   uint8_t j = 47;
  74.   for (uint8_t l = 0; l < 4; l++) {
  75.     display.setCursor(0, l * 16);
  76.     for (uint8_t i = 0; i < 10; i++) {
  77.       j++;
  78.       if (j == '\n') continue;
  79.       display.write(j);
  80.       display.display();
  81.       delay(5);
  82.     }
  83.   }
  84. }

  85. void testscrolltext(void) {
  86.   testdrawchar();
  87.   delay(5);
  88.   // startscrollright(uint8_t start, uint8_t stop)
  89.   // Activate a scroll to the right for rows start through stop The display is 16 rows tall. To scroll the whole display, run: display.scrollright(0x00, 0x0F)
  90.   // Parameters: start First row to scroll, stop  Last row to scroll
  91.   display.startscrollright(0x00, 0x02);
  92.   delay(1000);
  93.   display.startscrollright(0x03, 0x05);
  94.   delay(1000);
  95.   display.stopscroll();
  96.   delay(1000);
  97.   // Activate a scroll to the left for rows start through stop The display is 16 rows tall. To scroll the whole display, run: display.startscrollright(0x00, 0x0F)
  98.   display.startscrollleft(0x00, 0x05);
  99.   delay(2000);
  100.   display.startscrollleft(0x00, 0x0F);
  101.   delay(2000);
  102.   display.stopscroll();
  103.   delay(1000);
  104.   // Activate a scroll to the upper right for rows start through stop The display is 16 rows tall.
  105.   display.startscrolldiagright(0x00, 0x03);
  106.   delay(2000);
  107.   display.startscrolldiagright(0x00, 0x07);
  108.   delay(2000);
  109.   // Activate a scroll to the upper left for rows start through stop The display is 16 rows tall.
  110.   display.startscrolldiagleft(0x00, 0x03);
  111.   delay(2000);
  112.   display.startscrolldiagleft(0x00, 0x07);
  113.   delay(2000);
  114.   display.stopscroll();
  115. }
復(fù)制代碼


作者: eagler8    時(shí)間: 2020-2-21 09:40


作者: eagler8    時(shí)間: 2020-2-21 09:59
  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.   安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之五:輸出輸出位圖(及漢字位圖)——實(shí)驗(yàn)室
  13. */

  14. #include <SPI.h>
  15. #include <Wire.h>
  16. #include <Adafruit_GFX.h>
  17. #include <Adafruit_SSD1306.h>

  18. #define OLED_RESET 4
  19. Adafruit_SSD1306 display(OLED_RESET);

  20. #if (SSD1306_LCDHEIGHT != 32)
  21. #endif

  22. #define NUMFLAKES 5
  23. #define XPOS 0
  24. #define YPOS 1
  25. #define DELTAY 2
  26. #define LOGO16_GLCD_HEIGHT 16
  27. #define LOGO16_GLCD_WIDTH  16
  28. static const unsigned char PROGMEM logo16_glcd_bmp[] =
  29. { B00000000, B11000000,
  30.   B00000001, B11000000,
  31.   B00000001, B11000000,
  32.   B00000011, B11100000,
  33.   B11110011, B11100000,
  34.   B11111110, B11111000,
  35.   B01111110, B11111111,
  36.   B00110011, B10011111,
  37.   B00011111, B11111100,
  38.   B00001101, B01110000,
  39.   B00011011, B10100000,
  40.   B00111111, B11100000,
  41.   B00111111, B11110000,
  42.   B01111100, B11110000,
  43.   B01110000, B01110000,
  44.   B00000000, B00110000 };

  45. //中文:實(shí)  
  46. static const unsigned char PROGMEM str_1[] = {   
  47. 0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x88,0x84,0x04,0x80,0x04,0x80,0x10,0x80,  
  48. 0x08,0x80,0x08,0x80,0xFF,0xFE,0x01,0x40,0x02,0x20,0x04,0x10,0x18,0x08,0x60,0x04  
  49. };

  50. //中文:驗(yàn)  
  51. static const unsigned char PROGMEM str_2[] = {   
  52. 0x00,0x20,0xF8,0x20,0x08,0x50,0x48,0x50,0x48,0x88,0x49,0x04,0x4A,0xFA,0x7C,0x00,  
  53. 0x04,0x44,0x04,0x24,0x1D,0x24,0xE4,0xA8,0x44,0x88,0x04,0x10,0x2B,0xFE,0x10,0x00  
  54. };

  55. //中文:室  
  56. static const unsigned char PROGMEM str_3[] = {   
  57. 0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x80,0x04,0x3F,0xF8,0x04,0x00,0x08,0x20,  
  58. 0x1F,0xF0,0x01,0x10,0x01,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00  
  59. };

  60. void setup() {
  61.   Serial.begin(115200);

  62.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)
  63.   display.display();
  64.   delay(2000);
  65. }

  66. void loop() {
  67.   display.clearDisplay();
  68.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, WHITE);
  69.   display.display();
  70.   delay(2000);
  71.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, BLACK);
  72.   display.display();
  73.   delay(500);
  74.   display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, WHITE);
  75.   display.display();
  76.   delay(500);
  77.   display.clearDisplay();
  78.   display.drawBitmap(0, 0, str_1, 16, 16, WHITE);
  79.   display.drawBitmap(16, 0, str_2, 16, 16, WHITE);
  80.   display.drawBitmap(32, 0, str_3, 16, 16, WHITE);
  81.   display.display();
  82.   delay(2000);
  83.   display.clearDisplay();
  84.   testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
  85. }

  86. void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
  87.   uint8_t icons[NUMFLAKES][3];

  88.   // initialize
  89.   for (uint8_t f=0; f< NUMFLAKES; f++) {
  90.     icons[f][XPOS] = random(display.width());
  91.     icons[f][YPOS] = 0;
  92.     icons[f][DELTAY] = random(8) + 2;
  93.    
  94.     Serial.print("x: ");
  95.     Serial.print(icons[f][XPOS], DEC);
  96.     Serial.print(" y: ");
  97.     Serial.print(icons[f][YPOS], DEC);
  98.     Serial.print(" dy: ");
  99.     Serial.println(icons[f][DELTAY], DEC);
  100.   }

  101.   while (1) {
  102.     // draw each icon
  103.     for (uint8_t f=0; f< NUMFLAKES; f++) {
  104.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
  105.     }
  106.     display.display();
  107.     delay(200);
  108.    
  109.     // then erase it + move it
  110.     for (uint8_t f=0; f< NUMFLAKES; f++) {
  111.       display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
  112.       // move it
  113.       icons[f][YPOS] += icons[f][DELTAY];
  114.       // if its gone, reinit
  115.       if (icons[f][YPOS] > display.height()) {
  116.         icons[f][XPOS] = random(display.width());
  117.         icons[f][YPOS] = 0;
  118.         icons[f][DELTAY] = random(8) + 2;
  119.       }
  120.     }
  121.    }
  122. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-21 10:06


作者: eagler8    時(shí)間: 2020-2-21 11:51
  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   實(shí)驗(yàn)接線方法
  5.   oled模塊    Ardunio Uno
  6.   GND---------GND接地線
  7.   VCC---------5V 接電源
  8.   SDA---------A4
  9.   SCL ------- A5
  10.   實(shí)驗(yàn)之八:查詢I2C地址(這里為0x3c)
  11. */

  12. #include <Wire.h>  
  13.    
  14. void setup(){  
  15.   Wire.begin();  
  16.   Serial.begin(9600);  
  17.   Serial.println("\nI2C Scanner");  
  18. }  
  19. void loop(){  
  20.   byte error, address;  
  21.   int nDevices;  
  22.   Serial.println("Scanning...");  
  23.   nDevices = 0;  
  24.   for (address = 1; address < 127; address++ ){  
  25.     // The i2c_scanner uses the return value of  
  26.     // the Write.endTransmisstion to see if  
  27.     // a device did acknowledge to the address.  
  28.     Wire.beginTransmission(address);  
  29.     error = Wire.endTransmission();  
  30.     if (error == 0){  
  31.       Serial.print("I2C device found at address 0x");  
  32.       if (address < 16)  
  33.         Serial.print("0");  
  34.       Serial.print(address, HEX);  
  35.       Serial.println(" !");  
  36.       nDevices++;  
  37.     }else if (error == 4){  
  38.       Serial.print("Unknow error at address 0x");  
  39.       if (address < 16)  
  40.         Serial.print("0");  
  41.       Serial.println(address, HEX);  
  42.     }  
  43.   }  
  44.   if (nDevices == 0)  
  45.     Serial.println("No I2C devices found\n");  
  46.   else  
  47.     Serial.println("done\n");  
  48.   delay(5000); // wait 5 seconds for next scan  
  49. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-21 11:55
上傳到arduino板上,打開串口可查看地址




作者: eagler8    時(shí)間: 2020-2-21 12:45
  1. /*
  2.     【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.     實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.     安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.     安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.     實(shí)驗(yàn)接線方法
  7.     oled模塊    Ardunio Uno
  8.     GND---------GND接地線
  9.     VCC---------5V 接電源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     實(shí)驗(yàn)之九:綜合測(cè)試,顯示線段、圖形與英文字母數(shù)字
  13. */

  14. #include <Wire.h>
  15. #include <Adafruit_GFX.h>
  16. #include <Adafruit_SSD1306.h>

  17. #define OLED_RESET 4
  18. Adafruit_SSD1306 display(OLED_RESET);

  19. #define NUMFLAKES 10
  20. #define XPOS 0
  21. #define YPOS 1
  22. #define DELTAY 2

  23. #define LOGO16_GLCD_HEIGHT 16
  24. #define LOGO16_GLCD_WIDTH  16

  25. #if (SSD1306_LCDHEIGHT != 32)
  26. #error("Height incorrect, please fix Adafruit_SSD1306.h!");
  27. #endif

  28. void setup()        //初始化
  29. {
  30.   Serial.begin(9600);
  31.   delay(500);

  32.   // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  33.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32) ,0x3C為I2C協(xié)議通訊地址,需根據(jù)實(shí)際情況更改
  34. }
  35. void loop()
  36. {
  37.   test_SSD1306();     //調(diào)用測(cè)試函數(shù)
  38. }

  39. void test_SSD1306(void)   //測(cè)試函數(shù)
  40. {
  41.   /*-----------------點(diǎn)亮全屏檢測(cè)屏幕是否有不正常點(diǎn)亮現(xiàn)象-----------------------------*/

  42.   display.fillScreen(WHITE);
  43.   display.display();
  44.   delay(2000);

  45.   /*------------------------------畫點(diǎn) 點(diǎn)坐標(biāo)(64,16)-------------------------------*/
  46.   display.clearDisplay();   // clears the screen and buffer
  47.   display.drawPixel(64, 16, WHITE);
  48.   display.display();
  49.   delay(2000);

  50.   /*-------------------------- 畫線 從(0,0)到(128,32)----------------------------*/
  51.   display.clearDisplay();   // clears the screen and buffer
  52.   display.drawLine(0, 0, 128, 32, WHITE);
  53.   display.display();
  54.   delay(2000);
  55.   display.clearDisplay();   // clears the screen and buffer
  56.   display.drawLine(0, 32, 128, 0, WHITE);
  57.   display.display();
  58.   delay(2000);

  59.   /*--------------.畫空心矩形  左上角坐標(biāo)(x0,y0)  右下角坐標(biāo)(x1,y1)------------------*/
  60.   display.clearDisplay();   // clears the screen and buffer
  61.   display.drawRect(0, 0, 128, 32, WHITE);
  62.   display.display();
  63.   delay(2000);

  64.   /*-----------------------實(shí)心矩形---------------------------*/
  65.   display.clearDisplay();   // clears the screen and buffer
  66.   display.fillRect(0, 0, 128, 32, WHITE);
  67.   display.display();
  68.   delay(2000);

  69.   /*------------------------畫空心圓-------------------------*/
  70.   display.clearDisplay();   // clears the screen and buffer
  71.   display.drawCircle(64, 16, 13, WHITE);
  72.   display.display();
  73.   delay(2000);

  74.   /*----------------------畫實(shí)心圓---------------------------*/
  75.   display.clearDisplay();   // clears the screen and buffer
  76.   display.fillCircle(64, 16, 13, WHITE);
  77.   display.display();
  78.   delay(2000);

  79.   /*---------------------畫空心三角形-------------------------*/
  80.   display.clearDisplay();   // clears the screen and buffer
  81.   display.drawTriangle(32, 0, 0, 30, 128, 30, WHITE);
  82.   display.display();
  83.   delay(2000);

  84.   /*------------------------畫實(shí)心三角形-----------------------*/
  85.   display.clearDisplay();   // clears the screen and buffer
  86.   display.fillTriangle(32, 0, 0, 30, 128, 30, WHITE);
  87.   display.display();
  88.   delay(2000);

  89.   /*-----------------------空心圓角矩形------------------------*/
  90.   display.clearDisplay();   // clears the screen and buffer
  91.   display.drawRoundRect(0, 0, 128, 32, 5, WHITE);
  92.   display.display();
  93.   delay(2000);

  94.   /*----------------------畫實(shí)心圓角矩形-----------------------*/
  95.   display.clearDisplay();   // clears the screen and buffer
  96.   display.fillRoundRect(0, 0, 128, 32, 5, WHITE);
  97.   display.display();
  98.   delay(2000);

  99.   /*------------------------顯示英文 數(shù)字---------------------*/
  100.   display.clearDisplay();   // clears the screen and buffer
  101.   display.setTextSize(1); //選擇字號(hào)
  102.   display.setTextColor(WHITE);  //字體顏色
  103.   display.setCursor(0, 0);  //起點(diǎn)坐標(biāo)
  104.   display.println("Hello, Arduino!");
  105.   display.setTextColor(BLACK, WHITE); // 'inverted' text
  106.   display.println(3.141592);
  107.   display.setTextSize(2);
  108.   display.setTextColor(WHITE);
  109.   display.print("0x"); display.println(0xDEADBEEF, HEX);
  110.   display.display();
  111.   delay(2000);
  112. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-21 13:24
  1. /*
  2.     【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.     實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.     安裝庫:IDE—工具—管理庫—搜索U8g2lib—安裝
  5.    
  6.     實(shí)驗(yàn)接線方法
  7.     oled模塊    Ardunio Uno
  8.     GND---------GND接地線
  9.     VCC---------5V 接電源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     實(shí)驗(yàn)之十:綜合測(cè)試,顯示電子鐘
  13. */

  14. #include <Arduino.h>
  15. #include <U8g2lib.h>
  16. #include <Wire.h>

  17. //iic驅(qū)動(dòng)方式
  18. U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

  19. void setup(void) {
  20.   u8g2.begin();
  21. }

  22. uint8_t m = 24;

  23. void loop(void) {
  24.   char m_str[3];
  25.   strcpy(m_str, u8x8_u8toa(m, 2));    /* convert m to a string with two digits */
  26.   u8g2.firstPage();
  27.   do {
  28.     u8g2.setFont(u8g2_font_logisoso62_tn);
  29.     u8g2.drawStr(0, 63, "6");
  30.     u8g2.drawStr(33, 63, ":");
  31.     u8g2.drawStr(50, 63, m_str);
  32.   } while ( u8g2.nextPage() );
  33.   delay(1000);
  34.   m++;
  35.   if ( m == 60 )
  36.     m = 0;
  37. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-21 13:31
相關(guān)函數(shù)
u8g2.begin():U8g2構(gòu)造函數(shù)。
u8g2.clean():清除屏幕顯示,清除緩沖區(qū),光標(biāo)回到原點(diǎn)位置。
u8g2.setFont():設(shè)置字體。
u8g2.drawStr():繪制字符串。
u8g2.firstPage()/nextPage():循環(huán)刷新顯示。

U8g2庫提供的API函數(shù)有很多,其他的介紹可以參考官方手冊(cè)。
https://github.com/olikraus/u8g2/wiki/u8g2reference


作者: eagler8    時(shí)間: 2020-2-21 13:37


作者: eagler8    時(shí)間: 2020-2-21 13:49
  1. /*
  2.     【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.     實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.     安裝庫:IDE—工具—管理庫—搜索Adafruit_SSD1306—安裝
  5.     安裝庫:IDE—工具—管理庫—搜索Adafruit_GFX—安裝
  6.     實(shí)驗(yàn)接線方法
  7.     oled模塊    Ardunio Uno
  8.     GND---------GND接地線
  9.     VCC---------5V 接電源
  10.     SDA---------A4
  11.     SCL ------- A5
  12.     實(shí)驗(yàn)之十一:綜合測(cè)試,中文顯示
  13. */

  14. #include <Wire.h>
  15. #include <Adafruit_GFX.h>
  16. #include <Adafruit_SSD1306.h>

  17. #define OLED_RESET     4
  18. Adafruit_SSD1306 display(128, 32, &Wire, OLED_RESET);

  19. //取16X16漢字字模 逐行式 順向高位在前
  20. static const unsigned char PROGMEM str1[] =
  21. {
  22.   0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x3F, 0xF8, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08,
  23.   0x21, 0x08, 0x21, 0x08, 0x3F, 0xF8, 0x21, 0x08, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00
  24. };/*"中",0*/

  25. static const unsigned char PROGMEM str2[] =
  26. {
  27.   0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFE, 0x10, 0x10, 0x10, 0x10, 0x08, 0x20, 0x08, 0x20,
  28.   0x04, 0x40, 0x02, 0x80, 0x01, 0x00, 0x02, 0x80, 0x04, 0x40, 0x08, 0x20, 0x30, 0x18, 0xC0, 0x06
  29. };/*"文",1*/
  30. static const unsigned char PROGMEM str3[] =
  31. {
  32.   0x00, 0x00, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0, 0x10, 0x10, 0x10, 0x10, 0x1F, 0xF0,
  33.   0x04, 0x40, 0x44, 0x44, 0x24, 0x44, 0x14, 0x48, 0x14, 0x50, 0x04, 0x40, 0xFF, 0xFE, 0x00, 0x00
  34. };/*"顯",2*/

  35. static const unsigned char PROGMEM str4[] =
  36. {
  37.   0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x01, 0x00,
  38.   0x01, 0x00, 0x11, 0x10, 0x11, 0x08, 0x21, 0x04, 0x41, 0x02, 0x81, 0x02, 0x05, 0x00, 0x02, 0x00
  39. };/*"示",3*/

  40. void setup() {
  41.   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  42.   display.setTextColor(WHITE);//開像素點(diǎn)發(fā)光
  43.   display.clearDisplay();//清屏

  44.   display.setTextSize(2); //設(shè)置字體大小
  45.   display.setCursor(0, 0);//設(shè)置顯示位置
  46.   display.println("-TonyCode-");//輸出字符

  47.   display.drawBitmap(32, 16, str1, 16, 16, 1); //畫出字符對(duì)應(yīng)點(diǎn)陣數(shù)據(jù)
  48.   display.drawBitmap(48, 16, str2, 16, 16, 1); //畫出字符對(duì)應(yīng)點(diǎn)陣數(shù)據(jù)
  49.   display.drawBitmap(64, 16, str3, 16, 16, 1); //畫出字符對(duì)應(yīng)點(diǎn)陣數(shù)據(jù)
  50.   display.drawBitmap(80, 16, str4, 16, 16, 1); //畫出字符對(duì)應(yīng)點(diǎn)陣數(shù)據(jù)
  51.   display.display();//開顯示

  52. }

  53. void loop() {

  54. }
復(fù)制代碼



作者: eagler8    時(shí)間: 2020-2-21 15:49


作者: eagler8    時(shí)間: 2020-2-22 08:21


作者: eagler8    時(shí)間: 2020-2-23 09:48
實(shí)驗(yàn)之十二:滾動(dòng)顯示字符“Hello World!”

  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:FLOW庫
  5.   
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之十二:滾動(dòng)顯示字符“Hello World!”
  13. */

  14. #include<FLOW.h>
  15. FLOW first;
  16. String s="Hello World!";
  17. void setup(){
  18.   first.Begin();
  19. }
  20. void loop(){
  21.   first.Now(16,6,s,1);
  22.   first.Clear(66);
  23. }
復(fù)制代碼




作者: eagler8    時(shí)間: 2020-2-23 10:01


作者: eagler8    時(shí)間: 2020-2-23 10:06
【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  安裝庫:IDE—工具—管理庫—搜索U8g2lib—安裝

  實(shí)驗(yàn)接線方法
  oled模塊    Ardunio Uno
  GND---------GND接地線
  VCC---------5V 接電源
  SDA---------A4
  SCL ------- A5
  實(shí)驗(yàn)之六:使用U8g2輸出中文(世界很大我想走走)
  (在Example里有PrintUTF8例子, 里面有中文輸出, 注意: 這個(gè)并非所有漢字都能輸出. 根據(jù)自己的硬件, 取消對(duì)應(yīng)的注釋)

  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索U8g2lib—安裝
  5.   
  6.   實(shí)驗(yàn)接線方法
  7.   oled模塊    Ardunio Uno
  8.   GND---------GND接地線
  9.   VCC---------5V 接電源
  10.   SDA---------A4
  11.   SCL ------- A5
  12.   實(shí)驗(yàn)之六:使用U8g2輸出中文(世界很大我想走走)
  13.   (在Example里有PrintUTF8例子, 里面有中文輸出, 注意: 這個(gè)并非所有漢字都能輸出. 根據(jù)自己的硬件, 取消對(duì)應(yīng)的注釋)
  14. */

  15. #include <Arduino.h>
  16. #include <U8g2lib.h>

  17. //#ifdef U8X8_HAVE_HW_SPI
  18. //#include <SPI.h>
  19. //#endif
  20. #ifdef U8X8_HAVE_HW_I2C
  21. #include <Wire.h>
  22. #endif

  23. /*
  24.   U8glib Example Overview:
  25.     Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
  26.     Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
  27.     U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
  28. */

  29. // Please UNCOMMENT one of the contructor lines below
  30. // U8g2 Contructor List (Frame Buffer)
  31. // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
  32. // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
  33. //U8G2_NULL u8g2(U8G2_R0);    // null device, a 8x8 pixel display which does nothing
  34. //U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  35. //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6);    // Arduboy (Production, Kickstarter Edition)
  36. //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  37. //U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
  38. //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  39. //U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
  40. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8);
  41. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // All Boards without Reset of the Display
  42. //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 16, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE);   // ESP32 Thing, pure SW emulated I2C
  43. //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17);   // ESP32 Thing, HW I2C with pin remapping
  44. //U8G2_SSD1306_128X64_NONAME_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
  45. //U8G2_SSD1306_128X64_NONAME_F_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
  46. //U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // same as the NONAME variant, but maximizes setContrast() range
  47. //U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
  48. //U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  49. //U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  50. //U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // same as the NONAME variant, but maximizes setContrast() range
  51. //U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // same as the NONAME variant, but uses updated SH1106 init sequence
  52. //U8G2_SH1107_64X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  53. //U8G2_SH1107_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  54. //U8G2_SH1107_128X128_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);
  55. //U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  56. //U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather M0 Basic Proto + FeatherWing OLED
  57. U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED
  58. //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED
  59. //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA);   // pin remapping with ESP8266 HW I2C
  60. //U8G2_SSD1306_64X48_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered
  61. //U8G2_SSD1306_64X32_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  62. //U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
  63. //U8G2_SSD1306_96X16_ER_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   // EastRising 0.69" OLED
  64. //U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8G2_16BIT in u8g2.h
  65. //U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8G2_16BIT in u8g2.h
  66. //U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  67. //U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  68. //U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  69. //U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  70. //U8G2_SSD1326_ER_256X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);         // experimental driver for ER-OLED018-1
  71. //U8G2_SSD1327_SEEED_96X96_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);    // Seeedstudio Grove OLED 96x96
  72. //U8G2_SSD1327_SEEED_96X96_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);    // Seeedstudio Grove OLED 96x96
  73. //U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  74. //U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  75. //U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  76. //U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  77. //U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  78. //U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  79. //U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  80. //U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  81. //U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  82. //U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  83. //U8G2_LD7032_60X32_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8);    // SW SPI Nano Board
  84. //U8G2_LD7032_60X32_F_4W_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE);    // NOT TESTED!
  85. //U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  86. //U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  87. //U8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // Nokia 5110 Display
  88. //U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);         // Nokia 5110 Display
  89. //U8G2_PCF8812_96X65_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Could be also PCF8814
  90. //U8G2_PCF8812_96X65_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);                        // Could be also PCF8814
  91. //U8G2_HX1230_96X68_F_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
  92. //U8G2_HX1230_96X68_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  93. //U8G2_KS0108_128X64_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ U8X8_PIN_NONE, /* reset=*/  U8X8_PIN_NONE);     // Set R/W to low!
  94. //U8G2_KS0108_ERM19264_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ 16, /* reset=*/  U8X8_PIN_NONE);     // Set R/W to low!
  95. //U8G2_ST7920_192X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE);
  96. //U8G2_ST7920_192X32_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
  97. //U8G2_ST7920_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */);    // Remember to set R/W to 0
  98. //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
  99. //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
  100. //U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
  101. //U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  102. //U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  103. //U8G2_ST7565_64128N_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  104. //U8G2_ST7565_64128N_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  105. //U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);    // DOGM132 Shield
  106. //U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);    // DOGM132 Shield
  107. //U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  108. //U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  109. //U8G2_ST7565_LM6059_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Adafruit ST7565 GLCD
  110. //U8G2_ST7565_LM6059_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Adafruit ST7565 GLCD
  111. //U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  112. //U8G2_ST7565_ERC12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  113. //U8G2_ST7565_NHD_C12832_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  114. //U8G2_ST7565_NHD_C12832_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  115. //U8G2_ST7565_NHD_C12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  116. //U8G2_ST7565_NHD_C12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  117. //U8G2_ST7567_PI_132X64_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);  // Pax Instruments Shield, LCD_BL=6
  118. //U8G2_ST7567_PI_132X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);  // Pax Instruments Shield, LCD_BL=6
  119. //U8G2_ST7567_JLX12864_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
  120. //U8G2_ST7567_JLX12864_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
  121. //U8G2_ST75256_JLX172104_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  122. //U8G2_ST75256_JLX172104_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  123. //U8G2_ST75256_JLX256128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Enable U8g2 16 bit mode for this display
  124. //U8G2_ST75256_JLX256128_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // Enable U8g2 16 bit mode for this display
  125. //U8G2_ST75256_JLX25664_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, enable U8g2 16 bit mode for this display
  126. //U8G2_NT7534_TG12864R_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  127. //U8G2_NT7534_TG12864R_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  128. //U8G2_ST7588_JLX12864_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 5);
  129. //U8G2_ST7588_JLX12864_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ 5);
  130. //U8G2_IST3020_ERC19264_F_6800 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37,  /*enable=*/ 28, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect WR pin with GND
  131. //U8G2_IST3020_ERC19264_F_8080 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37,  /*enable=*/ 29, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect RD pin with 3.3V
  132. //U8G2_IST3020_ERC19264_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  133. //U8G2_LC7981_160X80_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  134. //U8G2_LC7981_160X160_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  135. //U8G2_LC7981_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
  136. //U8G2_SED1520_122X32_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*dc=*/ A0, /*e1=*/ A3, /*e2=*/ A2, /* reset=*/  A4);     // Set R/W to low!
  137. //U8G2_T6963_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
  138. //U8G2_T6963_256X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
  139. //U8G2_SED1330_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FG with GND
  140. //U8G2_SED1330_240X128_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); // A0 is dc pin!
  141. //U8G2_RA8835_NHD_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0
  142. //U8G2_RA8835_NHD_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7,  /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E
  143. //U8G2_UC1604_JLX19264_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  144. //U8G2_UC1604_JLX19264_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  145. //U8G2_UC1608_ERC24064_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // SW SPI, Due ERC24064-1 Test Setup
  146. //U8G2_UC1608_ERC240120_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
  147. //U8G2_UC1608_240X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);  // SW SPI, Due ERC24064-1 Test Setup
  148. //U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/  U8X8_PIN_NONE);
  149. //U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/  U8X8_PIN_NONE);
  150. //U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, DOGM240 Test Board
  151. //U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);   // Due, SW SPI, DOGXL240 Test Board
  152. //U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);    // Due, 2nd I2C, DOGXL240 Test Board
  153. //U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);   // Due, SW SPI, DOGXL240 Test Board
  154. //U8G2_UC1611_EW50850_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7,  /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 16); // 240x160, Connect RD/WR1 pin with 3.3V, CS is aktive high
  155. //U8G2_UC1638_160X128_F_4W_HW_SPI u8g2(U8G2_R2, /* cs=*/ 2, /* dc=*/ 3, /* reset=*/ 4);      // Not tested
  156. //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);        // eInk/ePaper Display
  157. //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // eInk/ePaper Display, original LUT from embedded artists
  158. //U8G2_SSD1607_GD_200X200_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // Good Display
  159. //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display!
  160. //U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);    // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display!

  161. // End of constructor list

  162. void setup(void) {
  163.   u8g2.begin();
  164.   u8g2.enableUTF8Print();        // enable UTF8 support for the Arduino print() function
  165. }

  166. void loop(void) {
  167.   u8g2.setFont(u8g2_font_unifont_t_chinese2);  // use chinese2 for all the glyphs of "你好世界"
  168.   u8g2.setFontDirection(0);
  169.   u8g2.clearBuffer();
  170.   u8g2.setCursor(0, 15);
  171.   u8g2.print("Hello World!");
  172.   u8g2.setCursor(0, 30);
  173.   u8g2.print("世界很大我想走走");   
  174.   u8g2.sendBuffer();

  175.   delay(1000);
  176. }
復(fù)制代碼





作者: eagler8    時(shí)間: 2020-2-23 10:08


作者: eagler8    時(shí)間: 2020-2-23 10:11
實(shí)驗(yàn)之七:使用U8g2輸出中文(一心一意打擊病毒)

  1. /*
  2.   【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料 +代碼 +圖形 +仿真)
  3.   實(shí)驗(yàn)一百四十四:0.91寸OLED液晶屏顯示模塊 IIC
  4.   安裝庫:IDE—工具—管理庫—搜索U8g2lib—安裝

  5.   實(shí)驗(yàn)接線方法
  6.   oled模塊    Ardunio Uno
  7.   GND---------GND接地線
  8.   VCC---------5V 接電源
  9.   SDA---------A4
  10.   SCL ------- A5
  11.   實(shí)驗(yàn)之七:使用U8g2輸出中文(一心一意打擊病毒)
  12. */

  13. #include <Arduino.h>
  14. #include <U8g2lib.h>

  15. #ifdef U8X8_HAVE_HW_I2C
  16. #include <Wire.h>
  17. #endif

  18. U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
  19. //SSD1306_128X32 I2C接口

  20. void setup(void) {
  21.   u8g2.begin();
  22.   u8g2.enableUTF8Print();
  23.   // 為Arduino print()函數(shù)啟用UTF8支持
  24. }

  25. void loop(void) {
  26.   u8g2.clearBuffer();  // 清除緩存
  27.   u8g2.setFont(u8g2_font_victoriabold8_8r);// 設(shè)置字母字體
  28.   u8g2.drawStr(0, 7, "I"); // 顯示“I”
  29.   u8g2.setFont(u8g2_font_open_iconic_human_1x_t); // 設(shè)置心形字體
  30.   u8g2.drawGlyph(8, 7, 66); // 畫心
  31.   u8g2.drawGlyph(16, 7, 66); // 畫心
  32.   u8g2.setFont(u8g2_font_victoriabold8_8r);// 設(shè)置字母字體
  33.   u8g2.drawStr(24, 7, "U"); // 顯示“U”
  34.   u8g2.sendBuffer();          // 顯示內(nèi)容
  35.   delay(1000);


  36.   u8g2.setFont(u8g2_font_unifont_t_chinese2);
  37.   // 對(duì)“一心一意打擊病毒”的所有字形使用chinese2
  38.   u8g2.setFontDirection(0);
  39.   u8g2.clearBuffer();
  40.   u8g2.setCursor(0, 15);
  41.   u8g2.print("Attack virus");
  42.   u8g2.setCursor(0, 30);
  43.   u8g2.print("一心一意打擊病毒");
  44.   u8g2.sendBuffer();
  45.   delay(1000);
  46. }
復(fù)制代碼




作者: eagler8    時(shí)間: 2020-2-23 10:19


作者: eagler8    時(shí)間: 2020-2-23 12:36
本實(shí)驗(yàn)案例中,通過程序之二enroll,注冊(cè)了“huadaio”的二個(gè)指紋1#和3號(hào),注冊(cè)了“zhanghaoze”一個(gè)指紋2#。識(shí)別指紋ID后,在串口顯示匹配的信心值,在OLED屏顯示匹配的招呼語。

Found fingerprint sensor!
找到指紋傳感器!





作者: eagler8    時(shí)間: 2020-2-23 12:46
OLED顯示

Waiting fingerprint
等待指紋




作者: eagler8    時(shí)間: 2020-2-23 12:52
串口顯示識(shí)別的三個(gè)指紋ID




作者: eagler8    時(shí)間: 2020-2-23 13:05
OLED屏顯示識(shí)別1#指紋“huadaio”




作者: eagler8    時(shí)間: 2020-2-23 13:10
OLED屏顯示識(shí)別2#指紋“zhanghaoze”




作者: 以后能提供    時(shí)間: 2020-2-23 18:44
樓主太棒了! 給我們帶來那么多參考 市面上有很多的教程都是互相抄來抄去 或者都是些比較簡(jiǎn)單基本的 之前我一直想找的oled教程都沒找到0.91寸 非常感謝樓主
作者: eagler8    時(shí)間: 2020-2-24 18:56
以后能提供 發(fā)表于 2020-2-23 18:44
樓主太棒了! 給我們帶來那么多參考 市面上有很多的教程都是互相抄來抄去 或者都是些比較簡(jiǎn)單基本的  ...

謝謝鼓勵(lì),多交流
作者: by64214    時(shí)間: 2020-3-4 22:18
謝謝樓主分享     I2C學(xué)習(xí)
         采用 Adafruit_SSD1306.h   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  可以點(diǎn)亮
                采用  U8g2lib.h  不知需要那里修改  自帶例程 也無法點(diǎn)亮   尋求幫助!。
作者: eagler8    時(shí)間: 2020-3-5 11:48
by64214 發(fā)表于 2020-3-4 22:18
謝謝樓主分享     I2C學(xué)習(xí)
         采用 Adafruit_SSD1306.h   display.begin(SSD1306_SWITCHCAPVCC, 0x3 ...

試試這個(gè)前面的程序

實(shí)驗(yàn)之二:自動(dòng)計(jì)數(shù)器
作者: zxy1004211072    時(shí)間: 2020-4-18 14:06
#error ("Height incorrect, please fix Adafruit_SSD1306.h!");
一直顯示這個(gè)錯(cuò)誤
作者: zxy1004211072    時(shí)間: 2020-4-18 15:01
C:\Users\Administrator\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:40:17: fatal error: SPI.h: No such file or directory
請(qǐng)問樓主這個(gè)錯(cuò)誤是什么意思呀
作者: eagler8    時(shí)間: 2020-10-24 15:51
zxy1004211072 發(fā)表于 2020-4-18 15:01
C:\Users\Administrator\Documents\Arduino\libraries\Adafruit_SSD1306-master/Adafruit_SSD1306.h:40:17: ...

應(yīng)該是沒有安裝庫,Adafruit_SSD1306.h
作者: niuquanwang    時(shí)間: 2021-1-14 14:28
#include <Adafruit_SSD1306.h>樓主您好,怎么清除屏幕某一塊區(qū)域的顯示的東西呢?(不是全部清屏)謝謝
作者: 大漠游民    時(shí)間: 2021-3-8 17:41
不錯(cuò)的資料,值得學(xué)習(xí)。
作者: 1113額    時(shí)間: 2021-11-27 12:17
給樓主頂起
作者: TT學(xué)弟    時(shí)間: 2021-11-27 18:42
其實(shí)這個(gè)東西很簡(jiǎn)單的,你可以做一些按鍵在這個(gè)上面,可以控制其他東西




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1