天使之翼遥控晾衣架分析
来自Jack's Lab
(版本间的差异)
(→编码分析结果) |
(→结论验证) |
||
第98行: | 第98行: | ||
=== 结论验证 === | === 结论验证 === | ||
+ | |||
+ | 发射的波形从左到右按位发射,可成如下的函数: | ||
+ | |||
+ | <source lang=cpp> | ||
+ | void RadioTX::issue_airer(uint32_t code1, uint32_t code2) | ||
+ | { | ||
+ | int i; | ||
+ | |||
+ | sync_airer(); | ||
+ | |||
+ | for(i=31; i>=0; i--) | ||
+ | { | ||
+ | switch ((code1 >> i) & 0x1) { | ||
+ | |||
+ | case 1: | ||
+ | RadioTX::_1(); | ||
+ | break; | ||
+ | |||
+ | case 0: | ||
+ | RadioTX::_0(); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | for(i=31; i>=0; i--) | ||
+ | { | ||
+ | switch ((code2 >> i) & 0x1) { | ||
+ | |||
+ | case 1: | ||
+ | RadioTX::_1(); | ||
+ | break; | ||
+ | |||
+ | case 0: | ||
+ | RadioTX::_0(); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
2014年7月9日 (三) 11:01的版本
目录 |
1 概述
天使之翼自动晾衣架,淘宝销量第一的自动晾衣架,内部带有电机,可通过遥控器控制灯光的开、关,晾衣架的升、停、降
2 遥控器
遥控器是这样的:
发射部分是一颗433MHz的超外差模块:
发射编码部分没有用通常的PT2262/eV1527编码芯片,而是用的一片 EM78P153 单片机,通过程序控制发射
3 遥控编码分析工具
315MHz,433MHz的简单无线控制,皆可用“红外遥控编码分析仪”来做分析:
在预留的四孔插座上插一个433MHz 的接受模块,将跳线设置到RF即可:
软件界面:
4 编码分析
4.1 初步分析结论
参照捕获的波形,及上下文环境,得到一个初步的结论:
前导码:H_5924(6000) L_700(600)
1/0: H_580(600) L_276(200)
0/1: H_156(200) L_704(600)
- 灯:
1010 0011 0001 0000 1000 0000 1111 1101 0000 0010 0000 0000 01_01 0011 1110 0010 A 3 1 0 8 0 F D 0 2 0 0 5 3 E 2 0xA310 80FD 0200 53E2
- UP
1010 0011 0001 0000 1000 0000_1111 1101 0000 0010 0000 0000 0000 1011 1001 1010 A 3 1 0 8 0 F D 0 2 0 0 0 B 9 A 0xA310 80FD 0200 0B9A
- STOP
0110 0110 0001 0000 1000 0000 1111 1101 0000 0010_0000 0000 0010 1101 1011 1100 6 6 1 0 8 0 F D 0 2 0 0 2 D B C 0x6610 80FD 0200 2DBC
- DOWN
1010 0011 0001 0000 1000 0000 111_1 1101 0000 0010 0000 0000 0100 1011 1101 1010 A 3 1 0 8 0 F D 0 2 0 0 4 B D A 0xA310 80FD 0200 4BDA
4.2 结论验证
发射的波形从左到右按位发射,可成如下的函数:
void RadioTX::issue_airer(uint32_t code1, uint32_t code2) { int i; sync_airer(); for(i=31; i>=0; i--) { switch ((code1 >> i) & 0x1) { case 1: RadioTX::_1(); break; case 0: RadioTX::_0(); break; } } for(i=31; i>=0; i--) { switch ((code2 >> i) & 0x1) { case 1: RadioTX::_1(); break; case 0: RadioTX::_0(); break; } } }