(1)重新測試 LED 閃爍, 但改用三色 LED 模組 !
(a)拿出三色 LED 模組, 參考前面(A)說明, 用兩條杜邦公母線, 準備連接到 Arduino Uno板子。
(a1)一條從 V (廠商標示錯誤, 其實應該是 GND)連接到 Uno 板子的 GND 接地(三個GND任選一個) 。
(a2)一條從 R 連接到 Uno 板子的 Pin 13 (不要懷疑, 就是 13 腳的插孔 !
如果你不喜歡看到亮紅色, 可改接 G 綠色或是 B 藍色。
(b)請在螢幕左上角用記事本(Notepad)顯示你的學號與姓名(就是用滑鼠右鍵點選建立新文字文件啦)!
(c)開啟 Arduino IDE 並確定板子Uno 與 COM Port 都設定正確(從 Tools 設定);
(d)開啟內建範例 Blink (上週測過的) :
File 檔案 > Examples 範例 > 01.Basics 基本 > 選 Blink 閃爍
(e)點按 IDE 的 上傳圖示做編譯連結並
把程式機器碼上傳(Upload)到 Arduino 板子內(會自動執行), 看看LED 閃爍情形 !!
(f)確定 LED 亮燈的時候, 用手機拍下螢幕全畫面(把Arduino 板子也拿在螢幕正中央下方),
或是用 CTRL_PrintScrn 抓下全螢幕畫面也可以 :-)
這是今天要繳交的第一張畫面或圖片 !
請注意 , 圖片上方必須用至少12字, 至多50字稍微描述看到的實驗狀況。
(2)測試 LED 慢慢變暗 (或慢慢變亮) (測試 analogWrite( ) 的功能) !
(a)保持三色 LED 模組連接方式不變;
就是三色 LED 模組的 R (或你要的顏色的pin接腳)連接到 Uno 板子的 Pin 13
(b)開啟內建範例 Fade (淡入淡出) :
File 檔案 > Examples 範例 > 01.Basics 基本 > 選 Fade
** 注意, 這次是選 Fade , 不是 Blink 喔 !
(c)點按 IDE 的 上傳圖示做編譯連結並
把程式機器碼上傳(Upload)到 Arduino 板子內(會自動執行), 看看LED 閃爍情形 !!
奇怪 !
怎 LED 都不亮了 ?!
別緊張 !!! 因為程式是控制 pin 9 不是 13 接腳啦 !!
(d)先修改程式碼裡面的int led = 9;
改為int led = 13; //(把 9 改為 13 即可)
*** 這個範例這樣先在很前面用變數代表 led 的 pin 腳比較好, 要換很方便 !
然後再次點按 IDE 的 上傳圖示做編譯連結並
把程式機器碼上傳(Upload)到 Arduino 板子內(會自動執行), 看看LED 變化情形 !!
啥!? 騙人 !
沒慢慢變暗啊 !?
也是別緊張, 沒騙人啦 ! 這是因為..
因為 .. Pin 13 這支腳沒支援類比(Analog, 大陸稱為"模擬")輸出啦 !!
** Uno 板子只有 pin 3, 5, 6, 9, 10, 11 這六支 pin 腳才支援類比(Analog)輸出,
你注意看 Arduino Uno 開發板上這六支 pin 腳數字旁邊有個 - 號 或 ~ 號, 這是有意義的喔 !
(e)把程式碼的 13 改回 9, 或是重新載入範例 Fade 也可以;
然後, 把連接在 Uno 板子 13 腳的杜邦公母線改連接到 Uno 板子的 Pin 9 準備重新測試!
就是三色 LED 模組的 R (或你要的顏色的pin接腳)連接到 Uno 板子的 Pin 9
(f)再次點按 IDE 的 上傳圖示做編譯連結並
把程式機器碼上傳(Upload)到 Arduino 板子內(會自動執行), 看看LED 變化情形 !!!
! Bingo 有了ㄟ ! 真的會慢慢變暗以及慢慢變亮了ㄟ :-)
(g)確定 LED 亮一半亮度左右的時候 ,
用手機拍下螢幕全畫面(把Arduino 板子也拿在螢幕正中央下方),
或是用 CTRL_PrintScrn 抓下全螢幕畫面也可以 :-)
這是今天要繳交的第 2 張畫面或圖片 !
請注意 , 圖片上方必須用至少12字, 至多50字稍微描述看到的實驗狀況。
**還有, 請注意也要保持螢幕左上角用記事本(Notepad)顯示你的學號與姓名!!
**另外, 你也可以把 R 換成 G 或 B 的接腳換 LED 顏色 測試看看 !
**甚至, 也把 pin 9 改為其他如 pin 8, 7, 6 等測試看看(程式碼也要記得改對應接腳號碼)
**再來, 想一想如何同時控制三種顏色組合照你想要的意思做變化 !?
試著寫程式測試看看 ! (可自己上網找資料, 之後也會教到)
關於 digitalWrite( ); 與 analogWrite( ); 的差別上課會講解!
簡單說, digitalWrite( ); 只能送出 1 或 0
但是 analogWrite( ); 可以送出 0 到 255 的值(注意如果送出 256 則會變 0,
輸出 258 會變 2; 就是相當於 %256 除以 256 取餘數 !
你可以自己看看 Arduino 的參考手冊(Reference):
點 Arduino IDE 的 Help > 再點下拉選單中的 Reference 參考
這時會開啟一個網頁, 不過不是網路上的, 是在你電腦上的 Arduino 參考手冊 !
在 Functions (函數, 函式)之下就可找到 digitalWrite( ) 與 analogWrite( );
分別點入即可看到各自的說明與範例(英文看不太懂沒關係, 可以複製貼到 Google 翻譯大略看看:-) !!
** 也可以連入 Arduino.cc/en/Reference/ 網頁查看!
** 如果英文不太好, 在開始上課的第三篇就是中文的Arduino手冊 喔 !
** 注意 Uno 板子只有 Pin 3, 5, 6, 9, 10, 11 這六隻腳使用 analogWrite( ); 有效果 !
其他接腳如果使用 analogWrite( )輸出小於128之時則等同使用 digitalWrite( ) 輸出 LOW (就是 0)的值;
當然, 輸出為128或更大(目前最大是255)則等同使用 digitalWrite( ) 輸出 HIGH (就是 1) 的值。
** 再注意, 如果你企圖用 analogWrite( ) 輸出大於 255 的值則會被轉為該值除以256的餘數;
也就是說, 企圖輸出 256 就是等同輸出 0, 企圖輸出 258 就等同要輸出 2 (258除以256的餘數是2) 。
** 來看看這個 ArduBlock 程式碼
(沒完全對應, 但功能與內建的 Fade 範例完全相同)
補充說明:
Q: 有同學問說不是聽說連接 LED 燈要接一個電阻怎我們都不必?
A: 因為我們用的是模組(又稱模板), 就是已經把必要零件都用個小電路板整合好了啦 !
如果你用裸體的 LED 小燈, 那就要接個 150歐姆左右的電阻以免把 LED 燒掉 !
不過, 如果找不到電阻, 就串接兩個 LED 也是可以啦 !
假如你使用 Arduino IDE 1.6.6 或之後的版本 ,
則匯入這範例之後, 可切換到範例目錄內可以看到有教你如何連接 LED 燈的圖
如果你已經把該 Fade 範例匯入了 File 檔案 > Examples 範例 > 01.Basics 基本 > 選 Fade
現在叫它秀出該範例的目錄內容: Sketch 草稿碼 > 顯示草稿碼資料夾 Show Sketch Folder
你應該有看到可以直接敲 CTRL_K 快速顯示該範例的目錄 ;
以下就是 Fade 這目錄的內容:
把該圖點兩下就可以看到建議的連接方式:
* 關於電阻、麵包板(Breadboard) 使用原則、為什麼 LED 需要串聯電阻等等,
請參考蔡老師寫的 Arduino 初體驗 Arduino_000.pdf , 裡面有詳細說明 !
* 想抓更新的 IDE 版本, 已經幫忙抓回 IDE 1.8.7 版本並加入 ArduBlock 放在學校數位學習網站:
你可以點這裡抓已加入 ArduBlock 官方最後一版 的 Arduino 1.8.7 (184MB)
你也可以點這裡抓這已經放入 ArduBlock 的 Arduino IDE 1.6.6版(154MB)
(3)測試蜂鳴器到底該如何接才有聲音 ?
(a)把蜂鳴器的中間接腳用杜邦公母線連接到 Arduino 的 5V
(b)再拿兩條杜邦公母線, 先假設蜂鳴器模組上的標示正確,
則該把標示 In 或標示 S 那腳連接到 Arduino 的 Pin 8,
(因為該範例使用 Pin 8 發出信號! );
(c)另一隻標示GND或標示減號 - 的當然要接到 Arduino 的地(GND);
(d)開啟 Arduino IDE 並確定板子Uno 與 COM Port 都設定正確(從 Tools 設定);
(e)開啟內建範例 toneMelody :
File 檔案 > Examples 範例 > 02.Digital > 選 toneMelody
(f)請確定在螢幕左上角用記事本(Notepad)顯示你的學號與姓名(就是用滑鼠右鍵點選建立新文字文件啦)!
(g)點按 IDE 的 上傳圖示做編譯連結並
把程式機器碼上傳(Upload)到 Arduino 板子內(會自動執行), 看看有沒有聲音 !?
** 如果沒有聲音, 那表示標示錯誤, 必須把標示 In 或 S 的接腳改連接到 Uno 板子的 GND,
然後把標示 - 減號的改連接到 Arduino 板子的 Pin 8 接腳再次重新測試 !
(我測試過了, 本系這次買到的蜂鳴器模組標示是正確的:-)
確定有聲音了, 用手機拍下螢幕全畫面(把Arduino 板子也拿在螢幕正中央下方),
或是用 CTRL_PrintScrn 抓下全螢幕畫面也可以 :-)
這是今天要繳交的第 3 張畫面或圖片 !
以下是 toneMeloday 這內建範例的內容,
此程式碼用到 pitched.h 內定義各音符的頻率 !
你可以自己在 Arduino IDE 點開該檔案(上課會 Demo)並看看,
例如中央 A (即A4) 的頻率是 440 Hz (學過鋼琴或樂理不是太爛的都知道 :-)
//toneMelody.cpp
#include "pitches.h"
// notes in the melody:
int melody[ ] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4
};
int kkk = sizeof(melody)/sizeof(int); /// kkk 表示有幾個音符在 melody[ ]
/// 注意, 上面這句是我新加入的 !
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4
};
void setup() {
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < kkk; thisNote++) { /// kkk 是幾個音符 !
/// 注意, 上面的 kkk 原先在範例中是寫 8, 現在改用上面算出的 kkk
// to calculate the note duration, take one second
// divided by the note type.
//e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
// to distinguish the notes, set a minimum time between them.
// the note's duration + 30% seems to work well:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// stop the tone playing:
noTone(8);
}
}
void loop() {
// no need to repeat the melody.
}
//
關於 Arduino IDE 內建音符與頻率對照表 pitches.h 這檔案,
你可以在叫入以上範例之後, 點該 pitched.h 頁面查看對照表之外,
也可以點這連入 arduino.cc 查看關於 tone 的教學網頁
你可以把以上範例中的 melody[ ] 和 noteDurations[ ] 兩個陣列(Array)換為以下內容,
看看測試時會聽到蝦密音樂 !?
(_ 這個測試純是好玩, 不必繳交這個測試的畫面也不必描述結果! _)
該兩個陣列(Array)是記錄歌曲音符與節拍長度的資訊 !
//Super Mario; 超級馬力
int melody[ ] = {
NOTE_E4, NOTE_E4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_G4, NOTE_G3,
NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3,
NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
NOTE_C4, NOTE_G3, NOTE_E3, NOTE_A3, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3,
NOTE_E4, NOTE_G4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_B3,
NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3, NOTE_C4, NOTE_A3, NOTE_C4,
NOTE_D4, NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_C5, NOTE_C5, NOTE_C5,
NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_DS4, NOTE_E4, NOTE_GS3, NOTE_A3,
NOTE_C4, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_DS4, NOTE_D4, NOTE_C4,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3,
NOTE_G3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4,
NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_A3, NOTE_G3
}; //
int kkk = sizeof(melody)/sizeof(int); /// kkk 表示有幾個音符在 melody[ ]
// note durations: 4 = quarter note, 8 = eighth note, etc.:
////////
int noteDurations[ ] = {
8,4,4,8,4,2,2,
3,3,3,4,4,8,4,8,
8,8,4,8,4,3,8,8,3,
3,3,3,4,4,8,4,8,
8,8,4,8,4,3,8,8,2,
8,8,8,4,4,8,8,4,8,8,
3,8,8,8,4,4,4,8,2,
8,8,8,4,4,8,8,
4,8,8,3,3,3,1,
8,4,4,8,4,8,4,8,
2,8,4,4,8,4,1,
8,4,4,8,4,8,4,8,2
};
///////// End of Super Mario; 超級馬力
// 注意, 程式中要改控制的 Loop 次數:
// iterate over the notes of the melody:
for (int thisNote = 0; thisNote < kkk; thisNote++) {
///
(4)測試以下小程式碼, 然後試著自己稍微亂改內容之後,
寫出觀察到的測試結果(最少20字, 最多50字);
緊接著貼入你修改後的全部程式碼(上課會 Demo 如何做 ! )
(注意, 這第四小題是要貼程式碼, 不是貼螢幕抓圖喔 !)
//(4)第四小題, 要寫測試狀況, 並複製你改過後的程式碼貼入簽到文章第四項!
// 測試看看發出蝦密聲音 ? by tsaiwn@ydu.edu.tw
int gg = 8; // buzzer Pin 接蜂鳴器
int lowFREQ = 168; // 最低發音頻率
int highFREQ = 888; // 最高發音頻率
/// 隨便寫的 :-)
int yya =6, yyb=9; // 間隔 千分之 6 秒(升高), 千分之9秒(下降)
int highLast = 1234; // 1.234 秒, 高音頻持續
int highSTOP = 1; // 1 表示趨近於 0
int lowSTOP = 888; // 0.888 秒; 每次停止音頻 0.888秒
// 可以修該以上參數重新測試看看
void setup( ){
pinMode(gg, OUTPUT);
tone(gg, 262); delay(999); noTone(gg); delay(533);
tone(gg, 294);delay(999); noTone(gg); delay(533);
tone(gg, 330);delay(2222); noTone(gg); delay(533);
}
int timeLast = 8;
void loop( ) {
if(millis( ) > timeLast*1000) return;
for(int i=lowFREQ; i <= highFREQ; ++i) {
tone(gg, i); delay(yya);
} // for(i
delay(highLast);
noTone(gg ); // 停止發聲音
delay(highSTOP); // highSTOP = 1
for(int i=highFREQ; i >= 222; --i) { // 故意只降低到 222
tone(gg, i); delay(yyb);
} //
noTone(gg );
delay(lowSTOP); // lowSTOP = 888 = 0.888 秒
} // loop(
////////////////////
** 注意, 必須稍做修改並測試, 不可把我的範例直接貼上你簽到文章喔 !
(5)讓蜂鳴器演奏兩隻老虎 , 如果可以, 順便閃爍 LED 則更好 :-)
請用 Google.com 查詢 arduino 蜂鳴器 + 兩隻老虎
自己找一篇喜歡的兩隻老虎範例, 複製其範例程式碼來測試, 並貼入你簽到文章證明!
(注意, 這第五小題也是要貼程式碼, 不貼螢幕抓圖喔 !)
如果你沒找到滿意的,
可以點這連入以下這會唱又會點亮LED燈的作品案例:
http://www.maoyouhui.org/forum.php?mod=viewthread&tid=307
請想辦法把程式代碼複製去 Arduino 測試,
注意程式碼中使用的 Arduino pin 顯然需要改喔(該範例的tonepin 是 5, led 是 1) !!
(上課會 Demo 展示, 請注意看喔 !)
並且要複製程式代碼貼在你的簽到文章內第五項 (5)以下是我測試的"兩隻老虎"程式碼: 之下方!
通常網頁如果有程式碼, 大多會提供一個 "複製代碼" 的按鈕以便複製,
但是, 你會發現複製之後, 貼入文字窗後有時會全部變一列很難看 ,
此時你可以開啟 WordPad (壓住左下角的視窗鍵並按 R 表示要 RUN, 然後輸入 wordpad 並按 ENTER鍵 即可),
把複製來的程式代碼先貼入 WordPad 窗內, 隨便按一下 ENTER 鍵,
然後敲 CTRL_A 全選, CTRL_C 複製, 再來就可到其他窗去 CTRL_V 貼上 !
請注意 , 以上網頁中的範例是自己定義各音符頻率對應的變數名稱,
各頻率不太符合標準; 其中 L6 代表低音 6 (La), M5 代表中音 5 (Sol),
如果你發現少了 M6, 就自己加入, 它的頻率就是 L6 的兩倍;
同理, M7 頻率是 L7 的兩倍 !!
以下是兩隻老虎這兒歌的簡譜:
其實, 有了這"兩隻老虎 "的簡譜 ,
你可以把(3)中說的 Arduino 範例 toneMelody 程式碼的內容稍微修改就可奏出兩隻老虎 囉 !
就是說, 只要換掉範例中的 melody[ ] 和 noteDurations[ ] 這兩個陣列(Array);
注意, 中音的 1 (Do) 就是 C4, 中音的 2 (Re) 就是 D4, ...
(就是說 C D E F G A B = 1 2 3 4 5 6 7)
根據Arduino 內建範例檔案 pitches.h, 則兩隻老虎 第一小節為:
int melody[ ] = {
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4,
//...
}; // melody[ ]
int noteDurations[ ] = {
4,4,4,4,
// ...
}; // noteDurations[ ]
/// 低音的 5 (Sol) 就是 NOTE_G3, 低音的 6 (La) 就是 NOTE_A3
那..用該toneMelody 範例修改後要如何順便控制 LED 閃爍呢?
其實很簡單, 在該範例程式碼中每次發音之後, 有以下這兩句:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
這意思是拖延 1.3 倍的該音符時間,
我們只要改為如下五句即可:
int pauseBetweenNotes = noteDuration * 1.00; // 等倍數
// 弄亮 LED, 就是用 digitalWrite(ledPin, HIGH); 輸出 HIGH 到 LED 的 Pin 腳
delay(pauseBetweenNotes);
// 弄熄掉 LED, 就是 digitalWrite(ledPin, 0); // 0 就是 LOW; 注意 ledPin 這變數 !
delay( 0.3 * noteDuration); // 沒聲音的時間不要亮燈 !
(6)這子題只是要你測試兩個 Arduino 的 .ino 檔案,
自己測試並稍微研究一下程式碼即可, 不必抓圖也不必貼程式碼 :-)
點這抓回 moreWeek03.zip (滑鼠右鍵另存新檔)
然後, 解壓縮之後你可以看到兩個子目錄(資料夾), 裡面各有一個測試蜂鳴器的範例,
請把兩個範例都叫入測試看看 ! (上課會 Demo)
(兩個範例使用不同方法發音 , 不要因為不必繳交就不測試喔 ! )
(7)加分題(影片) -- 拍下你實驗過程影片可有額外加分, 並可抵免缺課三小時 !
(a)把你實驗三色LED與蜂鳴器的過程拍成影片(至少30秒, 至多3分鐘)上傳到 youtube
標題要含有"育達科大多遊系Arduino實驗第三次",
關鍵字(keyword)要有"育達科大" 和 "多遊系", 和 "Arduino";
(b)然後把該影片的網址分享在你今天簽到文章最後,
標題寫"你學號 你姓名 的第三次 Arduino 實驗證據: ";
*** 請注意: 這影片中要先拍到你螢幕上 Notepad 顯示你學號姓名,
還有, 至少要看到你正在使用 Arduino IDE,
包括開啟IDE後設定板子型號, 設定板子所在的 COM Port ,
然後開啟或修改 LED 閃爍範例並上傳到 Uno 板子執行,
然後轉而拍你的 Arduino 板子 LED 燈閃爍的情況 ! 注意整個影片至少30秒, 至多3分鐘 !!
C調 3/4 我是隻小小鳥
1 1 1 |3.21 |3 3 3 |5. 43 |5 4 3|2--|
我是隻 小 小鳥,飛就飛,叫 就叫,自由逍 遙。
2- 17b |1 2 3 |4- 32 |3 4 5 | 54 3 2|1--|
我 不知 有憂愁,我不知 有煩惱,只是 常歡 笑。
VIDEO
叮噹 -- 我是隻小小鳥
VIDEO
丁噹-我是一隻小小鳥-MV官方完整版(Youtube)
小星星
VIDEO
//好啦, 關於"兩隻老虎", 再給多一點提示,
//以下是"兩隻老虎"的前四個小節..
//toneMelody.cpp
#include "pitches.h"
// notes in the melody:
int melody[ ] = {
NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_C4,
NOTE_E4, NOTE_F4, NOTE_G4, 0, NOTE_E4, NOTE_F4, NOTE_G4, 0,
0
}; // 以下這句很重要 ! 很重要 ! 很重要 !
int kkk = sizeof(melody)/sizeof(int); /// kkk 表示有幾個音符在 melody[ ]
/// 注意, 上面這句是我新加入的 ! 原先範例直接寫 8 那樣是不好的寫法 !!
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
4,4,4,4, 4,4,4,4,
4,4,4,4, 4,4,4,4,
0
}; // 注意這陣列(Array)的元素個數不可比放音符的 melody[ ] 陣列還少 !!
// //注意程式中那句 for( int ... 的 8 要改為 kkk
//////
點這看蔡老師寫的 "Arduino 初體驗" 講義(pdf)