日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

和12岁小同志搞创客开发:手撕代码,做一款火焰报警器

發(fā)布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 和12岁小同志搞创客开发:手撕代码,做一款火焰报警器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

機(jī)緣巧合在網(wǎng)上認(rèn)識一位12歲小同志,從零開始系統(tǒng)輔導(dǎo)其創(chuàng)客開發(fā)思維和技巧。

項(xiàng)目專欄:https://blog.csdn.net/m0_38106923/category_11097422.html?


在廚房安裝一個火焰報(bào)警器應(yīng)該是非常管用的,如果不小心忘關(guān)煤氣的話,只要有一點(diǎn)點(diǎn)的火苗,就能觸發(fā)火焰報(bào)警器,探測距離可達(dá)20cm。一個小小的報(bào)警器,講不定就能避免一場不必要的意外發(fā)生!

?項(xiàng)目連線如下所示:

實(shí)現(xiàn)代碼如下所示:

float sinVal;            
int toneVal;  void setup(){ pinMode(8, OUTPUT);        // 蜂鳴器引腳設(shè)置Serial.begin(9600);        //設(shè)置波特率為9600 bps
}void loop(){ int sensorValue = analogRead(0);   //火焰?zhèn)鞲衅鬟B到模擬口,并從模擬口讀值Serial.println(sensorValue); delay(1);if(sensorValue < 1023){        //  如果數(shù)據(jù)小于1023,說明有火源,蜂鳴器響   for(int x=0; x<180; x++){//將sin函數(shù)角度轉(zhuǎn)化為弧度sinVal = (sin(x*(3.1412/180)));//用sin函數(shù)值產(chǎn)生聲音的頻率toneVal = 2000+(int(sinVal*1000));//給引腳8一個tone(8, toneVal);delay(2); }   } else {    // 如果數(shù)據(jù)大于等于1023,沒有火源,關(guān)閉蜂鳴器noTone(8);          //關(guān)閉蜂鳴器 }
}  

程序中,首先,定義兩個變量:

float sinVal;            
int toneVal; 

浮點(diǎn)型變量sinVal用來存儲正弦值,正弦波呈現(xiàn)一個波浪形的變化,變化比較均勻,所以我們選用正弦波的變化來作為我們聲音頻率的變換,toneVal從sinVal變量中獲得數(shù)值,并把它轉(zhuǎn)換為所需要的頻率。

這里用的是sin()函數(shù),一個數(shù)學(xué)函數(shù),可以算出一個角度的正弦值,這個函數(shù)采用弧度單位。因?yàn)槲覀儾幌胱尯瘮?shù)值出現(xiàn)負(fù)數(shù),所以設(shè)置for循環(huán)在0~179之間,也就是0~180度之間。?

for(int x=0; x<180; x++){
}

函數(shù)sin()用的弧度單位,不是角度單位。要通過公式:3.1412/180將角度轉(zhuǎn)為弧度:

sinVal = (sin(x*(3.1412/180)));

之后,將這個值轉(zhuǎn)變成相應(yīng)的報(bào)警聲音的頻率:

toneVal = 2000+(int(sinVal*1000));

這里有個知識點(diǎn):浮點(diǎn)型值轉(zhuǎn)換為整型。
sinVal是個浮點(diǎn)型變量,也就是含小數(shù)點(diǎn)的值,而我們不希望頻率出現(xiàn)小數(shù)點(diǎn)的,所以需要有一個浮點(diǎn)值轉(zhuǎn)換為整型值得過程,也就是下面這句語句就完成了這件事:

int(sinVal*1000)

把sinVal乘以1000,轉(zhuǎn)換為整型后再加上2000賦值給變量toneVal,現(xiàn)在toneVal就是一個適合聲音頻率了。

之后,我們用tone()函數(shù)把生成的這個頻率給我們的蜂鳴器。

tone(8, toneVal);

下面我們來介紹一下tone相關(guān)的三個函數(shù):

1、tone(pin,frequency):pin是指連接到蜂鳴器的數(shù)字引腳,frequency是以Hz為單位的頻率值。
2、tone(pin,frequency,duration):第二個函數(shù),有個duration參數(shù),它是以毫秒為單位,表示聲音長度的參數(shù)。像第一個函數(shù),如果沒有指定duration,聲音將一直持續(xù)直到輸出一個不同頻率的聲音產(chǎn)生。
3、noTone(pin):noTone(pin)函數(shù),結(jié)束該指定引腳上產(chǎn)生的聲音。

運(yùn)行程序,將打火機(jī)慢慢靠近火焰?zhèn)鞲衅?#xff0c;看看蜂鳴器會不會報(bào)警。

總結(jié)

以上是生活随笔為你收集整理的和12岁小同志搞创客开发:手撕代码,做一款火焰报警器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。