当前位置: 首页 > news >正文

计算机控制系统: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

相关文章:

  • 【嵌入式学习4】特殊参数、文件IO
  • 企业管理系统的功能架构设计与实现
  • 在 C# 中,while、for 和其他循环结构
  • 纯国产系统,首款鸿蒙电脑下月发布
  • 打破界限:Android XML与Jetpack Compose深度互操作指南
  • windows下git bash安装SDKMan报错Looking for unzip...Not found
  • android 之简述屏幕分辨率、屏幕密度、屏幕最小宽度
  • HarmonyOS学习 实验七:在页面上面添加警告弹窗、自定义弹窗、选择类弹窗、文本选择弹窗、日期选择等等
  • 三个STM32时钟配置函数的区别
  • 08_DCL
  • 安装操作系统后建议做的优化工作
  • AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
  • 【PCB工艺】软件是如何控制硬件的发展过程
  • 2025年华为杯广东工业大学程序设计竞赛(A最短路,生成树,G数学,最大公因数,I贪心)
  • 记录一次StarRocks集群迁移的经历
  • CentOS 7 全流程部署Magic-PDF数据清洗工具(附GPU加速方案)
  • 珠江桥牌斩获多项殊荣 匠心传承粤菜文化 创新引领调味新风尚
  • TDengine 数据写入优化:协议选择与批量操作(一)
  • SSL证书不可信的原因有哪些?(国科云)
  • Docker安装详细步骤、图文命令解析、包括Docker如何安装卸载MySQL 8容器、常用命令~