Changes between Version 3 and Version 4 of wade/embedded/arduino/example/example_3


Ignore:
Timestamp:
Feb 4, 2010, 10:27:25 AM (15 years ago)
Author:
wade
Comment:

--

Legend:

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

    v3 v4  
    11{{{
    22/*
    3  * 由 11 pins 控制 8 * 8 矩陣式 led matrix
    4  * 優點:使用較少I/O
     3 * 由 11 pins 控制 8 * 8 矩陣式 led matrix、dot matrix。
    54 */
    65
    7 #define pin0 0             // 定義 LED 腳位
    8 #define pin1 1             // 定義 LED 腳位
    9 #define pin2 2            // 定義 LED 腳位
    10 #define delay_time 500    // 定義延遲時間
     6#define lpin0 0             // 定義 LED 負極腳位
     7#define lpin1 1             // 定義 LED 負極腳位
     8#define lpin2 2             // 定義 LED 負極腳位
     9#define lpin3 3             // 定義 LED 負極腳位
     10#define lpin4 4             // 定義 LED 負極腳位
     11#define lpin5 5             // 定義 LED 負極腳位
     12#define lpin6 6             // 定義 LED 負極腳位
     13#define lpin7 7             // 定義 LED 負極腳位
     14#define hpin0 8             // 定義 LED 正極腳位
     15#define hpin1 9             // 定義 LED 正極腳位
     16#define hpin2 10            // 定義 LED 正極腳位
     17#define hpin3 11            // 定義 LED 正極腳位
     18#define hpin4 12            // 定義 LED 正極腳位
     19#define hpin5 13            // 定義 LED 正極腳位
     20#define hpin6 14            // 定義 LED 正極腳位
     21#define hpin7 15            // 定義 LED 正極腳位
     22#define row_size 8          // 定義 Matrix row 大小
     23#define col_size 8          // 定義 Matrix colum 小
     24#define delay_time 100      // 延遲時間
     25
     26#define data_A {0, 0, 0, 1, 1, 0, 0, 0,\
     27                0, 0, 1, 0, 0, 1, 0, 0,\
     28                0, 0, 1, 0, 0, 1, 0, 0,\
     29                0, 1, 0, 0, 0, 0, 1, 0,\
     30                0, 1, 1, 1, 1, 1, 1, 0,\
     31                0, 1, 0, 0, 0, 0, 1, 0,\
     32                0, 1, 0, 0, 0, 0, 1, 0,\
     33                0, 1, 0, 0, 0, 0, 1, 0}
     34
     35#define data_N {0, 1, 0, 0, 0, 0, 1, 0,\
     36                0, 1, 1, 0, 0, 0, 1, 0,\
     37                0, 1, 1, 0, 0, 0, 1, 0,\
     38                0, 1, 0, 1, 0, 0, 1, 0,\
     39                0, 1, 0, 0, 1, 0, 1, 0,\
     40                0, 1, 0, 0, 0, 1, 1, 0,\
     41                0, 1, 0, 0, 0, 1, 1, 0,\
     42                0, 1, 0, 0, 0, 0, 1, 0}
     43
     44// 所有要顯示字的 array
     45boolean word_array[4][row_size][col_size] = {data_A, data_N, data_C, data_H};
     46
     47 // LED Matrix
     48boolean led[row_size][col_size] ;
     49// 水平方向 led
     50byte col_pin[col_size]={lpin0, lpin1, lpin2, lpin3, lpin4, lpin5, lpin6, lpin7};
     51// 垂直方向 led
     52byte row_pin[row_size]={hpin0, hpin1, hpin2, hpin3, hpin4, hpin5, hpin6, hpin7};
     53
     54
    1155
    1256// 初始設定
    1357void setup()
    1458{
    15   pinMode(pin0 , OUTPUT);
    16   pinMode(pin1 , OUTPUT);
    17   pinMode(pin2 , OUTPUT);
    18   digitalWrite(pin0, LOW);
    19   digitalWrite(pin1, LOW);
    20   digitalWrite(pin2, LOW);
     59  pinMode(lpin0 , OUTPUT);
     60  pinMode(lpin1 , OUTPUT);
     61  pinMode(lpin2 , OUTPUT);
     62  pinMode(lpin3 , OUTPUT);
     63  pinMode(lpin4 , OUTPUT);
     64  pinMode(lpin5 , OUTPUT);
     65  pinMode(lpin6 , OUTPUT);
     66  pinMode(lpin7 , OUTPUT);
     67  pinMode(hpin0 , OUTPUT);
     68  pinMode(hpin1 , OUTPUT);
     69  pinMode(hpin2 , OUTPUT);
     70  pinMode(hpin3 , OUTPUT);
     71  pinMode(hpin4 , OUTPUT);
     72  pinMode(hpin5 , OUTPUT);
     73  pinMode(hpin6 , OUTPUT);
     74  pinMode(hpin7 , OUTPUT);
     75  clear_led();
    2176}
    2277
     
    2580{
    2681  // HEX 000
    27   digitalWrite(pin0, LOW);
    28   digitalWrite(pin1, LOW);
    29   digitalWrite(pin2, LOW);
    30   delay(delay_time);
     82  clear_led();
    3183 
    32   // HEX 001
    33   digitalWrite(pin0, HIGH);
    34   digitalWrite(pin1, LOW);
    35   digitalWrite(pin2, LOW);
     84  // 將第一個 word 讀入 led
     85  word_to_led(0);
     86  display_led(led, 1000);
     87  word_to_led(1);
     88  display_led(led, 1000);
     89  /*
     90  word_to_led(3);
     91  display_led(led, 1000);
     92  word_to_led(2);
     93  display_led(led, 1000);
     94  */
    3695  delay(delay_time);
    3796
    38   // HEX 010
    39   digitalWrite(pin0, LOW);
    40   digitalWrite(pin1, HIGH);
    41   digitalWrite(pin2, LOW);
    42   delay(delay_time);
    43 
    44   // HEX 011
    45   digitalWrite(pin0, HIGH);
    46   digitalWrite(pin1, HIGH);
    47   digitalWrite(pin2, LOW);
    48   delay(delay_time);
    49  
    50   // HEX 100
    51   digitalWrite(pin0, LOW);
    52   digitalWrite(pin1, LOW);
    53   digitalWrite(pin2, HIGH);
    54   delay(delay_time); 
    5597}
    5698
     99// 將第 n 個 word 讀入 led
     100void word_to_led(int n){
     101  for (int i = 0; i < row_size; i++)
     102    for (int j = 0; j < col_size; j++)
     103      led[i][j] = word_array[n][i][j];
     104}
     105
     106// 將 led 全關
     107void clear_led()
     108{
     109  for (int i = 0; i < row_size; i++)
     110    digitalWrite(row_pin[i], LOW);
     111  for (int i = 0; i < col_size; i++)
     112    digitalWrite(col_pin[i], HIGH);
     113}
     114
     115void display_led(byte led[row_size][col_size], int continue_time)
     116{
     117  for (int k = 0; k < continue_time; k++)
     118  {
     119    for (int i = 0; i < row_size; i++)
     120    {
     121      digitalWrite(row_pin[i], HIGH);
     122      for (int j = 0; j < col_size; j++)
     123      {
     124        if (led[i][j] == 1)
     125        {
     126          digitalWrite(col_pin[j], LOW);
     127          //delay(delay_time);
     128        }
     129      }
     130      clear_led();
     131    }
     132  }
     133}
    57134
    58135}}}