|
本帖最后由 skypup 于 2015-3-2 23:53 编辑
用红外LED与470欧左右电阻做成的Futaba(或JR)头的红外灯,可以实现相机的抓拍、变焦功能。
代码如下,还是用到前几例讲到的技巧来捕获舵机PWM信号。
#include "SIRC.h"
void setup() {
// 端口设置
TRIS1 = INPUT;
TRIS2 = INPUT;
TRIS3 = INPUT;
TRIS4 = INPUT;
TRIS5 = OUTPUT;
TMR1ON = 0; // 禁止 Timer1
PEIE = 0; // 禁止外设中断
GIE = 0; // 禁止全局中断
}
// 脉冲时间us ≈ 循环次数 * 12
// 等待不超过 4ms
#define MAX_TIME_WIDTH 333
// 等待不超过 20ms
#define MAX_TIME_SPACE 1667
// 每条指令发送次数
#define LOOP 4
int nLoop = 0;
unsigned char loop() {
for (;;) {
int nWidth = 0;
/*
* PIN1 控制缩放
*/
{
nWidth = 0;
while (PIN1 == HIGH && nWidth < MAX_TIME_WIDTH) nWidth++;
nWidth = 0;
while (PIN1 == LOW && nWidth < MAX_TIME_SPACE) nWidth++;
nWidth = 0;
while (PIN1 == HIGH && nWidth < MAX_TIME_WIDTH) nWidth++;
if (nWidth >= 140 && nWidth <= 250) {
// 1.7ms - 3.0ms
for (int nFlag = 0; nFlag < LOOP; nFlag++)
Tele();
} else if (nWidth >= 41 && nWidth <= 108) {
// 0.5ms - 1.3ms
for (int nFlag = 0; nFlag < LOOP; nFlag++)
Wide();
}
}
/*
* PIN2 控制拍照
*/
{
nWidth = 0;
while (PIN2 == HIGH && nWidth < MAX_TIME_WIDTH) nWidth++;
nWidth = 0;
while (PIN2 == LOW && nWidth < MAX_TIME_SPACE) nWidth++;
nWidth = 0;
while (PIN2 == HIGH && nWidth < MAX_TIME_WIDTH) nWidth++;
if (nWidth >= 140 && nWidth <= 250) {
// 1.7ms - 3.0ms
for (int nFlag = 0; nFlag < LOOP; nFlag++)
Photo();
}
}
}
return TRUE;
}
|
欢迎继续阅读楼主其他信息
|