欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

逼真的蠟燭,ATtiny單片機(jī)電子蠟燭,ATtiny candle

作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2018/2/20

ATtiny單片機(jī)電子蠟燭,ATtiny candle

關(guān)鍵字:ATTINY85,電子蠟燭電路

想想當(dāng)你好不容易跟女朋友共度燭光晚餐,卻因?yàn)橄灎T點(diǎn)沒了或打翻著火了,那是一件多么坑爹的事。〗裉鞛槟惴窒硪豢钭约篸iy的超自然的燭光蠟燭。
WP_000356.jpg
ATtiny 電子蠟燭,皮特•米爾斯開發(fā)這個(gè)偉大的蠟燭,正如我們圖片所見到的一樣,但怎樣讓這蠟燭的光芒像傳統(tǒng)的蠟燭一樣閃爍呢。
WP_000370.jpg
皮特使用一個(gè)高亮的LED和一些模擬的輔助軟件,這樣就使得ATtiny 電子蠟燭的燭光和傳統(tǒng)蠟燭擁有一樣的閃爍的燭光,并且優(yōu)于傳統(tǒng)蠟燭,因?yàn)樗话橛忻骰鸬奈kU(xiǎn)。
WP_000376.jpg
ATtiny 電子蠟燭最難的部分就閃爍神態(tài)逼真,所以皮特做了一個(gè)蠟燭光檢測(cè)電阻( LDR )和固定電阻作為一個(gè)分壓器。這是作為ATTINY85 ADC之中的一個(gè)輸入端,并離散時(shí)間間隔的進(jìn)行采樣。采樣速率為100毫秒。然后將采集的8bit的電頻值存儲(chǔ)到EEPROM中,以便記錄蠟燭的閃爍圖譜,驅(qū)動(dòng)將其連接的LED、PWM形成通路。在用三節(jié)干電池供電。最后您只需編程程序,然后通過(guò)開關(guān)進(jìn)行控制。
WP_000345.jpg
下面是ATtiny 電子蠟燭的電路圖
ATTiny Candle Sch.jpg
下面是程序的代碼以及寫入EEPROM的數(shù)據(jù)
 
