Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 32476|回復: 6
打印 上一主題 下一主題

利用LED Matrix 矩陣玩玩霓虹燈效果

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-1-9 18:17:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
這LED Matrix實在有點難搞,不過一但弄懂原理之後大致上就可以掌握。

我使用的LED Matrix型號是 M1388RS,圖上也有。



左邊這張圖很重要,因為網路找不到DataSheet,所以只好自行測試並畫出,主要是相關腳位對應到燈號的控制,
而LED Matrix一共有十六個針腳(上下各八),但Arduino板上只有十四組數位I/O的控制,而其中Pin0及Pin1為RX/TX傳送資料時使用
(也就是說當傳送資料時不能插上),因此為了測試方便,我直接去頭尾而直接把8x8當成6x6來使用。

圓圈內的數字對應到LED Matrix上的針腳位置,這樣就能找出您想控制的燈號了,舉例來說,當我把8號針腳導通,但由於1,6,16,......那行預設均為接地,
因此當8號導通時第一行燈號全會亮(除了第一顆與最後一顆,因此我只使用中間的6x6),又如果我只要第一顆亮就好,則我必須把其它對應的腳位設定為
HIGH(16、4、9、15、10)來將其它燈號熄滅,這樣就可以達到只留一顆的效果了。

先看看結果吧。



針腳與Arduino的連結

LED Matrix      Arduino (x = not  connect)
1   -> x
2   -> 2
3   -> 3
4   -> 4
5   -> x
6   -> 5
7   -> 6
8   -> x
9   -> 7
10   -> 8
11   -> 9
12   -> 10
13   -> x
14   -> 11
15   -> 12
16   -> 13

以下是Arduino的程式碼:
//Arduino 8x8 LED Matrix Test
//just use 6x6

int delaymsecond=200;

int myPins[] = {0,8, 7, 3, 14, 2,12,11,5,1,6,16,4,9,15,10,13};
int realPins[]={0,1,2,3,4,0,5,6,0,7,8,9,10,0,11,12,13};

//這兩組陣列宣告主要是紀錄LED Matrix及Arduino實際Pin的位置並方便在程式中迴圈的使用。

void setup(){
   pinMode(2,OUTPUT);
   pinMode(3,OUTPUT);
   pinMode(4,OUTPUT);
   pinMode(5,OUTPUT);
   pinMode(6,OUTPUT);
   pinMode(7,OUTPUT);
   pinMode(8,OUTPUT);
   pinMode(9,OUTPUT);
   pinMode(10,OUTPUT);
   pinMode(11,OUTPUT);
   pinMode(12,OUTPUT);
   pinMode(13,OUTPUT);
}

void loop(){
  //由左到右不熄滅的動畫
  for (int i=2;i<=7;i++)
  {
  digitalWrite(realPins[myPins],HIGH);
delay(300);  
  }

//反過來將燈號一一熄滅
  for (int i=7;i>=2;i--)
  {
  digitalWrite(realPins[myPins],LOW);
  delay(300);  
  }  
  
  //由於LED Matrix設計的原理,所以若要改成列的顯示,則操作會稍微複雜一點,因為多了關閉的動作。

   for (int k=1;k<=6;k++)
   {
      for (int i=2;i<=7;i++)
      {
        digitalWrite(realPins[myPins],HIGH);   
         for (int j=10;j<=15;j++)
         {
           if ((k+9)!=j)
           {
              digitalWrite(realPins[myPins[j]],HIGH);
           }else{
              digitalWrite(realPins[myPins[j]],LOW);
            
           }
         }
      }
      delay(300);
   }
     
     //LOW ALL PIN  
      for (int M=1;M<=16;M++)
      {
         digitalWrite(realPins[myPins[M]],LOW);              
      }
      
  //反過來的燈號動畫
   for (int k=6;k>=1;k--)
   {
      for (int i=7;i>=2;i--)
      {
        digitalWrite(realPins[myPins],HIGH);   
         for (int j=10;j<=15;j++)
         {
           if ((k+9)!=j)
           {
              digitalWrite(realPins[myPins[j]],HIGH);
           }else{
              digitalWrite(realPins[myPins[j]],LOW);
            
           }
         }
      }
      delay(300);
   }
            //LOW ALL PIN  
      for (int M=1;M<=16;M++)
      {
         digitalWrite(realPins[myPins[M]],LOW);              
      }
      
      delay(1000);
         
}
2#
發表於 2008-12-26 11:52:09 | 只看該作者

