5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 817|回复: 5
打印 上一主题 下一主题

红外快门线

[复制链接]
跳转到指定楼层
楼主
发表于 2013-6-27 21:51 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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;
}


欢迎继续阅读楼主其他信息

6
发表于 2013-7-1 08:25 | 只看该作者

RE: 爱上ArduPIC之七——红外快门线

skypup 发表于 2013-6-30 17:39
能否分享一下Arduino红外遥控的代码,参考参考。
多谢!

你找找ARDUINO红外库函数
5
 楼主| 发表于 2013-6-30 17:39 | 只看该作者
阿咕 发表于 2013-6-27 23:05
ARDUINO 读pwm. 红外遥控 很简单  问题是很多相机没有红外变焦功能,有些红外变焦不够快

能否分享一下Arduino红外遥控的代码,参考参考。
多谢!


4
发表于 2013-6-27 23:05 | 只看该作者
ARDUINO 读pwm. 红外遥控 很简单  问题是很多相机没有红外变焦功能,有些红外变焦不够快
3
发表于 2013-6-27 22:47 | 只看该作者
顶了,介个好!
沙发
 楼主| 发表于 2013-6-27 21:53 | 只看该作者
本帖最后由 skypup 于 2015-3-2 23:54 编辑

    TMR1ON = 0; // 禁止 Timer1
    PEIE = 0; // 禁止外设中断
    GIE = 0; // 禁止全局中断

这3句话,禁止了中断,这样可以避免因为跳进中断造成有时PWM计时不准的情况。
同时,这也屏蔽掉了4个舵机PWM输出端口的功能。


您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /2 下一条

快速回复 返回顶部 返回列表