幾年不使用,之前的知識都忘掉了。需要逐步撿起來。
1 熟悉按鍵的使用
2熟悉燈的控制
1 電路
我們將通過 MATLAB 的?Arduino
?支持包與 Arduino 板通信,讀取按鍵狀態并控制 LED 燈的亮滅。
-
按鍵:連接到 Arduino 的數字引腳(例如?
D2
),另一端接地。(arduino UNO板子上自帶了兩個按鍵,通過杜邦線將KEY-L連接到D2) -
LED:連接到 Arduino 的數字引腳(例如?
D13
,Arduino Uno 自帶 LED),另一端通過限流電阻接地。(uno板自帶)
2 功能
使用 MATLAB 和 Arduino 實現按鍵控制 LED 燈的程序。
3 代碼
app中查找arduino資源管理器
查看com口,方便編碼用(如果是matlab2022版本及以上,且只有一個arduino板掛在電腦上,可省略com口,matlab可以自己查到)
編碼: 按鍵為低電平。
arduinoObj = arduino("COM5", "Uno")
%Configure specified Arduino pins.
configurePin(arduinoObj, "D13", "DigitalOutput");
configurePin(arduinoObj, "D2", "Pullup"); %必須上拉,否則按鍵無法正確識別% main code
disp('按下按鍵控制 LED 燈(按 Ctrl+C 退出)...');
while true% 讀取按鍵狀態buttonState = readDigitalPin(arduinoObj, 'D2');% 控制 LED 燈if buttonState == 0 % 按鍵按下(假設按鍵按下為低電平)writeDigitalPin(arduinoObj, 'D13', 1); % 點亮 LEDdisp('LED 燈亮');elsewriteDigitalPin(arduinoObj, 'D13', 0); % 熄滅 LEDdisp('LED 燈滅');endpause(0.5); % 稍微延遲,避免過于頻繁讀取
end% 清理
% clear a;
disp('程序結束');
%Clean Up
%Clear variables that are not needed.
clear arduinoObj
4 結果
按鍵和LED關聯功能實現。按鍵一定要用上拉功能。
5 通過按鍵判斷是否停止程序
手動結束while true 會讓arduino產生的通信信息無法清除,為此把arduino板自帶的KEY_R按鍵使用,用它來控制程序啟停
KEY_R鍵必須按下,然后再按KEY——L鍵 ,程序才能一致執行;否則就會直接退出while循環。
Create an Arduino Connection
Create an Arduino connection using the specified device and connection parameters.
arduinoObj = arduino("COM5", "Uno")Configure Arduino Pins
Configure specified Arduino pins.
configurePin(arduinoObj, "D13", "DigitalOutput");
configurePin(arduinoObj, "D2", "Pullup");
configurePin(arduinoObj, "D3", "Pullup");Read and Write data
Read data from and write data to Arduino pins configured above.disp('按下按鍵控制 LED 燈(按 Ctrl+C 退出)...');
stopState = readDigitalPin(arduinoObj, 'D3')% 這是反向的?
buttonState = readDigitalPin(arduinoObj, 'D2')
while stopState~=0 %必須一致按著KEY R,才能才能一致循環% 讀取按鍵狀態buttonState = readDigitalPin(arduinoObj, 'D2');stopState = readDigitalPin(arduinoObj, 'D3');% 控制 LED 燈if buttonState == 0 % 按鍵按下(假設按鍵按下為低電平)writeDigitalPin(arduinoObj, 'D13', 1); % 點亮 LEDdisp('LED 燈亮');elsewriteDigitalPin(arduinoObj, 'D13', 0); % 熄滅 LED
% disp('LED 燈滅');endpause(0.5); % 稍微延遲,避免過于頻繁讀取
end% 清理
% clear a;
disp('程序結束');