几年不使用,之前的知识都忘掉了。需要逐步捡起来。
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); % 点亮 LED
disp('LED 灯亮');
else
writeDigitalPin(arduinoObj, 'D13', 0); % 熄灭 LED
disp('LED 灯灭');
end
pause(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); % 点亮 LED
disp('LED 灯亮');
else
writeDigitalPin(arduinoObj, 'D13', 0); % 熄灭 LED
% disp('LED 灯灭');
end
pause(0.5); % 稍微延迟,避免过于频繁读取
end
% 清理
% clear a;
disp('程序结束');