# HW3_Arduino 人機介面 附程式碼
>撰寫人[name=AmiYaku1049] [首頁--天空路1049號](https://skys-kid-lai.github.io/1004/)
>>最後編輯[time=Tue, Mar 22, 2022 5:49 PM]
___
## 實驗目的
了解人機介面,並進行實作
## 實驗原理
透過設計程式碼並使用Ktduino積極體驗板及Arduino UNO 開發版,了解人機介面
## 實驗材料
◎Ktduino積極體驗板 x1
◎Arduino UNO 開發版 x1
◎杜邦線 x17
◎跟你默契好的可愛電腦 x1
◎USB 線 x1
## 實驗步驟
1.在Ktduino積極體驗板及Arduino UNO 開發版連接電路
2.在電腦Aduino編譯程式碼(程式碼在下方↓)
3.確定程式碼無誤,將電路用USB線連接至電腦
4.再編譯及上傳程式碼
5.紀錄輸出
### 程式碼(已經過改良,並非為參考文獻內原始程式碼)
```clink=
const int seg[7]={6,7,8,9,10,11,12}; //顯示信號接腳
const int scan[4]={2,3,4,5}; //掃描信號接腳
const int seg_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //七節顯示碼
const int column[4]={A2,A3,A4,A5};
const int bz=13; //蜂鳴器
unsigned char kn; //按鍵值
int disp[4]={0,0,0,0}; //緩衝區
int doot; //顯示變數
//逼聲函數原型
void beep(int pin, int counts);
//start set
void setup() {
for(int i=0; i<7; i++)
pinMode(seg[i],OUTPUT); //設定seg為輸出的接腳
for(int i=0; i<4; i++)
{
pinMode(scan[i],OUTPUT); //設定scan為輸出的接腳
pinMode(column[i],INPUT); //設定column為輸入的接腳
}
pinMode(bz,OUTPUT); //設定bz為輸出的接腳
}
//主程式
void loop() {
for(int i=3; i>=0; i--) //重複執行4個掃描週期
{
for(int j=7; j>=0; j--)
digitalWrite(seg[j],1); //關閉七節顯示器的訊號,防止殘影
for(int j=0; j<4; j++)
digitalWrite(scan[j],1);
digitalWrite(scan[i],0);
//輸出七節顯示器顯示訊號
doot=seg_code[disp[i]];
for(int j=7; j>=0; j--)
{
if(bitRead(doot,j))
digitalWrite(seg[j],1);
else
digitalWrite(seg[j],0);
}
//按鍵
for(int col=0; col<4; col++)
{
if(!digitalRead(column[col])) //判斷有無按鍵
{
while(!digitalRead(column[col])); //等待放開按鍵
kn=4*i+col; //計算鍵值,也就是輸出的數值
beep(bz,1); //逼聲
if(kn>=0 && kn<10) //判斷是否為數字鍵
{
for(int j=0; j<3; j++)
disp[3-j]=disp[2-j]; //將按鍵的值放入個位數,顯示時會顯示在個位數
disp[0]=kn;
}
delay(3);
break;
}
}
}
}
//逼聲
void beep(int pin, int counts)
{
for(int i=0; i<counts; i++)
{
tone(pin, 1000, 100); //發聲
delay(100); //靜音
}
}
```
## 實驗結果
按下Ktduino積極體驗板鍵盤,可更改七段顯示器的顯示
七段顯示器顯示結果:

## 實驗討論
實驗到執行的時候,依序按下1、2、3、4,會依序出現4、3、2、1,思考過後更換了電路接法,將原本連接在P6-4~P6-1的接線換順序連接,換成P6-1~P6-4後,依序按下1、2、3、4,就可依序出現1、2、3、4。
另,程式碼部分,若按照原本參考資料上之程式碼編寫,會出現第28行有錯誤之資訊。上方程式碼為改良後程式碼,將for迴圈改為倒數,則可編譯成功。
## 實驗心得
發現原本的方式會有錯誤的時候,我超級興奮的!終於有除錯的機會了!!
實驗結果的杜邦線多到看不清楚七段顯示器的結果,下次要注意了。
## 實驗文獻
>編者:艾迪諾
>出版日期:2017.01.06
>書名(頁數):Arduino全能微處理機實習:強效解析(p4-50~p4-55)
>出版社:全華圖書
>[color=#CE0000]