---
# System prepended metadata

title: Arduino

---

# Arduino
## Morse code light sensor
### Code File

* **final project:**

[identifylist2.ino](https://github.com/jason810496/Arduino-/blob/main/identifylist2.ino)

[input_keypad_output_led_45.ino](https://github.com/jason810496/Arduino-/blob/main/input_keypad_output_led_45.ino)

[input_serial_output_led_45.ino ](https://github.com/jason810496/Arduino-/blob/main/input_serial_output_led_45.ino)

(45 means 4.5sec per unit)

**(4.5sec per unit is much more accurate than 3.0sec per unit)**

* **others**

[LightStrength.ino](https://github.com/jason810496/Arduino-/blob/main/LightStrength.ino) **(distinguish light strength and print it on keypad)**

[identifylist.ino](https://github.com/jason810496/Arduino-/blob/main/identifylist.ino)

[input_keypad_output_led_30.ino](https://github.com/jason810496/Arduino-/blob/main/input_keypad_output_led_30.ino)

[input_serial_output_led_30.ino](https://github.com/jason810496/Arduino-/blob/main/input_serial_output_led_30.ino)

(30 means 3.0sec per unit)
### 想法:
**Arduino(A)**
負責輸出摩斯電碼的LED訊號

**Arduino(B)**
負責接收LED訊號,並輸出在七段顯示器和序列埠監控視窗

**方法?**
1. (A)在發送每段訊號前,先輸出一段==特定序列==
讓(B)知道何時開始接收
2. (B)每0.1秒判斷一次環境亮度,加入一==固定陣列==中,
 再與0-9的陣列做比較
### 流程圖
![](https://i.imgur.com/YoFxCKl.jpg)
![](https://i.imgur.com/z9qBq8W.jpg)

### 模擬圖
![](https://i.imgur.com/04t7YQ5.jpg)

* **Method 1**
> 開一個**固定陣列**(NowArray)==用來判斷何時接收訊號==
> 再開另一個陣列準備接收訊號(DataList)
> 每0.1sec判斷一次環境亮度(Eg:若亮度大於200判定為亮)
> 加入**NowArray**中(i.e. 將陣列元素**左移一格**再加入新的元素)
> 當**NowArray**等於我們預先設好的**特定序列**時
> **DataList**才開始接收訊號
> 最後再判別為哪個數字
> ```c++=
> //for example
> int NowArray[6]={};
> int DataList[30]={}
> int CorrectArray[6]={1,1,1,1,1,1};
> /*
> intput LightStrength
> if(LightStrength>200) append 1 to NowArray;
> else append 0 in to NowArray;
> 
> check if nowarray==CorrectArray
> yes:append LightStrength to DataList
> no:continue
> */
> int num1[30]={1,0,1,0,1,1.....};
> int num2[30]={0,1,0,1,1,1.....};
> //if DataList==num1 
> //if DataList==num2.....
>
> ```
* **Method 2**
>只需開一個**固定陣列**(Array)
>每0.1sec紀錄當前狀態,並加入**Array**中
>**隨時判斷**是否有符合的數字
>```c++=
>int Array[30]={};
>//intput Array now situation
>int num1[30]={1,1,1,0,1,1...};
>int num2[30]={1,1,1,0,0,0...}
>/*
>if Array==num1 output 1
>if Array==num2 output 2....
>*/ 
>```
### 總結
* **接收**
最後採取**方法2**,不過在判別數字時
還是有一定的機率會將**相鄰的數字**判別錯誤(畢竟數字0-9的Morse code 每個差異不大:++相鄰數字只有差一長或一短++)
例如:(A)發送123 而(B)接收12**4**
* **發送**
發送摩斯密碼前,需要先輸入資料
所以我們開發兩個版本
**1.** 在**序列埠監控視窗**輸入(Serial)
**2.** 在**數字板**(Keypad)
### 影片
* **succeed**
在序列埠視窗
{%youtube j82o2HINAhA %}
{%youtube oXgZXIjwEqw %}
在七段顯示器
{%youtube KZLupLYp92o %}
* **failed**
++幸運的話只差一位++
{%youtube t1xPoWfHwOA %}
也有可能少讀一位
{%youtube XyY-_XKlXDw %}
甚至差兩位
{%youtube JDl9t69nRSw %}
### 照片
* **Arduino(A)**
![](https://i.imgur.com/dACVFuD.jpg)


* **Arduino(B)**
![](https://i.imgur.com/RekYpIY.jpg)
### 元件:

:::spoiler  **Light**
![](https://i.imgur.com/GdJzMKk.jpg)
![](https://i.imgur.com/mi9K9Zx.jpg)

:::
:::spoiler  **電阻**
![](https://i.imgur.com/2gpPDgA.jpg)
:::

:::spoiler **感光元件**(光敏電阻)
![](https://i.imgur.com/LIS62CI.jpg)
![](https://i.imgur.com/zUKk1Sz.jpg)

:::
:::spoiler **七段顯示器**
![](https://i.imgur.com/MASTk3E.jpg)
![](https://i.imgur.com/CJY0Tb5.jpg)

:::
:::spoiler **數字板**
![](https://i.imgur.com/UHY54ek.jpg)

:::
:::spoiler **小麵包板**
 ![](https://i.imgur.com/KCCcvMp.jpg)
:::
:::spoiler **USB**
![](https://i.imgur.com/opOI7wU.jpg)
:::




