婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

逼真的蠟燭,ATtiny單片機電子蠟燭,ATtiny candle

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2018-02-20

ATtiny單片機電子蠟燭,ATtiny candle

關鍵字:ATTINY85,電子蠟燭電路

想想當你好不容易跟女朋友共度燭光晚餐,卻因為蠟燭點沒了或打翻著火了,那是一件多么坑爹的事!今天為你分享一款自己diy的超自然的燭光蠟燭。
WP_000356.jpg
ATtiny 電子蠟燭,皮特•米爾斯開發這個偉大的蠟燭,正如我們圖片所見到的一樣,但怎樣讓這蠟燭的光芒像傳統的蠟燭一樣閃爍呢。
WP_000370.jpg
皮特使用一個高亮的LED和一些模擬的輔助軟件,這樣就使得ATtiny 電子蠟燭的燭光和傳統蠟燭擁有一樣的閃爍的燭光,并且優于傳統蠟燭,因為它不伴有明火的危險。
WP_000376.jpg
ATtiny 電子蠟燭最難的部分就閃爍神態逼真,所以皮特做了一個蠟燭光檢測電阻( LDR )和固定電阻作為一個分壓器。這是作為ATTINY85 ADC之中的一個輸入端,并離散時間間隔的進行采樣。采樣速率為100毫秒。然后將采集的8bit的電頻值存儲到EEPROM中,以便記錄蠟燭的閃爍圖譜,驅動將其連接的LED、PWM形成通路。在用三節干電池供電。最后您只需編程程序,然后通過開關進行控制。
WP_000345.jpg
下面是ATtiny 電子蠟燭的電路圖
ATTiny Candle Sch.jpg
下面是程序的代碼以及寫入EEPROM的數據
 
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的數據
rom.rar
Tags:電子蠟燭  
責任編輯:admin
  • 上一篇文章:
  • 下一篇文章: 沒有了
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網友評論
    關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁面
    下到頁底
    晶體管查詢
    婷婷亚洲天堂影院-国产精品豆花视频www-伊人影院在线观看-日本少妇浓毛bbwbbwbbw-av网站观看-亚州欧美在线-91精品国产乱码久-任我爽精品视频在线播放-日本视频不卡-亚洲国产精品va在线观看香蕉-国产毛片乡下农村妇女-国产成人免费ā片在线观看老同学-欧美日韩免费在线-成人无码视频免费播放-色综合美女-免费毛片av
    <button id="4i884"></button>
  • <abbr id="4i884"><source id="4i884"></source></abbr>
  • <code id="4i884"><tr id="4i884"></tr></code>
  • <rt id="4i884"></rt>
    <li id="4i884"></li>
  • <rt id="4i884"><tr id="4i884"></tr></rt>
  • 大片在线观看网站免费收看| 日韩av在线综合| 三上悠亚av一区二区三区| 日韩欧美不卡在线| 欧美这里只有精品| 亚洲精品天堂成人片av在线播放| www.com久久久| 在线观看免费视频污| 日日干夜夜操s8| 日韩在线一区视频| 亚洲国产欧美91| 奇米777在线| 成人高清dvd| 农民人伦一区二区三区| 欧美爱爱视频免费看| 成人免费aaa| 九九热在线免费| 狠狠操狠狠干视频| 毛毛毛毛毛毛毛片123| 日韩精品手机在线观看| 日韩国产小视频| 97视频在线免费播放| 欧美精品无码一区二区三区| 色噜噜狠狠一区二区| 超碰97免费观看| 人妻少妇精品无码专区二区| 国产免费人做人爱午夜视频| 中文av字幕在线观看| 99中文字幕在线观看| 国产精品久久中文字幕| 成人黄色一区二区| 亚洲国产精品影视| 精品人妻人人做人人爽| 精品视频免费在线播放| 岛国av在线免费| 成熟丰满熟妇高潮xxxxx视频| 手机在线看福利| 黑人巨茎大战欧美白妇| 99999精品视频| 公共露出暴露狂另类av| 成人一级片网站| 喜爱夜蒲2在线| 99re精彩视频| 人妻内射一区二区在线视频| 潘金莲一级淫片aaaaaa播放1| 青青在线视频观看| 超碰超碰超碰超碰超碰| 999精彩视频| 亚洲色欲综合一区二区三区| 欧美 国产 精品| 亚洲 国产 图片| www.色就是色| 国产精品秘入口18禁麻豆免会员| 日韩高清在线一区二区| 中文字幕欧美人妻精品一区| 妺妺窝人体色777777| 中文字幕第三区| 国产福利在线免费| 激情六月丁香婷婷| 欧美一区二区三区爽大粗免费| 亚洲精品偷拍视频| 中文字幕一区二区在线观看视频| 蜜臀久久99精品久久久酒店新书| av日韩一区二区三区| 午夜久久久久久久久久久| 欧美日韩精品区别| 国产日韩欧美久久| 日本肉体xxxx裸体xxx免费| 国产女女做受ⅹxx高潮| 国产素人在线观看| 国产午夜大地久久| 欧美老熟妇喷水| 国产日韩一区二区在线观看| 精品久久久久久久久久中文字幕| www.av片| 亚洲精品无码久久久久久| 欧洲精品一区二区三区久久| 六月婷婷在线视频| 欧美成人xxxxx| 男人女人黄一级| 超碰成人在线播放| 日本三日本三级少妇三级66| 欧美日韩中文字幕在线播放 | 自拍偷拍21p| 最新天堂在线视频| 秋霞在线一区二区| 成人免费在线视频播放| 加勒比成人在线| 99草草国产熟女视频在线| 欧美精品无码一区二区三区| 日本中文字幕精品—区二区| 国产a级片免费看| 成人一对一视频| 在线黄色免费看| 男人添女荫道口女人有什么感觉| 久久黄色片视频| 日本中文字幕二区| 国产人妻777人伦精品hd| 九色91popny| 精品少妇人欧美激情在线观看| 国产精品丝袜久久久久久消防器材| 韩国中文字幕av| 欧美一级欧美一级| 奇米视频7777| 日本www在线播放| 在线视频一二三区| 自拍偷拍 国产| 成人免费a级片| 日本高清久久久| 国内外免费激情视频| 国产女教师bbwbbwbbw| www.夜夜爽| 亚洲午夜无码av毛片久久| www.国产福利| 国产第一页视频| 日本在线xxx| 国产成人一二三区| 午夜一区二区视频| 日本在线视频www| 日本在线xxx| 免费视频爱爱太爽了| 狠狠操狠狠干视频| 亚洲五月天综合| 国产成人无码精品久久久性色| 最近中文字幕免费mv| 欧美一级特黄a| 无码日韩人妻精品久久蜜桃| 免费无码毛片一区二三区| 大陆极品少妇内射aaaaaa| 中文国产在线观看| 午夜免费一级片| 热久久久久久久久| 精品亚洲视频在线| 亚洲精品乱码久久久久久动漫| 亚洲久久中文字幕| 色www免费视频| 在线看免费毛片| 在线播放黄色av| 久久久成人精品一区二区三区| 在线播放免费视频| 成年人三级视频| 菠萝蜜视频在线观看入口| 在线无限看免费粉色视频| 少妇高潮流白浆| www.日本在线视频| 乱妇乱女熟妇熟女网站| 四虎永久在线精品无码视频| 亚洲成熟丰满熟妇高潮xxxxx| 国产一区视频免费观看| 久久久精品三级| 久久久福利影院| 国产精品国产对白熟妇| 97在线免费公开视频| 日本高清久久久| 欧美一级爱爱视频| 黄色一级片播放| 一本色道久久亚洲综合精品蜜桃| 亚洲综合123| 免费看一级大黄情大片| 另类小说色综合| 色男人天堂av| 2022中文字幕| 成人羞羞国产免费网站| www.国产福利| 91视频 -- 69xx| 污色网站在线观看| 日本中文字幕亚洲| 国产区二区三区| 免费高清一区二区三区| 又色又爽又高潮免费视频国产| 韩国一区二区在线播放| 国产黄色一级网站| 亚洲va在线va天堂va偷拍| 精品无码国产一区二区三区av | 国产高清999| 伊人成色综合网| 国产精品av免费| 手机看片福利盒子久久| 无码熟妇人妻av在线电影| 高潮一区二区三区| 欧美女人性生活视频| 国产农村妇女精品久久| 欧美日韩大尺度| 国产69精品久久久久999小说| 天堂网在线免费观看| 国产一区二区视频播放| 男人草女人视频| 婷婷中文字幕在线观看| 亚洲少妇第一页| 国产精品亚洲αv天堂无码| 国产精品久久久久久久乖乖| 国产大片一区二区三区| 欧美成年人视频在线观看| 少妇人妻互换不带套| 日韩欧美不卡在线| 国产精品国三级国产av| 国内自拍中文字幕| 国产成人免费高清视频| 好色先生视频污| 午夜啪啪免费视频|