先從簡單的LED控制開始吧
另外,因為我不是軟體出身,所以code寫得很爛,請多包涵:D

上面的影片,主要是利用Arduino的數位輸出腳,來控制8x8的LED
顯示0~9的字型

首先,利用手動來控制 8x8 LED發亮,並且了解一下腳位如何控制
這顆8x8 LED是在光華商場對面樓下的電子材料行買的
料號: LM12883SRWK 共陰極 矩陣式8x8 LED

如何確認控制腳位? 先在excel框好8x8的格子

左邊的圖,上面那排是LED的正極(Anode)腳位4,7,2,8,12,1,14,9
左邊那排是LED的負極(Cathode)腳位13,6,5,10,3,11,15,16


如果要讓第一行,第一列(a)的LED發亮,就要在腳位4灌電壓,腳位13下地
(b) = pin7 (+),pin6 (GND) 依此類推
但唯一的問題就是,因為這只有16支腳,若要同時間做出fig-2這種顯示是無法的
因為,當你亮(j) = pin4(+) , pin6(GND) , 同時要亮(k) = pin7(+) , pin13(GND)
這時候pin4(+) , pin13(-) = (a) , pin7(+) , pin6(GND) = (b)就會變成fig-3
不過這問題,稍後我們可以利用軟體的小技巧來達到fig-2的效果


接下來在excel上面先畫好我們想要的字型,例如0~9
因為Arduino Uno只有提供14支數位的輸出腳,所以我們用6x6的格子來畫
所以6+6=12支腳,另外我們正腳位使用7,2,8,12,1,14
對應Arduino的數位輸出腳1~6 , 負腳位依此類推


根據這個電路圖,在每個LED正腳位回到DIGITAL輸出之間串220ohm的電阻
避免過大電流燒掉LED或是造成亮度不均的問題

接下來是原始碼

void num0(int a) //設定數字0要怎麼顯示,請參考上圖
{
digitalWrite(7, LOW); //把想亮的列設成Low,不想亮的設成High
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(3, HIGH); //把pin3設成High(+5V),這時就會出現fig-1
delay(a); //停頓一個時間
digitalWrite(3, LOW); //把pin3設成Low,這時候就會全部不亮

digitalWrite(7, LOW); //把想亮的列設成Low,不想亮的設成High
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH); //把pin4設成High(+5V),這時就會出現fig-2
delay(a); //停頓一個時間
digitalWrite(4, LOW); //把pin4設成Low,這時候就會全部不亮

digitalWrite(7, LOW); //把想亮的列設成Low,不想亮的設成High
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH); //把pin5設成High(+5V),這時就會出現fig-3
delay(a); //停頓一個時間
digitalWrite(5, LOW); //把pin5設成Low,這時候就會全部不亮
}
//由於delay的時間非常短,利用人眼視覺暫留的方式快速的亮暗每一行
//最後眼睛就會看到0這個數字,也就是fig-4
//下列1~9的字型,就按照數字0的方式編寫
void num1(int a)
{
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num2(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num3(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num4(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num5(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num6(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num7(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num8(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void num9(int a)
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(3, HIGH);
delay(a);
digitalWrite(3, LOW);

digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(4, HIGH);
delay(a);
digitalWrite(4, LOW);

digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(5, HIGH);
delay(a);
digitalWrite(5, LOW);
}
void setup() //設定Arduino的digital pin 1~12為輸出
{
pinMode(1, OUTPUT);
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);
}
int displayspeed = 50; //設定顯示每個數字間所花的時間
int blinking = 8; //設定一個數字閃爍的程度,這個值可微調
int a = 0; //設定一個參數a=0

void loop() //主程式
{
while(a < displayspeed) //讓0這個字多跑幾次迴圈,來達到數字0顯示的時間
{
num0(blinking); //把blinking=8這個值,塞入副程式的delay時間
a++;
}
a = 0; //重置a=0
while(a < displayspeed)
{
num1(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num2(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num3(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num4(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num5(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num6(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num7(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num8(blinking);
a++;
}
a = 0;
while(a < displayspeed)
{
num9(blinking);
a++;
}
a = 0;
}


以上
有問題的請發問
ps:我的code寫得很爛,請鞭小力一點.....XD



歡迎加入粉絲團
有即時的網站更新通知,還可以留言發問唷
在圖示點"讚",就可以啦~~

洛斯里克 發表在 痞客邦 留言(5) 人氣()



來研究一下這塊板子的placement吧
PS: Placement 指的是零件位置圖和對應的功能方塊

USB to UART converter: 把連接電腦端的USB訊號轉成UART (TX/RX) 給
MCU,主要使用於upload code到MCU

MCU: 這塊板子的心臟,等同電腦的CPU,主要功能是利用寫在MCU內的軟體,
去控制週邊IO動作

Digital I/O: 數位的輸入輸出阜,MCU可藉由這14支腳去讀數位值,或是輸出H/L 準位

Analog input: 類比的輸入,MCU可藉由這6支腳,讀取類比的值並轉成數位值 (ADC)

Reset button: 壓下去之後,可以重置MCU的動作

PWR on LED: 當USB or DC-in的電壓進來之後會亮起

16MHz X'Tal: 用於USB to UART converter和MCU工作用的Clock

Debug LED: 可以利用數位腳的第13支來控制這顆LED亮或暗,主要用於寫code時
debug使用

USB (Data+PWR): 連接板子和電腦的USB插槽,除了可以upload code到板子
之外,也可提供+5V給板子當電源使用

TX/RX LED: 當upload code到MCU時,這兩顆LED會同時跟著閃爍

Fuse: 位於USB的+5V端的保險絲

7~12V DC-in: 可以外接充電器,但輸入電壓必須在7~12V內

5V LDO: 把7~12V的DC-in轉成+5V電壓提供給板子

3.3V LDO: 把+5V轉成3.3V,主要是提供PWR function上的3.3V的孔給外部
電路使用

PWR function: Vin = 可外接7~12V給板子電源,5V = 提供外部電路電壓
,3.3V = 提供外部電路電壓,RESET = 短路到地的時候會重置MCU

Compare Circuit: 這是一個比較用的電路,當同時插著USB還有DC-in的時候,
這個電路會切斷USB的+5V來源,避免兩個電壓打架

備註:
Arduino UNO 電路圖 下載
另外附上零件位置圖




歡迎加入粉絲團
有即時的網站更新通知,還可以留言發問唷
在圖示點"讚",就可以啦~~

洛斯里克 發表在 痞客邦 留言(0) 人氣()



前幾天,終於收到網路上訂購的包裹,這小小的信封
袋裡面有一個紅色的小盒子。

打開紅色的盒子,裡面裝著Arduino UNO最新的板子
這個是從藝科資訊網路下單購買,郵寄到家裡。

其實盒子非常小一個,當初在網路Survey的時候
以為會跟一般市售軟體的那種大小的包裝,沒想到
其實大小跟保險套盒子的包裝差不多。

打開盒子,裡面裝著板子,還有貼紙跟版權說明書。

正面照一張

背面也來一張

這樣一盒售價$1090台幣,那它有什麼功能呢?
它標榜著,即使設計者本身,對於軟體或是硬體完全
不熟悉,甚至完全不會,可以藉由這個Arduino的
母板,搭配簡單又直覺式的軟體語法,來達成電子產
品的設計。

相關網址:
Arduino 官方網站
Arduino.Tw 台灣
藝科資訊



歡迎加入粉絲團
有即時的網站更新通知,還可以留言發問唷
在圖示點"讚",就可以啦~~

洛斯里克 發表在 痞客邦 留言(3) 人氣()

1
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。