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

软件开发平台简介seo优化工具推荐

软件开发平台简介,seo优化工具推荐,男女做羞羞完整版网站,做蓝牙音箱在什么网站上找客户1 硬件 相关说明:hx1838 红外遥控(1):接收时序的解码-CSDN博客 接线图: 2 解码原理 红外遥控器采用了NEC编码规则: NEC 载波频率为 38Khz 引导码:9ms 高电平 4.5ms 低电平 1 码 :0.56 ms 高电…

1 硬件

  相关说明:hx1838 红外遥控(1):接收时序的解码-CSDN博客

接线图:

2 解码原理

红外遥控器采用了NEC编码规则:

NEC 载波频率为 38Khz
引导码:9ms 高电平 + 4.5ms 低电平
1 码 :0.56 ms 高电平 + 0.56 ms 低电平
0 码 : 0.56ms 高电平 + 1.68 ms 低电平
结束码 :0.56ms 高电平
数据帧格式:引导码 + 地址 + 地址反码 + 键值 + 键值反码 + 结束码
重复帧格式:9ms 高电平 + 2.25ms低电平 + 结束位 + 结束码
高位在前,即首先收到的是高位的数据
 

3 代码

实际接线 接的D8 用于解析

手动的红外遥控器是小孩的,可以接收,但无法解码:

 
等待空闲状态...
等待引导脉冲...
未知协议特征(低:13.90ms, 高:29.83ms)
捕获信号中...

代码如下:

% 增强版红外解码程序 - 解决解码失败问题% 初始化Arduino对象
clear  
a = arduino('COM5', 'Uno'); % 修改为你的端口和板型
configurePin(a, 'D8', 'DigitalInput');% 增强参数配置
irPin = 'D8';          % 红外接收模块连接的引脚
timeout = 0.5;         % 延长等待信号的超时时间
sampleInterval = 20e-6; % 更精细的采样间隔(20微秒)
minPulseDuration = 1e-4; % 最小脉冲持续时间(100微秒)% 创建图形窗口
% figure;
% subplot(2,1,1);
% hWave = stairs(0,0);
% title('红外信号波形');
% xlabel('时间(ms)');
% ylabel('电平');
% ylim([-0.1 1.1]);
% grid on;
% 
% subplot(2,1,2);
% hBits = stem(zeros(1,32));
% title('解码位值');
% ylim([-0.1 1.1]);
% xlim([0 33]);
% grid on;% 主循环
while truefprintf('\n等待红外信号...\n');% 增强的引导脉冲检测[pulseTimes, pulseValues, success] = waitAndCapture(a, irPin, timeout, sampleInterval);if ~successcontinue;end% 绘制信号波形
%     plotIRSignal(hWave, pulseTimes, pulseValues);% 增强的解码函数[address, command, isRepeat, bits] = decodeNEC_enhanced(pulseTimes, pulseValues)% 显示位值
%     set(hBits, 'YData', bits);% 显示解码结果if ~isempty(address)if isRepeatfprintf('重复键: 地址=0x%02X, 命令=0x%02X\n', address, command);elsefprintf('新按键: 地址=0x%02X (反码:0x%02X), 命令=0x%02X (反码:0x%02X)\n',...address, bitcmp(address,8), command, bitcmp(command,8));endelsefprintf('解码失败 - 可能原因:\n');fprintf('1. 遥控器不是NEC协议\n');fprintf('2. 距离太远或角度不对\n');fprintf('3. 环境光干扰太强\n');% 显示信号统计信息辅助调试fprintf('信号统计: 持续时间=%.2fms, 脉冲数=%d\n',...(pulseTimes(end)-pulseTimes(1))*1000, length(pulseTimes));enddrawnow;
end% 释放Arduino对象
clear  %% 增强的信号捕获函数function [times, values, success] = waitAndCapture(a, pin, timeout, interval)times = [];values = [];success = false;% 等待空闲状态(持续高电平)fprintf('等待空闲状态...\n');idleStart = tic;while toc(idleStart) < timeoutif readDigitalPin(a, pin) == 1break;endpause(interval*5);end% 等待引导脉冲开始(低电平)fprintf('等待引导脉冲...\n');startTime = tic;while toc(startTime) < timeoutif readDigitalPin(a, pin) == 0break;endpause(interval);end% 记录引导脉冲持续时间pulseStart = tic;while readDigitalPin(a, pin) == 0if toc(pulseStart) > 0.015 % NEC引导脉冲最长9msfprintf('无效引导脉冲\n');return;endendleadLow = toc(pulseStart);% 检查引导脉冲是否符合NEC标准(4.5ms或2.25ms)if leadLow < 0.008 || leadLow > 0.010fprintf('非标准引导脉冲: %.2fms\n', leadLow*1000);return;end% 开始捕获完整信号fprintf('捕获信号中...\n');maxDuration = 0.1; % 最大捕获时长100msbufferSize = ceil(maxDuration / interval);times = zeros(bufferSize, 1);values = zeros(bufferSize, 1);times(1) = 0;values(1) = 0; % 引导脉冲低电平开始captureStart = tic;lastTime = 0;lastValue = 0;idx = 2;while toc(captureStart) < maxDuration && idx <= bufferSizecurrentValue = readDigitalPin(a, pin);currentTime = toc(captureStart);if currentValue ~= lastValuetimes(idx) = currentTime;values(idx) = currentValue;lastValue = currentValue;idx = idx + 1;endpause(interval);end% 裁剪数组times = times(1:idx-1);values = values(1:idx-1);% 检查捕获的信号是否有效if length(times) < 10fprintf('捕获信号太短\n');return;endsuccess = true;
end%% 增强的NEC解码函数
function [address, command, isRepeat, bits] = decodeNEC_enhanced(times, values)address = [];command = [];isRepeat = false;bits = zeros(1,32);% 计算各脉冲持续时间durations = diff(times);% 检查是否为重复码if length(durations) < 10totalTime = times(end) - times(1);if totalTime > 0.009 && totalTime < 0.015 % 重复码特征isRepeat = true;return;elsefprintf('无效信号长度\n');return;endend% 查找数据位开始位置(跳过引导脉冲)dataStart = 3; % 通常第3个脉冲开始数据% 提取32位数据bitCount = 0;for i = dataStart:2:min(dataStart+63, length(durations)-1)zeroBit = durations(i) < 0.0012; % 560us低+560us高=0oneBit = durations(i) < 0.0012 && durations(i+1) > 0.0012; % 560us低+1690us高=1if oneBitif bitCount < 32bits(bitCount+1) = 1;endbitCount = bitCount + 1;elseif zeroBitif bitCount < 32bits(bitCount+1) = 0;endbitCount = bitCount + 1;elsefprintf('无效脉冲宽度: %.2fms\n', durations(i)*1000);endend% 检查是否获取了完整32位数据if bitCount < 32fprintf('数据不完整: 只收到%d位\n', bitCount);return;end% 解码地址和命令address = bin2dec(num2str(bits(1:8)));invAddress = bin2dec(num2str(bits(9:16)));command = bin2dec(num2str(bits(17:24)));invCommand = bin2dec(num2str(bits(25:32)));% 验证反码if (bitcmp(address,8) ~= invAddress) || (bitcmp(command,8) ~= invCommand)fprintf('反码验证失败\n');address = [];command = [];return;end
end%% 信号绘图函数
function plotIRSignal(h, times, values)timesMs = times * 1000;% 创建阶梯图数据x = zeros(2*length(timesMs),1);y = zeros(2*length(timesMs),1);for i = 1:length(timesMs)x(2*i-1) = timesMs(i);x(2*i) = timesMs(i);y(2*i-1) = values(i);y(2*i) = values(i);endset(h, 'XData', x, 'YData', y);xlim([0 max(timesMs)]);title(sprintf('红外信号波形 (持续时间: %.2fms)', max(timesMs)));
end

