推動CDIO創新教學 - fcu.edu.t · RGB LED(套件為共陰極)是把紅(Red)、綠(Green)和藍...
Transcript of 推動CDIO創新教學 - fcu.edu.t · RGB LED(套件為共陰極)是把紅(Red)、綠(Green)和藍...
推動CDIO創新教學計算機程式語言 / 電子電路學
MATLAB for Arduino
Support Package
1
RGB LED 模組(共陰極)
RG
B
Ground
RGB LED(套件為共陰極)是把紅(Red)、綠(Green)和藍(Blue)三個顏色的 LED 燈封裝在一個 LED 中,藉由三種顏色明暗度的調節混合,改變LED顏色。基本資訊可參閱Arduino套件光碟CD內,第05章炫彩 RGB LED 說明
2紅、綠和藍三原色 共陰極RGB LED
RG
B
Ground
將RGB LED 板上 “R” ,“G” ,“B” ,“–” 四個接腳分別連接“D9”, “D10”, “D11”數位腳位與GND(接地)腳位,記得R/ G/B/三個接腳要加上 220Ω電阻
3
220ΩRGB LED(共陰)
Arduino接線線路
4
開始來寫個簡單的程式吧!
RGB LED 三原色混色程式範例(紅/綠/藍/黃/紫/青/白)
5
%writeDigitalPin 利用0(暗)/1(亮)混和如紅/綠/藍/黃等基本顏色clear; clc;
a_board = arduino(); %指派Arduino板代號為a_board
RED_PIN = 'D9'; % D11 接紅GREEN_PIN = 'D10'; D10 接綠BLUE_PIN = 'D11'; % D9 接藍tic % 計時器起始 終止為toc while toc < 20 %時間小於20秒時,執行while迴圈
% Red
writeDigitalPin(a_board, RED_PIN, 1 );
writeDigitalPin(a_board,GREEN_PIN, 0 );
writeDigitalPin(a_board, BLUE_PIN, 0 );
pause(1);
% Green
writeDigitalPin(a_board, RED_PIN, 0 );
writeDigitalPin(a_board,GREEN_PIN, 1 );
writeDigitalPin(a_board, BLUE_PIN, 0 );
pause(1);
% Blue
writeDigitalPin(a_board, RED_PIN, 0 );
writeDigitalPin(a_board,GREEN_PIN, 0 );
writeDigitalPin(a_board, BLUE_PIN, 1 );
pause(1);
6
% Yellow (Red + Green)
writeDigitalPin(a_board, RED_PIN, 1 );
writeDigitalPin(a_board,GREEN_PIN, 1 );
writeDigitalPin(a_board, BLUE_PIN, 0 );
pause(1);
% Purple (Red + Blue)
writeDigitalPin(a_board, RED_PIN, 1 );
writeDigitalPin(a_board,GREEN_PIN, 0 );
writeDigitalPin(a_board, BLUE_PIN, 1 );
pause(1);
% Cyan (Green + Blue)
writeDigitalPin(a_board, RED_PIN, 0 );
writeDigitalPin(a_board,GREEN_PIN, 1 );
writeDigitalPin(a_board, BLUE_PIN, 1 );
pause(1);
% White (Red + Green + Blue)
writeDigitalPin(a_board, RED_PIN, 1 );
writeDigitalPin(a_board,GREEN_PIN, 1 );
writeDigitalPin(a_board, BLUE_PIN, 1 );
pause(1);
end
clear % 執行完後清除
RGB LED 三原色混色,如之前的學習範例,利用writePWMDutyCycle(a, pin, dutyCycle) 與writePWMVoltage(a, pin, voltage)兩個指令進行三原色LED明亮度變化,調整RGB LED 三原色混色效果
writePWMDutyCycle(a, pin, dutyCycle) :
dutyCycle值介於0~1
writePWMVoltage(a, pin, voltage)
voltage值介於0~5
7
RGB LED 三原色writePWMDutyCycle混色(紅綠)
8
% writePWMDutyCycle 利用dutyCycle於1~0間變化調整LED混色clear; clc;
a_board = arduino(); %指派Arduino板代號為a_board
RED_PIN = 'D9'; % D9 接紅GREEN_PIN = 'D10'; %D10 接綠BLUE_PIN = 'D11'; % D11 接藍RGB_level = linspace(1,0,30); %將顏色的dutyCycle分為30等分tic % 計時器起始 終止為toc while toc < 20 %時間小於20秒時,執行while迴圈
for i = 1 : length(RGB_level)
%紅色dutyCycle於1~0間分30等份變化,->電壓 = dutyCycle5V
writePWMDutyCycle(a_board,RED_PIN, RGB_level(i));
%綠色dutyCycle於1~0間分30等份變化,->電壓 = dutyCycle5V
writePWMDutyCycle(a_board,GREEN_PIN, 1 - RGB_level(i));
%藍色dutyCycle=0,->電壓0V 暗writePWMDutyCycle(a_board, BLUE_PIN, 0 );
pause(0.1);
end
for i = 1 : length(RGB_level)
writePWMDutyCycle(a_board,RED_PIN, 1 - RGB_level(i) );
writePWMDutyCycle(a_board,GREEN_PIN, RGB_level(i));
writePWMDutyCycle(a_board, BLUE_PIN, 0 );
pause(0.1);
end
end
clear % 執行完後清除
RGB LED 三原色writePWMVoltage混色(紅綠)
9
% writePWMVoltage 利用voltage於5~0V間變化調整LED混色clear; clc;
a_board = arduino(); %指派Arduino板代號為a_board
RED_PIN = 'D9'; % D9 接紅GREEN_PIN = 'D10'; %D10 接綠BLUE_PIN = 'D11'; % D11 接藍RGB_V_level = linspace(5,0,30); %將顏色的voltage分為30等分tic % 計時器起始 終止為toc while toc < 20 %時間小於20秒時,執行while迴圈
for i = 1 : length(RGB_V_level)
%紅色dutyCycle於1~0間分30等份變化writePWMVoltage(a_board,RED_PIN, RGB_V_level(i));
%綠色dutyCycle於1~0間分30等份變化writePWMVoltage(a_board,GREEN_PIN, 5 - RGB_V_level(i));
%藍色dutyCycle=0,->電壓0V 暗writePWMVoltage(a_board, BLUE_PIN, 0 );
pause(0.1);
end
for i = 1 : length(RGB_V_level)
writePWMVoltage(a_board,RED_PIN, 5 - RGB_V_level(i) );
writePWMVoltage(a_board,GREEN_PIN, RGB_V_level(i));
writePWMVoltage(a_board, BLUE_PIN, 0 );
pause(0.1);
end
end
clear % 執行完後清除
利用 rand指令,查閱rand使用方法,試看看
10
clear; clc;
a_board = arduino(); %指派Arduino板代號為a_boardRED_PIN = 'D9'; % D9 接紅GREEN_PIN = 'D10'; %D10 接綠BLUE_PIN = 'D11'; % D11 接藍tic % 計時器起始 終止為toc
while toc < 20 %時間小於20秒時,執行while迴圈RGB_level = rand(1,3);%產生13隨機(rand)陣列, 值介於0~1間%紅色dutyCycle = RGB_level(1)
writePWMDutyCycle(a_board,RED_PIN, RGB_level(1));
%綠色dutyCycle = RGB_level(2)
writePWMDutyCycle(a_board,GREEN_PIN, RGB_level(2));
%藍色dutyCycle = RGB_level(3)
writePWMDutyCycle(a_board,BLUE_PIN, RGB_level(3));
pause(0.5);
end
clear % 執行完後清除