2020-01-17.第一個(gè)arduino程序思灌,控制8x8點(diǎn)陣屏

Title: 第一個(gè)arduino程序,控制8x8點(diǎn)陣屏[2020-01-17]

想用芯片控制屏幕輸出點(diǎn)內(nèi)容恭取,查了查泰偿,比較廉價(jià)的方案是用arduino控制。原來(lái)還有這么便宜的好東西蜈垮!十幾年前搞過(guò)一塊51單片機(jī)的開(kāi)發(fā)板耗跛,因?yàn)殚_(kāi)發(fā)板又大又難搞,便沒(méi)有深入下去攒发。相比之下arduino又小又便宜调塌,燒錄起來(lái)也不是很麻煩。真好惠猿!朋友送我一對(duì)珍珠鳥羔砾。于是便入手了一塊arduino nano(非原版),一塊8x8點(diǎn)陣屏偶妖,實(shí)現(xiàn)了簡(jiǎn)單的圖像輸出姜凄,整理過(guò)程如下。代碼較丑趾访,見(jiàn)諒态秧。

  1. 硬件準(zhǔn)備

    • arduino nano

    • 8x8點(diǎn)陣屏

arduino nano,應(yīng)該不是原版

選擇nano的主要原因是便宜扼鞋。同時(shí)申鱼,本次的任務(wù)也沒(méi)什么性能的要求。在淘寶購(gòu)得的非原版nano云头,包郵價(jià)格在15元以下润讥。8x8的點(diǎn)陣屏也不算貴,算上郵費(fèi)在20左右盘寡,支持3種顯示顏色(紅、黃撮慨、綠)和16階亮度調(diào)整竿痰。這塊點(diǎn)陣屏支持級(jí)聯(lián),但現(xiàn)在我用不到砌溺,所以只買了一塊影涉。

  1. 軟件準(zhǔn)備

    • Arduino IDE

    • 淘寶賣家提供的8x8點(diǎn)陣屏驅(qū)動(dòng)

    Arduino IDE 可以在 https://www.arduino.cc/en/Main/Software下載。8x8的驅(qū)動(dòng)問(wèn)賣家要一下就有了规伐。

    不過(guò)蟹倾,需要注意的是,我拿到的賣家提供的程序,在編譯的時(shí)候竟然出現(xiàn)了錯(cuò)誤鲜棠,賣方少寫了一個(gè)const肌厨,這方面著實(shí)有點(diǎn)坑新手。

  1. 連接硬件

    根據(jù)賣家提供的接口圖豁陆,以及arduino接口的介紹圖柑爸,連接點(diǎn)陣屏和arduino nano,這一步還是比較簡(jiǎn)單的盒音,一一對(duì)應(yīng)就行(由于硬件已經(jīng)不在我手上了表鳍,這里就沒(méi)有圖了)。


    連接后祥诽,在Arduino IDE中選擇Nano
  1. 將驅(qū)動(dòng)放入arduino的lib中

    根據(jù)賣家提供的說(shuō)明譬圣,將兩個(gè)驅(qū)動(dòng)文件Adafruit_GFX、Adafruit_LED_Backpack_Library_master放入Arduino安裝目錄的lib文件夾中雄坪,如果Arduino IDE是安裝在默認(rèn)路徑的厘熟,那么lib的路徑是 C:\Program Files (x86)\Arduino\lib

  1. 第一個(gè)測(cè)試程序

    現(xiàn)在可以試試看點(diǎn)陣屏亮不亮了。

    打開(kāi)Arduino IDE诸衔,寫入以下程序:

    #include <Wire.h>
    #include "Adafruit_LEDBackpack.h"
    #include "Adafruit_GFX.h"
    
    Adafruit_8x8matrix matrix = Adafruit_8x8matrix(); // 適用于單色顯示
    
    void setup() {
      Serial.begin(9600);
      Serial.println("Test");
      
      matrix.begin(0x70);  // pass in the address
    }
    
    void loop() {
      matrix.clear();      // 清除屏幕
      matrix.drawPixel(0, 0, LED_ON); // 點(diǎn)亮指定的點(diǎn)
      matrix.writeDisplay();  // 顯示
      delay(500); // 設(shè)置500毫秒的延時(shí)盯漂,在這個(gè)程序中沒(méi)什么用
    }
    

    上川到arduino nano中,就會(huì)看到有一個(gè)角落的點(diǎn)已經(jīng)亮了笨农。

