计算机控制系统:arduino呼吸灯
太理论的授课,大家都不喜欢,计划把课程案例修改,用arduino来讲解。
1呼吸灯
就是PWM占空比调整,从0~1~0, 电压逐步增减,在led上的电流也是逐步增减,看起来像呼吸灯
2 代码
D11口为PWM口,通过一个电阻R与led连接,最后回到GND。 led两个管脚,长为正,短为负。
采用ESC按键退出led控制。
clear
try
% 检查Arduino支持包是否安装
if ~exist('arduino.m', 'file')
error('请先安装MATLAB Arduino支持包');
end
% 创建Arduino对象
a = arduino('COM7', 'Uno', 'Libraries', 'Servo');
% 呼吸灯参数设置
pwmPin = 'D11'; % PWM引脚
breathingTime = 4; % 完整呼吸周期时间(秒)
stepDelay = 0.05; % 亮度变化步长间隔
brightness = 0; % 初始亮度
delta = 1; % 亮度变化方向
% 创建figure用于键盘检测
hFig = figure('KeyPressFcn', @keyDetect);
set(hFig, 'Name', '呼吸灯控制 - 按ESC退出', 'NumberTitle', 'off');
escPressed = false;
% 主循环
tic;
while ~escPressed
% 计算正弦波亮度(0-255)
timeVal = toc;
brightness = (sin(2*pi*timeVal/breathingTime) + 1) * 127.5;%0~255亮度
% 写入PWM值
writePWMDutyCycle(a, pwmPin, brightness/255);
% 检测ESC按键
drawnow; % 更新图形界面,处理键盘事件
pause(stepDelay);
end
catch ME
fprintf('程序异常: %s\n', ME.message);
end
% 清理工作
if exist('a', 'var')
writePWMDutyCycle(a, pwmPin, 0); % 关闭LED
clear a; % 断开Arduino连接
end
if ishandle(hFig)
close(hFig); % 关闭图形窗口
end
fprintf('程序已安全退出\n');
clear
% 键盘检测回调函数
function keyDetect(~, event)
if strcmp(event.Key, 'escape')
escPressed = true; % 设置退出标志
fprintf('检测到ESC按键,退出中...\n');
end
end