目的:
以光敏電阻去感應亮度,讓矩陣LED呈現的樹有三段變化且有落葉效果(以光合作用強不強烈作為構想)
圖的變化:
成果:
Arduino Code:
- #include < SPI.h >
- int LDR = 0; //光敏電阻輸入,接在anallog pin 0
- int readLDR = 0; //光敏電阻感應到的光源產生的電阻值
-
- unsigned char i;
- unsigned char j;
- /*port definition*/
- int Max7219_pinCLK = 10;
- int Max7219_pinCS = 9;
- int Max7219_pinDIN = 8;
-
- unsigned char symbol[12][8] = {
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x54,
- 0x92,
- 0x29,
- 0x44
- }, // 接收光最少的樹
-
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xFF
- }, // 接受光尚可的樹
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xFF,
- 0xFF
- },
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xBD,
- 0x7E,
- 0xFF
- },
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xBD,
- 0x3C,
- 0x7E,
- 0xFF
- },
- {
- 0xFF,
- 0x3C,
- 0x7E,
- 0xBD,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xFF
- },
- {
- 0xFF,
- 0x7E,
- 0xBD,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xFF
- },
- {
- 0xFF,
- 0xBD,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x3C,
- 0x7E,
- 0xFF
- },
-
- {
- 0xFF,
- 0x3C,
- 0x3C,
- 0x3C,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- }, // 接收光最多的樹
- {
- 0xFF,
- 0x3C,
- 0x7E,
- 0xBD,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- },
- {
- 0xFF,
- 0x7E,
- 0xBD,
- 0x3C,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- },
- {
- 0xFF,
- 0xBD,
- 0x3C,
- 0x3C,
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF
- }
- };
-
- //下面的function是因為點矩陣是吃byte,先轉成byte再寫入
- void Write_Max7219_byte(unsigned char DATA) {
- unsigned char i;
- digitalWrite(Max7219_pinCS, LOW);
- for (i = 8; i >= 1; i--) {
- digitalWrite(Max7219_pinCLK, LOW);
- //Obtain the MSB of the data
- digitalWrite(Max7219_pinDIN, DATA & 0x80);
- DATA = DATA << 1;
- digitalWrite(Max7219_pinCLK, HIGH);
- }
- }
-
- //腳位確定
- void Write_Max7219(unsigned char address, unsigned char dat) {
- digitalWrite(Max7219_pinCS, LOW);
- Write_Max7219_byte(address); //
- Write_Max7219_byte(dat); //
- digitalWrite(Max7219_pinCS, HIGH);
- }
-
- void Init_MAX7219(void) {
- Write_Max7219(0x09, 0x00); //decode: BCD
- Write_Max7219(0x0a, 0x03); //Brightness
- Write_Max7219(0x0b, 0x07); //
- Write_Max7219(0x0c, 0x01); //
- Write_Max7219(0x0f, 0x00); //
- for (byte i = 0; i < 8; i++) {
- Write_Max7219(i + 1, 0);
- }
- }
-
- //下面是做初始設定
- void setup() {
- pinMode(Max7219_pinCLK, OUTPUT);
- pinMode(Max7219_pinCS, OUTPUT);
- pinMode(Max7219_pinDIN, OUTPUT);
- delay(50);
- Init_MAX7219();
- Serial.begin(9600);
- }
-
- //下面是做持續的光源大小判斷,進而控制矩陣LED
- void loop() {
- readLDR = analogRead(LDR); //存取光敏電阻的電阻值
- Serial.println(readLDR);
- if (readLDR <= 100) //光線最亮的時候
- {
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[8][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[9][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[10][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[11][i]); //樹和落葉動畫效果
- delay(500);
-
- }
- else if (readLDR > 100 && readLDR <= 200) //光線尚可的時候
- {
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[1][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[2][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[3][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[4][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[5][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[6][i]); //樹和落葉動畫效果
- delay(500);
- for (byte i = 0; i < 8; i++)
- Write_Max7219(i + 1, symbol[7][i]); //樹和落葉動畫效果
- delay(500);
- }
- else //光線不足的時候
- {
- for (byte i = 0; i < 8; i++) {
- Write_Max7219(i + 1, symbol[0][i]); //顯示只有樹枝的樹
- }
- delay(500);
- }
- }
留言
張貼留言