被點(diǎn)亮的點(diǎn)就缆,實(shí)際位置以代碼為準(zhǔn)
  1. 一些簡(jiǎn)單的方法

    我總結(jié)了一些簡(jiǎn)單的顯示方法,組合使用的話谒亦,一般的圖案都可以應(yīng)對(duì)了竭宰。

    Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();
    // 多色時(shí)的設(shè)置,此時(shí)可以使用LED_GREEN,LED_RED份招,LED_YELLOW實(shí)現(xiàn)不同顏色的顯示
    
    Adafruit_8x8matrix matrix = Adafruit_8x8matrix();
    // 單色時(shí)的設(shè)置切揭,此時(shí)用LED_ON即可
    
    matrix.drawBitmap(0, 0, smile_bmp, 8, 8, LED_GREEN); // 繪制圖
    
    matrix.drawLine(0,0, 7,7, LED_YELLOW); // 繪制線
    
    matrix.drawPixel(0, 0, LED_GREEN); // 繪制點(diǎn)
    
    matrix.drawRect(0,0, 8,8, LED_RED); // 繪制方形(中間空)
    
    matrix.fillRect(2,2, 4,4, LED_GREEN); // 繪制方形,中間實(shí)
    
    static const uint8_t PROGMEM // 用于繪制圖片锁摔,1代表點(diǎn)亮廓旬,0代表暗。也可以寫成0x00這種16進(jìn)制的形式
      smile_bmp[] =
      { B00111100,
        B01000010,
        B10100101,
        B10000001,
        B10100101,
        B10011001,
        B01000010,
        B00111100 },{0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00};
    
    matrix.drawBitmap(0, 0, smile_bmp, 8, 8, LED_GREEN); // 繪制圖片
    
    matrix.drawCircle(3,3, 3, LED_YELLOW); // 繪制圓
    
    matrix.setBrightness(15); // 調(diào)節(jié)亮度谐腰,范圍0-15
    
    matrix.blinkRate(0); // 閃爍孕豹,0為不閃爍,范圍1-3
    
    matrix.setTextWrap(false);  // 繪制字十气,在一塊屏幕上的效果并不好励背,所以我沒(méi)有使用
    matrix.setTextSize(1);
    matrix.setTextColor(LED_GREEN);
    for (int8_t x=7; x>=-36; x--) {
      matrix.clear();
      matrix.setCursor(x,0);
      matrix.print("Hello");
      matrix.writeDisplay();
      delay(100);
    } 
    
  1. 一個(gè)簡(jiǎn)單的程序

    下面提供了一個(gè)簡(jiǎn)單的小程序,算是第一次使用arduino徹底完成了吧砸西。注釋什么的比較隨意叶眉,還請(qǐng)理解址儒。

    #include <Wire.h>
    #include "Adafruit_LEDBackpack.h"
    #include "Adafruit_GFX.h"
    
    Adafruit_BicolorMatrix matrix = Adafruit_BicolorMatrix();
    
    void setup() {
      Serial.begin(9600);
      Serial.println("Love 8x8 Program. @2020-01-14");
      
      matrix.begin(0x70);  // pass in the address
    }
    
    static const uint8_t PROGMEM heart_middle[] = {0x00, 0x6C, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00},
    rect_smile_face[] = {0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x7e, 0x00},
    curved_smile_face[] = {0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x3c, 0x00},
    i_upper[] = {0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00},
    u_upper[] = {0x00, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00};
    
    void loop() {
      waiting_pic();
      
      // show heart
      int i = 0;
      while (i<2) {
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, heart_middle, 8, 8, LED_RED);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, rect_smile_face, 8, 8, LED_YELLOW);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, heart_middle, 8, 8, LED_RED);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, curved_smile_face, 8, 8, LED_GREEN);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, heart_middle, 8, 8, LED_RED);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, rect_smile_face, 8, 8, LED_GREEN);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, heart_middle, 8, 8, LED_RED);
      matrix.writeDisplay();
      delay(500);
    
      // show bitmap
      matrix.clear();
      matrix.drawBitmap(0, 0, curved_smile_face, 8, 8, LED_YELLOW);
      matrix.writeDisplay();
      delay(500);
      
      i += 1;
      }
    
      waiting_pic();
      
      // show smile face
      i = 0;
      while (i<2) {
        // show bitmap
        matrix.clear();
        matrix.drawBitmap(0, 0, i_upper, 8, 8, LED_YELLOW);
        matrix.writeDisplay();
        delay(500);
    
        // show bitmap
        matrix.clear();
        matrix.drawBitmap(0, 0, heart_middle, 8, 8, LED_YELLOW);
        matrix.writeDisplay();
        delay(500);
    
        // show bitmap
        matrix.clear();
        matrix.drawBitmap(0, 0, u_upper, 8, 8, LED_YELLOW);
        matrix.writeDisplay();
        delay(500);
        
        i += 1;
      }
    
      // show strings
      
    
      matrix.clear();
      matrix.writeDisplay();
      matrix.setRotation(0);
    }
    
    void on_pixel(int x, int y, int color) { // GREEN is 0, YELLOW is 1, RED is 2
      if (color==0) {
        matrix.drawPixel(x, y, LED_GREEN);
      } else if (color==1) {
        matrix.drawPixel(x, y, LED_YELLOW);
      } else if (color==2) {
        matrix.drawPixel(x, y, LED_RED);
      }
      matrix.writeDisplay();
    }
    
    void waiting_pic() { // Display waiting picture
      int i = 0;
      while (i<2) {
        matrix.clear();
        on_pixel(1,6,0); // Step.1:.
        delay(500);
        on_pixel(3,6,0); // Step.2: ..
        delay(500);
        on_pixel(5,6,0); // Step.3: ...
        delay(500);
        matrix.writeDisplay();
        i += 1;
      }
    }
    
