计算机控制系统:arduino呼吸灯

太理论的授课,大家都不喜欢,计划把课程案例修改,用arduino来讲解。

1呼吸灯 

就是PWM占空比调整,从0~1~0, 电压逐步增减,在led上的电流也是逐步增减,看起来像呼吸灯

2 代码

D11口为PWM口,通过一个电阻R与led连接,最后回到GND。 led两个管脚,长为正,短为负。

电路图:

MCU--D11---R(220ohm)--LED(+,长引脚)---GND(MCU地)

采用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个码农都是奢望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值