8x8 LED matrix

為何沒有連接resistor and capacitor? 可以直接connect嗎?
我也買了這個matrix,但是沒有serial interface, 亦買了MAX7219 to drive the LED,但不知怎樣connect.
nichal 該用戶已被刪除
3#
發表於 2008-12-26 13:11:57 | 只看該作者
http://datasheets.maxim-ic.com/en/ds/MAX7219-MAX7221.pdf

datasheet有線路範例跟通訊方式的說明
試試看吧~~~
4#
發表於 2014-3-17 20:42:10 | 只看該作者

分享共陰的LED Matrix的內部接線圖給大家
5#
發表於 2014-3-17 23:55:21 | 只看該作者
本帖最後由 pizg 於 2014-3-18 07:53 編輯

樓主在2008年玩這的, 我則是在半個月前首次玩16x16 dot matrix led,
這個的確很好玩, 可以玩中文字型和自訂圖案, 也可以玩像做簡報那樣的動態效果展示,
諸如向上下左右捲動, 雪花飄, 墜落, 堆疊...等效果.
至於電路接法和程式只要google一下就有, keyword: arduino dot matrix led

我要指出的重點是:
1. 最好要接上電阻, 因為不曉得哪天會燒壞Arduino或dot matrix led.
2. 最好要接上MAX7219或74HC595和ULN2803, 如此可以節省Arduino腳位, 並且驅動能力才夠, 等到哪天你玩64x16以上的dot matrix led 時就不必回過頭來煩惱腳位不夠或電不夠的問題.
3. 使用掃瞄的方式點亮matrix.
4. 去翻一下以前學校教過的書, 有關向量, 矩陣位移, 縮放, 鏡射...等, 這會對你很有幫助的.
5. 去研究一下中文點陣的原理和應用方式, 有助於顯示中文.
6. 如果以後玩到RGB dot matrix led, 還會牽涉到色彩學.
以上是我自學的心得跟你分享.

最近我想用手機編寫節目並即時控制dot matrix的展示.最後的目標是手機照相立馬轉成dot matrix, 彙集成數張畫面後, 動態展示.
哈~~~中文字型庫資料量實在太大了,
看來不得不自製一個Arduino+EEPROM系統了.
6#
發表於 2014-10-14 10:00:39 | 只看該作者
回復 5# pizg


   有關中文點陣的部分可以分享一些嗎?
   目前查這方面的資訊有點苦手

   非英文語繫在這部分還真的蠻麻煩的,沒辦法直接這建表解決

   附上目前查到有關英文的Scrolling Text的Sample

   https://code.google.com/p/arudino-maxmatrix-library/w/list
7#
發表於 2014-10-14 18:22:23 | 只看該作者
回復 6# kwave


不管是中文或英文, 基本上都是點亮matrix上面的某一個LED.你可以建立英文字表, 當然也可以建立中文字表.


至於中文字表該怎麼做?
1.自建
2.使用現成的字型
想當然耳, 是使用現成的字型會比較快.


以前在DOS時代, 倚天公司有研發一些點陣字型,
你可以去找15X15的字型檔,
然後將它轉檔成字表.


最好不要把中文字表寫死在 Arduino 程式裏,
然而 Arduino 內建的 EEPROM 也裝不下所有的中文字表,
所以建議你加裝 EEPROM 模組置放中文字表.



您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-20 20:40 , Processed in 0.302052 second(s), 11 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表