Changes between Version 1 and Version 2 of wade/embedded/arduino/example/example_3-2


Ignore:
Timestamp:
Feb 8, 2010, 3:18:13 PM (14 years ago)
Author:
wade
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • wade/embedded/arduino/example/example_3-2

    v1 v2  
    11{{{
     2/*
     3 * 由 12 個 digital pins 控制 5*7 矩陣式 LED Matrix,col:掃描,row:data
     4 */
     5
     6#define lpin0 2             // 定義 LED 負極腳位
     7#define lpin1 3             // 定義 LED 負極腳位
     8#define lpin2 4             // 定義 LED 負極腳位
     9#define lpin3 5             // 定義 LED 負極腳位
     10#define lpin4 6             // 定義 LED 負極腳位
     11#define lpin5 7             // 定義 LED 負極腳位
     12#define lpin6 8             // 定義 LED 負極腳位
     13#define hpin0 9             // 定義 LED 正極腳位
     14#define hpin1 10             // 定義 LED 正極腳位
     15#define hpin2 11            // 定義 LED 正極腳位
     16#define hpin3 12            // 定義 LED 正極腳位
     17#define hpin4 13            // 定義 LED 正極腳位
     18#define row_size 7          // 定義 Matrix row 大小
     19#define col_size 5          // 定義 Matrix colum 小
     20#define delay_time 100      // 延遲時間
     21
     22#define data_A {1, 0, 0, 0, 0,\
     23                0, 1, 0, 0, 0,\
     24                0, 0, 1, 0, 0,\
     25                0, 0, 1, 0, 0,\
     26                0, 0, 1, 0, 0,\
     27                0, 0, 0, 1, 0,\
     28                0, 0, 0, 0, 1}
     29
     30
     31// 所有要顯示字的 array
     32boolean word_array[4][row_size][col_size] = {data_A};
     33 // LED Matrix
     34boolean led[row_size][col_size] ;
     35// 水平方向 led
     36byte row_pin[row_size]={lpin0, lpin1, lpin2, lpin3, lpin4, lpin5, lpin6};
     37// 垂直方向 led
     38byte col_pin[col_size]={hpin0, hpin1, hpin2, hpin3, hpin4};
     39
     40// 初始設定
     41void setup()
     42{
     43  for (int i = 0; i <= 13; i++)
     44    pinMode(i , OUTPUT);
     45  clear_led();
     46}
     47
     48// 主程式迴圈
     49void loop()
     50{
     51  // HEX 000
     52  clear_led();
     53 
     54  // 將第一個 word 讀入 led
     55  word_to_led(0);
     56  display_led(led, 1000);
     57  /*
     58  word_to_led(1);
     59  display_led(led, 1000);
     60  word_to_led(3);
     61  display_led(led, 1000);
     62  word_to_led(2);
     63  display_led(led, 1000);
     64  */
     65  delay(delay_time);
     66
     67}
     68
     69// 將第 n 個 word 讀入 led
     70void word_to_led(int n){
     71  for (int i = 0; i < row_size; i++)
     72    for (int j = 0; j < col_size; j++)
     73      led[i][j] = word_array[n][i][j];
     74}
     75
     76// 將 led 全關
     77void clear_led()
     78{
     79  for (int i = 0; i < row_size; i++)
     80    digitalWrite(row_pin[i], HIGH);
     81  for (int i = 0; i < col_size; i++)
     82    digitalWrite(col_pin[i], LOW);
     83}
     84
     85void display_led(byte led[row_size][col_size], int continue_time)
     86{
     87  for (int k = 0; k < continue_time; k++)
     88  {
     89    for (int i = 0; i < col_size; i++)
     90    {
     91      // 將 COL 打開,以 ROW 為資料
     92      digitalWrite(col_pin[i], HIGH);
     93      for (int j = 0; j < row_size; j++)
     94      {
     95        if (led[j][i] == 1)
     96        {
     97          digitalWrite(row_pin[j], LOW);
     98        }
     99      }
     100      clear_led();
     101    }
     102  }
     103}
    2104}}}