view plainprint?
/* 
Program Description: This program reads a light detecting resistor thru an internal ADC and stores the value,  
after scaling it, to eeprom.  This ADC value is sent to a PWM channel with attached led.  This is essentially a data logger 
for light and replay by LED.  If, if you aim the LDR at a flickering candle during its recording phase, you have a flickering  
led candle.   
A circuit description and other details can be found at http://petemills.blogspot.com 
Filename: ATTiny_Candle_v1.0.c 
Author: Pete Mills 
Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 64 ms 
*/  
//********** Includes **********  
#include        
#include      
#include   
//********** Definitions **********  
// LED for flame simulation  
#define LED   PB0    
#define LED_PORT PORTB  
#define LED_DDR  DDRB  
// Light Detecting Resistor for recording a live flame  
#define LDR   PINB3   
#define LDR_PORT PINB  
#define LDR_DDR  DDRB  
// Tactile Switch Input  
#define SW1   PINB4  
#define SW1_PORT PINB  
#define SW1_DDR  DDRB  
#define ARRAY_SIZE 500  // size of the flicker array  
#define SAMPLE_RATE 100  // ms delay for collecting and reproducing the flicker  
//********** Function Prototypes **********  
void setup(void);  
void toggle_led(void);  
void program_flicker(void);  
void led_alert(void);  
void eeprom_save_array(void);  
void eeprom_read_array(void);  
void scale_array(void);  
uint8_t get_adc(void);  
uint8_t scale( uint8_t input, uint8_t inp_low, uint8_t inp_hi, uint8_t outp_low, uint8_t outp_hi);  
uint8_t is_input_low(char port, char channel, uint8_t debounce_time, int input_block);  
//********** Global Variables **********  
uint8_t flicker_array[ ARRAY_SIZE ] = { 0 };  
uint8_t EEMEM ee_flicker_array[ ARRAY_SIZE ] = { 0 };  
int main(void)  
{  
uint16_t replay = 0;  
setup();  
eeprom_read_array();  
 while(1)  
 {   
  if( is_input_low( SW1_PORT, SW1, 25, 250 ) )  
  {  
   // program the flicker  
   // after entering and upon completion, a predetermined flash pattern will occur as described in led_alert()    
   // aim the ldr at a flickering candle or any other light source ( like a laser ) you want to record during this time  
   // and upon completion the values are stored to eeprom.  They are played back immediately as well   
   // as being recalled from eeprom upon first start up  
   led_alert();  
   program_flicker();  
   scale_array();  
   eeprom_save_array();  
   led_alert();  
  }  
  // replay the recorded flicker pattern   
  OCR0A = flicker_array[ replay ];  
  ++replay;  
  if( replay >= ( ARRAY_SIZE - 13 ) ) // if the end of the stored array has been reached  
  {   
   replay = 0;          // start again from the beginning  
   //led_alert();  
  }  
  _delay_ms( SAMPLE_RATE );  
  _delay_ms( 3 );    // ADC Conversion time  
 }  
}  
//********** Functions **********  
void setup(void)  
{  
 //********* Port Config *********  
 LED_DDR |= ( 1 << LED);   // set PB0 to "1" for output   
 LED_PORT &= ~( 1 << LED );   // turn the led off  
 LDR_DDR &= ~( 1 << LDR );   // set LDR pin to 0 for input  
 LDR_PORT |= ( 1 << LDR );   // write 1 to enable internal pullup  
 SW1_DDR &= ~( 1 << SW1 );   // set sw1 pin to 0 for input  
 SW1_PORT |= ( 1 << SW1 );   // write a 1 to sw1 to enable the internal pullup  
 //********** PWM Config *********  
 TCCR0A |= ( ( 1 << COM0A1 ) | ( 1 << WGM01 ) | ( 1 << WGM00 ) ); // non inverting fast pwm  
 TCCR0B |= ( 1 << CS00 ); // start the timer  
 //********** ADC Config **********  
 ADMUX |= ( ( 1 << ADLAR ) | ( 1 << MUX1 ) | ( 1 << MUX0 ) );  // left adjust and select ADC3  
 ADCSRA |= ( ( 1 << ADEN ) | ( 1 << ADPS2 ) | ( 1 << ADPS1 ) ); // ADC enable and clock divide 8MHz by 64 for 125khz sample rate  
 DIDR0 |= ( 1 << ADC3D ); // disable digital input on analog input channel to conserve power  
}  
void toggle_led()  
{  
    LED_PORT ^= ( 1 << LED );  
}  
uint8_t is_input_low( char port, char channel, uint8_t debounce_time, int input_block )  
{  
/*  
This function is for debouncing a switch input  
Debounce time is a blocking interval to wait until the input is tested again.  
If the input tests low again, a delay equal to input_block is executed and the function returns ( 1 )  
*/  
 if ( bit_is_clear( port, channel ) )  
 {  
  _delay_ms( debounce_time );  
   if ( bit_is_clear( port, channel ) )   
   {  
    _delay_ms( input_block );  
    return 1;  
   }  
 }  
 return 0;  
}  
uint8_t get_adc()  
{  
 ADCSRA |= ( 1 << ADSC );   // start the ADC Conversion  
 while( ADCSRA & ( 1 << ADSC ));  // wait for the conversion to be complete  
 return ~ADCH; // return the inverted 8-bit left adjusted adc val  
}  
void program_flicker()  
{   
 // build the flicker array  
 for( int i = 0; i < ARRAY_SIZE; i++ )  
 {  
  flicker_array[ i ] = get_adc();    
  _delay_ms( SAMPLE_RATE );  
 }  
}  
void led_alert()  
{  
 // this is a function to create a visual alert that an event has occured within the program  
 // it toggles the led 10 times.  
 for( int i = 0; i < 10; i++ )  
 {  
  OCR0A = 0;  
  _delay_ms( 40 );  
  OCR0A = 255;  
  _delay_ms( 40 );  
 }  
}  
void eeprom_save_array()  
{   
 for( int i = 0; i < ARRAY_SIZE; i++ )  
 {  
  eeprom_write_byte( &ee_flicker_array[ i ], flicker_array[ i ] );  
 }  
}  
void eeprom_read_array()  
{  
 for( int i = 0; i < ARRAY_SIZE; i++ )  
 {  
  flicker_array[ i ] = eeprom_read_byte( &ee_flicker_array[ i ] );  
 }  
}  
uint8_t scale( uint8_t input, uint8_t inp_low, uint8_t inp_hi, uint8_t outp_low, uint8_t outp_hi)  
{  
return ( ( ( input - inp_low ) * ( outp_hi - outp_low ) ) / ( ( inp_hi - inp_low ) + outp_low ) );  
}  
void scale_array()  
{  
 uint8_t arr_min = 255;  
 uint8_t arr_max = 0;  
 uint8_t out_low = 20;  
 uint8_t out_high = 255;  
 // find the min and max values  
 for( int i = 0; i < ARRAY_SIZE; i++ )  
 {  
  if( flicker_array[ i ] < arr_min )  
   arr_min = flicker_array[ i ];  
  if( flicker_array[ i ] > arr_max )  
   arr_max = flicker_array[ i ];  
 }  
 // now that we know the range, scale it  
 for( int i = 0; i < ARRAY_SIZE; i++ )  
 {  
  flicker_array[ i ] = scale( flicker_array[ i ], arr_min, arr_max, out_low, out_high );  
 }  
}   igh );  
 }  
}   igh );  
 }  
}    
 }  
}    
 }  
}    
 }  
}    }  
}    }  
}    }  
}       
 
 
EEPROM的數(shù)據(jù)
rom.rar
Tags:電子蠟燭  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢
欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人
床上的激情91.| 青青草伊人久久| 久久综合久久久久88| 日韩一区二区三区在线视频| 欧美亚洲愉拍一区二区| 欧美日韩一区二区在线观看| 欧美三级资源在线| 欧美女孩性生活视频| 欧美一区二区三区人| 亚洲精品一区二区三区蜜桃下载| 日韩精品中文字幕在线不卡尤物| 精品国产污污免费网站入口 | 欧美精品一区二区久久婷婷| 日韩欧美国产综合一区| 久久这里只有精品首页| 欧美高清在线精品一区| 中文字幕日本不卡| 亚洲成精国产精品女| 日本不卡123| 国产成人在线电影| 在线看一区二区| 日韩精品一区二区三区在线观看| 国产亚洲精品久| 一区二区三区久久久| 老司机免费视频一区二区三区| 国产成人在线观看免费网站| 91久久精品国产91性色tv| 日韩欧美在线一区二区三区| 国产精品三级av在线播放| 一区二区三区四区视频精品免费 | 国产91精品在线观看| 色网站国产精品| 日韩限制级电影在线观看| 中文字幕一区二区三区在线不卡 | 亚洲一区二区综合| 美腿丝袜一区二区三区| www.爱久久.com| 欧美一卡2卡3卡4卡| 中文字幕一区二区三区av| 三级精品在线观看| 色综合久久久久久久久| 亚洲精品一线二线三线无人区| 亚洲精品免费在线观看| 国产综合久久久久久鬼色 | 成人av影视在线观看| 91精选在线观看| 夜夜操天天操亚洲| 成人a级免费电影| 久久在线免费观看| 麻豆一区二区99久久久久| 欧美日韩亚洲综合一区| 亚洲三级在线看| 国产精品自产自拍| 欧美成人伊人久久综合网| 亚洲一区二区三区精品在线| 成人黄色av电影| 久久天天做天天爱综合色| 久久精品999| 欧美一级夜夜爽| 男男gaygay亚洲| 7777精品伊人久久久大香线蕉的| 一区二区三区在线视频免费| 色婷婷激情久久| 亚洲精品国产视频| 在线视频国内一区二区| 一区二区成人在线| 欧美专区在线观看一区| 亚洲一区二区三区中文字幕在线| 91影院在线观看| 亚洲三级在线观看| 色嗨嗨av一区二区三区| 亚洲欧美日韩人成在线播放| 色妞www精品视频| 亚洲国产视频在线| 9191国产精品| 国精产品一区一区三区mba桃花| 精品奇米国产一区二区三区| 经典三级在线一区| 久久久久久夜精品精品免费| 粉嫩绯色av一区二区在线观看| 国产日产精品1区| 99久久精品国产精品久久| 亚洲男人电影天堂| 欧美精品久久一区| 黄页视频在线91| 国产欧美一区二区三区在线看蜜臀| 国产ts人妖一区二区| 亚洲欧洲精品一区二区三区不卡| 91福利在线导航| 婷婷综合久久一区二区三区| 久久一区二区三区国产精品| 国产.欧美.日韩| 亚洲国产综合91精品麻豆| 日韩欧美国产午夜精品| 成人黄页在线观看| 亚洲国产色一区| 欧美精品一区二区蜜臀亚洲| a级高清视频欧美日韩| 亚洲a一区二区| 国产欧美一区二区在线| 欧美三级电影网| 懂色一区二区三区免费观看 | 亚洲国产精品成人久久综合一区| 99国内精品久久| 美美哒免费高清在线观看视频一区二区 | 国产精品电影院| 91精品国产综合久久精品app | 亚洲精品一区二区三区精华液| 成人夜色视频网站在线观看| 亚洲国产一区二区a毛片| 精品电影一区二区三区| 色老综合老女人久久久| 国产一区二区三区av电影| 亚洲一区二区三区四区在线| 欧美极品美女视频| 制服丝袜国产精品| 色婷婷国产精品| 成人午夜激情影院| 精品一区二区三区欧美| 午夜亚洲国产au精品一区二区| 亚洲国产精品高清| 2020日本不卡一区二区视频| 欧美一级搡bbbb搡bbbb| 成人av在线电影| 国产精品一区二区在线看| 日本不卡高清视频| 午夜视频在线观看一区二区| 亚洲色图色小说| 中文字幕人成不卡一区| 中国色在线观看另类| 久久这里只精品最新地址| 日韩欧美一区二区免费| 国产精品福利影院| 国产三级精品视频| 久久伊人蜜桃av一区二区| 日韩欧美国产午夜精品| 91精品国产91久久综合桃花| 欧美日韩综合不卡| 欧美主播一区二区三区| 欧美综合在线视频| 91老师片黄在线观看| av午夜一区麻豆| 成人深夜福利app| av一二三不卡影片| 99国产精品久| 99久久国产免费看| 欧洲精品在线观看| 欧美日韩高清在线| 欧美高清视频一二三区| 欧美一区二区黄| 欧美va亚洲va香蕉在线| 久久综合国产精品| 国产精品私人影院| |精品福利一区二区三区| 亚洲免费观看视频| 五月婷婷激情综合| 狠狠色丁香九九婷婷综合五月| 久久99精品一区二区三区| 国产剧情在线观看一区二区| 成人av综合在线| 欧美亚洲另类激情小说| 欧美一级高清片| 日本一区二区免费在线| 亚洲精品中文在线观看| 丝袜亚洲另类欧美| 国产精品一区二区在线观看不卡| 成人91在线观看| 欧美三级韩国三级日本一级| 日韩一区二区高清| 国产午夜精品久久久久久久 | 午夜精品爽啪视频| 久久精品国产网站| 成人av网址在线| 欧美日韩高清一区| 久久久综合网站| 一级特黄大欧美久久久| 久久成人av少妇免费| 成人短视频下载| 69久久夜色精品国产69蝌蚪网| 久久蜜桃香蕉精品一区二区三区| 亚洲视频 欧洲视频| 免费人成在线不卡| 不卡的av在线播放| 91精品国产综合久久香蕉麻豆| 久久久久97国产精华液好用吗| 亚洲综合偷拍欧美一区色| 免费av网站大全久久| 97精品超碰一区二区三区| 欧美mv日韩mv国产网站app| 一区二区三区四区在线| 国产乱码精品一品二品| 欧美福利电影网| 中文字幕一区二区三区视频| 国内精品久久久久影院色| 欧美高清www午色夜在线视频| 国产精品女人毛片| 国产精品一区不卡| 精品国产伦理网| 奇米色一区二区三区四区| 91黄视频在线|