http://www.dtcms.com/wzjs/97777.html

相关文章:

  • 深圳的网站引擎优化
  • 网站建设明细报价单b2b平台免费推广网站
  • 腾讯云是做网站的吗长沙网络营销咨询费用
  • html实例百度网页制作代码seo技术员
  • 用vs2010做网站并连数据库百度推广好做吗
  • 网站怎么开发设计南宁seo多少钱报价
  • 移动端网站日历怎么做什么是关键词排名优化
  • 网站建设软硬件要求怎么联系地推公司
  • 网站建设 图片上传全国十大跨境电商公司排名
  • 网上做论文的网站有哪些内容最有效的线上推广方式
  • 免费网站软件app广州谷歌推广
  • 网站建设电话销售开场白广州网站建设方案维护
  • 用cms做个网站在线建站模板
  • 网站开发 注意事项seo平台是什么意思
  • 佛山做外贸网站推广实时热点新闻事件
  • 那个视频网站最好最全网址今天全国31个省疫情最新消息
  • 大学做兼职英语作文网站线上宣传推广方式
  • 联合易网北京网站建设公司怎么样玄幻小说排行榜百度风云榜
  • 代运营怎么做重庆小潘seo
  • 重庆工程信息网官网首页企业网站seo排名优化
  • 教育类型网站百度直接打开
  • 旅游微网站建设互联网行业最新资讯
  • 网站建设需要实现哪些目标百度网页翻译
  • 旅游网站建设分析抖音seo排名系统
  • 单页网站怎么做竞价网页制作接单
  • 网站建设属于技术开发合同吗seo短视频网页入口引流网站
  • 成都建设网站最新seo课程
  • 北京多语言网站建设北京网络seo推广公司
  • wordpress主题always合肥网站推广优化公司
  • 网站做图片如何推广微信公众号