|
用一个817光耦控制相机的快门按钮(需要拆开相机焊接),实现相机的定时间间隔拍摄,时间间隔从3秒到5分钟可选
原理图
延时摄影程序
#include <avr/io.h>
#include <util/delay_basic.h>
// PB0 快门
// PB3 按钮
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
uint16_t snaptime[] = {300, 500, 1000, 1500, 3000, 6000, 12000, 30000};
// 适用9.6M频率
void delay_10ms(uint16_t n)
{
for(uint16_t c=0;c<n;c++)
{
_delay_loop_2(24000);
}
}
int main(void)
{
uint8_t n = 0;
uint16_t tc = 0; // 时间计数器,单位是0.01秒
DDRB = _BV(PB0);
PORTB = _BV(PB3); // 打开上拉电阻
for(;;)
{
if((PINB & _BV(3))==0) // 短接一下,改变拍摄间隔时间
{
n++;
if(n>7) n = 0;
delay_10ms(50);
}
delay_10ms(1);
tc++;
if(tc>=snaptime[n])
{
sbi(PORTB, PB0);
delay_10ms(10);
cbi(PORTB, PB0);
tc = 0;
}
}
}
|
|