效果圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市衅疙,隨后出現(xiàn)的幾起案子莲趣,更是在濱河造成了極大的恐慌,老刑警劉巖炼蛤,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妖爷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡理朋,警方通過(guò)查閱死者的電腦和手機(jī)絮识,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗽上,“玉大人次舌,你說(shuō)我怎么就攤上這事∈薹撸” “怎么了彼念?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浅萧。 經(jīng)常有香客問(wèn)我逐沙,道長(zhǎng),這世上最難降的妖魔是什么洼畅? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任吩案,我火速辦了婚禮,結(jié)果婚禮上帝簇,老公的妹妹穿的比我還像新娘徘郭。我一直安慰自己,他們只是感情好丧肴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布残揉。 她就那樣靜靜地躺著,像睡著了一般芋浮。 火紅的嫁衣襯著肌膚如雪抱环。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天纸巷,我揣著相機(jī)與錄音江醇,去河邊找鬼。 笑死何暇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凛驮。 我是一名探鬼主播裆站,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宏胯?” 一聲冷哼從身側(cè)響起羽嫡,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肩袍,沒(méi)想到半個(gè)月后杭棵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氛赐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年魂爪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艰管。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滓侍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牲芋,到底是詐尸還是另有隱情撩笆,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布缸浦,位于F島的核電站夕冲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏裂逐。R本人自食惡果不足惜歹鱼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望絮姆。 院中可真熱鬧醉冤,春花似錦、人聲如沸篙悯。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸽照。三九已至螺捐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矮燎,已是汗流浹背定血。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诞外,地道東北人澜沟。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像峡谊,于是被迫代替她去往敵國(guó)和親茫虽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刊苍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容