arduino項(xiàng)目整理說(shuō)課材料_第1頁(yè)
arduino項(xiàng)目整理說(shuō)課材料_第2頁(yè)
arduino項(xiàng)目整理說(shuō)課材料_第3頁(yè)
arduino項(xiàng)目整理說(shuō)課材料_第4頁(yè)
arduino項(xiàng)目整理說(shuō)課材料_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除報(bào)警器代碼FloatsinVal//浮點(diǎn)型sin函數(shù)變量InttoneVal//整形音調(diào)變量Voidsetup(){pinmode(8,OUTPUT)//設(shè)置引腳為8的輸出}Voidloop(){For(intx=0;x<180,x++)//for循環(huán)初始變量為0度范圍0——180增加{word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除sinVal=(sin(x*(3.1412/180)) //將角度轉(zhuǎn)換為弧度制賦值給 sinValtoneVal=2000+(int(sinVal*1000)) //將數(shù)值化為整數(shù),無(wú)小數(shù)}tone(8,toneVal) //給引腳8音調(diào)delay(2) //延遲2毫秒}}SOS求救器SOS求救器是通過(guò)LED開(kāi)關(guān)兩種狀態(tài)來(lái)拼出一個(gè)個(gè)字母。 通過(guò)長(zhǎng)閃爍和短閃爍來(lái)表示點(diǎn)和橫杠。我們這個(gè)項(xiàng)目中, 我們就拼寫S.O.S這三個(gè)字母。通過(guò)查閱莫爾斯碼表,我們可以知道,字母“ S”用三個(gè)點(diǎn)表示,我們這里用短閃爍替代,字母“O”則用三個(gè)橫 杠表示,用長(zhǎng)閃爍替代。【實(shí)驗(yàn)現(xiàn)象】LED燈短閃爍三次,停頓 0.1s,長(zhǎng)閃爍3次,停頓0.1s,再短閃爍三次,停頓五秒,最后循環(huán)整個(gè)程序?!驹囼?yàn)線路圖】按圖連接好線路圖(注意 LED燈正負(fù)極及接地)注釋:藍(lán)線接地(Gnd)紅線接10號(hào)【程序2-1】intledPin=10;voidsetup(){pinMode(ledPin,OUTPUT);word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除}voidloop(){三個(gè)快閃爍來(lái)表示字母“S”digitalWrite(ledPin,HIGH); //LED 亮燈(高電平)delay(150); // 延時(shí)程序150(150ms)digitalWrite(ledPin,LOW); //LED 熄滅 (低電平)delay(100); // 延時(shí)程序150(150ms)digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(150);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(150);digitalWrite(ledPin,LOW);delay(100);delay(100); //100 毫秒延時(shí)產(chǎn)生字母之間的間隙這是程序S的表示方法,三個(gè)短閃爍,然后延時(shí)三個(gè)短閃爍來(lái)表示字母“O”digitalWrite(ledPin,HIGH); //LED 亮燈(高電平)delay(400); // 延時(shí)程序400(400ms)digitalWrite(ledPin,LOW); //LED 熄滅 (低電平)delay(100); // 延時(shí)程序100(100ms)word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(400);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(400);digitalWrite(ledPin,LOW);delay(100);delay(100); //100 毫秒延時(shí)產(chǎn)生字母之間的間隙這是程序O的表示方法,三個(gè)長(zhǎng)閃爍,然后延時(shí)再用三個(gè)快閃爍來(lái)表示字母“S”digitalWrite(ledPin,HIGH); //LED 亮燈(高電平)delay(150); // 延時(shí)程序150(150ms)digitalWrite(ledPin,LOW); //LED 熄滅 (低電平)delay(100); // 延時(shí)程序150(150ms)digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(150);digitalWrite(ledPin,LOW);delay(100);digitalWrite(ledPin,HIGH); // 同第一段程序注釋相同delay(150);digitalWrite(ledPin,LOW);word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除delay(100);這是程序S的表示方法,三個(gè)短閃爍,然后延時(shí)delay(5000); // 在重復(fù)S.0.S信號(hào)前等待5秒最后延遲5s然后循環(huán)程序}這就是一段完整的 SOS求救器的程序,在經(jīng)過(guò)電路測(cè)試好之后,我們可以簡(jiǎn)化一下我們的程序,進(jìn)一步的加深難度?!境绦?-2】intledPin=10;voidsetup(){pinMode(ledPin,OUTPUT);}voidloop() // 三個(gè)快閃爍來(lái)表示字母“ S”{for(intx=0;x<3;x++){digitalWrite(ledPin,HIGH); // 設(shè)置LED為開(kāi)delay(150); // 延時(shí)150毫秒digitalWrite(ledPin,LOW); // 設(shè)置LED為關(guān)delay(100); // 延時(shí)100毫秒}delay(100); //100 毫秒延時(shí)產(chǎn)生字母之間的間隙這是程序S的表示方法,三個(gè)短閃爍,然后延時(shí)三個(gè)短閃爍來(lái)表示字母“O”word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除for(intx=0;x<3;x++){digitalWrite(ledPin,HIGH); // 設(shè)置LED為開(kāi)delay(400); // 延時(shí)400毫秒digitalWrite(ledPin,LOW); // 設(shè)置LED為關(guān)delay(100); // 延時(shí)100毫秒}delay(100); //100 毫秒延時(shí)產(chǎn)生字母之間的間隙這是程序O的表示方法,三個(gè)長(zhǎng)閃爍,然后延時(shí)再用三個(gè)快閃爍來(lái)表示字母“S”for(intx=0;x<3;x++){digitalWrite(ledPin,HIGH); // 設(shè)置LED為開(kāi)delay(150); // 延時(shí)150毫秒digitalWrite(ledPin,LOW); // 設(shè)置LED為關(guān)delay(100); // 延時(shí)100毫秒}這是程序S的表示方法,三個(gè)短閃爍,然后延時(shí)delay(5000); // 在重復(fù)S.0.S信號(hào)前等待5秒}在輸入代碼的時(shí)候,注意保持代碼的一個(gè)層次感, 除了美觀外,也便于你日后檢查代碼。確認(rèn)正確后,下載代碼到 Arduino 中,如果一切順利的話,我們將看到LED閃爍出莫爾斯碼S.O.S信號(hào),等待5秒。重復(fù)閃爍。給Arduino外接電池,整個(gè)裝到防水的盒子里,就可以用來(lái)發(fā) S.O.S信號(hào)了?!狙a(bǔ)充】【for語(yǔ)句格式】for(①循環(huán)初始化;②循環(huán)條件;③循環(huán)調(diào)整語(yǔ)句 )word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除{④循環(huán)體語(yǔ) 條件為真 句;}For循環(huán)順序第一輪:①→②→③→④第二輪:②→③→④直到2不成立,for循環(huán)結(jié)束【比較運(yùn)行符】==(等于)!=(不等于)<(小于)>(大于)<=(小于等于)>=(大于等于)特別要說(shuō)明一下,等于必須是兩個(gè) 等號(hào)。還有像小于等于和大于等 于,<和=之間不能留有空格,否則編譯不通過(guò)。當(dāng)然,除了比較運(yùn)算符外,程序也可以用的+、-、*、/(加、減、乘、除)這些常用的算術(shù)運(yùn)算符。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除呼吸燈方法一:intpwm=0; // 聲明pwm變量intPinMode=3;voidsetup(){word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除Serial.begin(9600);}viodloop(){analongWrite(PinMode,pwm); // 設(shè)置PWM占空比delay(100);pwm++; // 增加輸出的PWM占空比}PWM簡(jiǎn)稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種有效技術(shù),這種技術(shù)被廣泛應(yīng)用在測(cè)量、通信、功率控制與變換的許多領(lǐng)域中。模擬輸出用到的函數(shù)為analongWrite(pin,value), 其中pin是輸出的引腳號(hào),value為0~255之間的數(shù)值。通過(guò)這種函數(shù),硬件PWM通過(guò)0~255之間的任一值來(lái)編程,其中0為關(guān)閉,255為全功率,0~255之間的任意一個(gè)值都會(huì)產(chǎn)生一個(gè)約490HZ的占空比可變的脈沖序列。Arduino軟件限制PWM通道為8位計(jì)數(shù)器。方法二intledPin=10; // 將10號(hào)端口命名為ledPinvoidsetup(){pinMode(ledPin,OUTPUT); // 設(shè)置端口的模式為輸出模式}voidloop(){word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除fadeOn(1000,5); // 調(diào)用fadeOn函數(shù) 將1000傳輸nsignedinttime 中5傳輸?shù)絠ntincreament 中fadeOff(1000,5); // 調(diào)用fadeOff函數(shù)}voidfadeOn(unsignedinttime,intincreament) //fadeOn 函數(shù)讀取括號(hào)中的數(shù)值?{for(bytevalue=0;value<255;value+=increament)//for 循環(huán)實(shí)現(xiàn)小燈從暗到亮{analogWrite(ledPin,value); // 將value的值通過(guò)pwm來(lái)表示出來(lái)delay(time/(255/5)); ? // 每一次循環(huán)后等待的時(shí)間}}voidfadeOff(unsignedinttime,intdecreament) //fadeOff 函數(shù)讀取括號(hào)中的數(shù)值?{for(bytevalue=255;value>0;value-=decreament) //for 循環(huán)實(shí)現(xiàn)小燈從亮到暗{analogWrite(ledPin,value); // 將value的值通過(guò)pwm來(lái)表示出來(lái)word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除delay(time/(255/5)); ? // 每一次循環(huán)后等待的時(shí)間}}analogWrite()其作用是給端口寫入一個(gè)模擬值(PWM波)??梢杂脕?lái)控制LED燈的亮度變化,或者以不同的速度驅(qū)動(dòng)馬達(dá)。當(dāng)執(zhí)行analogWrite()命令后,端口會(huì)輸出一個(gè)穩(wěn)定的占空比的方波。除非有下一個(gè)命令來(lái)改變它。PWM信號(hào)的頻率大約為490Hz.在使用uno的arduino控制板上,其工作在3,5,6,9,10,11 端口。在使用analogWrite() 命令前,可以不使用pinMode()命令把端口定義為輸出端口,當(dāng)然如果定義了更好,這樣利于程序語(yǔ)言規(guī)范。語(yǔ)法analogWrite(pin,value)參數(shù)pin:寫入的端口value:占空比:在0-255之間。注釋與已知問(wèn)題當(dāng)PWM輸出與5,6號(hào)端口的時(shí)候,會(huì)產(chǎn)生比預(yù)期更高的占空比。原因是PWM輸出所使用的內(nèi)部時(shí)鐘,millis()與delay()兩函數(shù)也在使用。所以要注意使用5,6號(hào)端口時(shí),空占比要設(shè)置的稍微低一些,或者會(huì)產(chǎn)生5,6號(hào)端口無(wú)word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除法輸出完全關(guān)閉的信號(hào)。PWM(Pulse-widthmodulation )脈寬調(diào)制PWM是使用數(shù)字手段來(lái)控制模擬輸出的一種手段。使用數(shù)字控制產(chǎn)生占空比不同的方波(一個(gè)不停在開(kāi)與關(guān)之間切換的信號(hào))來(lái)控制模擬輸出。以本次實(shí)驗(yàn)來(lái)看,端口的輸入電壓只有兩個(gè)0V與5V。如我我想要3V的輸出電壓怎么辦。。。有同學(xué)說(shuō)串聯(lián)電阻,對(duì)滴,這個(gè)方法是正確滴。但是如果我想1V,3V,3.5V等等之間來(lái)回變動(dòng)怎么辦呢?不可能不停地切換電阻吧。這種情況下。。。就需要使用PWM了。他是怎么控制的呢,對(duì)于arduino的數(shù)字端口電壓輸出只有LOW與HIGH兩個(gè)開(kāi)關(guān),對(duì)應(yīng)的就是0V與5V的電壓輸出,咱本把LOW定義為0,HIGH定義為1.一秒內(nèi)讓arduino輸出500個(gè)0或者1的信號(hào)。如果這500個(gè)全部為1,那就是完整的5V,如果全部為0,那就是0V。如果010101010101這樣輸出,剛好一半一半,輸出端口就感覺(jué)是 2.5V的電壓輸出了。這個(gè)和咱們放映電影是一個(gè)道理,咱們所看的電影并不是完全連續(xù)的,它其實(shí)是每秒輸出25張圖片,在這種情況下人的肉眼是分辨不出來(lái)的, 看上去就是連續(xù)的了。PWM也是同樣的道理,如果想要不同的電壓,就控制 0與1的輸出比例控制就ok~當(dāng)然。。。這和真實(shí)的連續(xù)輸出還是有差別的,單位時(shí)間內(nèi)輸出的0,1信號(hào)越多,控制的就越精確。在下圖中,綠線之間代表一個(gè)周期,其值也是PWM頻率的倒數(shù)。換句話說(shuō)如果arduinoPWM的頻率是500Hz,那么兩綠線之間的周期就是 2毫秒。analogWrite() 命令中可以操控的范圍為 0-255,analogWrite(255)表示100%占空比(常開(kāi)),analogWrite(127)占空比大約為50%(一半的時(shí)間)。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除傳統(tǒng)方法實(shí)現(xiàn)PWM除了使用analogWrite() 命令實(shí)現(xiàn)PWM,還可以通過(guò)傳統(tǒng)方法來(lái)控制電平的開(kāi)關(guān)時(shí)間來(lái)設(shè)置。請(qǐng)看如下代碼voidsetup(){pinMode(13,OUTPUT);//設(shè)定13號(hào)端口為輸出}56voidloop()word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除{digitalWrite(13,HIGH);9delayMicroseconds(100);//大約10%占空比的1KHz方波10digitalWrite(13,LOW);11delayMicroseconds(900);12}這種方法的的優(yōu)點(diǎn)是他可以使用任意數(shù)字端口做輸出端口。 而且可以自己隨意設(shè)定占空比與頻率。一個(gè)主要的缺點(diǎn)是任何中斷都會(huì)影響時(shí)鐘, 這樣就會(huì)導(dǎo)致很大的抖動(dòng),除非你禁用中斷。第二個(gè)卻就是CPU在處理輸出的時(shí)候,就無(wú)法做其他事情了。上面的代碼用到了一個(gè)新的命令delayMicroseconds()其作用是產(chǎn)生一個(gè)延時(shí),計(jì)量單位是微秒, 1000微秒=1毫秒。目前delayMicroseconds() 最大值為16383。如果值大于1000,推薦使用delay() 命令。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除炫彩RGBLED共陽(yáng)RGB與共陰RGB的區(qū)別1)接線中的改變,共陽(yáng)的話,共用端需要接5V,而不是GND,否則LED不能被點(diǎn)亮。2)第二點(diǎn)就是,在顏色的調(diào)配上,與共陰是完全相反的。舉個(gè)例子:共陰RGB顯示紅色為R-255,G-0,B-0。然而共陽(yáng)則完全相反,RGB數(shù)值是R-0, G-255,B-255。連接之前,先判別 RGB是共陰還是共陽(yáng)word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除首先需要了解兩個(gè)函數(shù)指令constrain()函數(shù)需要3個(gè)參數(shù):x、a和b。這里x是你的控制對(duì)象,a是最小值,b是最大值。如果值小于a,則返回a。如果大于b,則返回b。random()函數(shù)用于生成一個(gè)隨機(jī)數(shù), min是隨機(jī)數(shù)的最小值,max是隨機(jī)數(shù)的最word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除大值。最主要的部分,也就是主函數(shù)。主函數(shù)中調(diào)用了一個(gè)自己創(chuàng)建的函數(shù)colorRGB(),函數(shù)有三個(gè)傳遞參數(shù),用于寫入Red、Green、Blue的值,也就是0~255的值那么讓我們 來(lái)看程序intredPin=9;intgreenPin=10;intbluePin=11;設(shè)置每個(gè)顏色引腳對(duì)應(yīng)的端口voidsetup(){pinMode(redPin,OUTPUT);pinMode(greenPin,OUTPUT);pinMode(bluePin,OUTPUT);}設(shè)置每個(gè)端口的模式為輸出voidloop(){//R:0-255G:0-255B:0-255colorRGB(random(0,255),random(0,255),random(0,255));delay(1000);}word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除設(shè)置一個(gè)隨機(jī)顏色的值voidcolorRGB(intred,intgreen,intblue){analogWrite(redPin,constrain(red,0,255));analogWrite(greenPin,constrain(green,0,255));analogWrite(bluePin,constrain(blue,0,255));}給予顏色的取值范圍word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除感光燈這個(gè)項(xiàng)目中將介紹一個(gè)新元件——光敏電阻。從名字可以看出,這個(gè)器件是依賴光作用的。在黑暗的環(huán)境中,光敏電阻具有非常高阻值的電阻。光線越強(qiáng),電阻值反而越低。通過(guò)讀取這個(gè)電阻值,就可以檢查光線的亮暗了。光敏二極管=感光元件,光照亮大,輸出組織小,流經(jīng)電流大,反之則小所需元件:ArduinoUno*1原型拓展版*1條線(公公頭)*5220歐電阻*15MMLED燈*110k電阻*1光敏電阻*1STEP1:硬件連接LED燈還是和以往一樣的接法。而光敏二極管是有正負(fù)極的,和 LED一樣,也是遵循長(zhǎng)腳(+),短腳(-)的原則。還需注意的與光敏二極管相連的電阻是 10k,而不是220Ω。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除STEP2:輸入代碼完成硬件連接后,打開(kāi)ArduinoIDE,輸入下面這段代碼。1.intLED=13;//設(shè)置LED燈為數(shù)字引腳132.intval=0;//設(shè)置模擬引腳0讀取光敏二極管的電壓值3.voidsetup(){4.pinMode(LED,OUTPUT);//LED為輸出模式5.Serial.begin(9600);//串口波特率設(shè)置為96006.}7.voidloop(){8.val=analogRead(0);//讀取電壓值0~10239.Serial.println(val);//串口查看電壓值的變化10.if(val<1000){//一旦小于設(shè)定的值,LED燈關(guān)閉11.digitalWrite(LED,LOW);12.}else{//否則LED亮起13.digitalWrite(LED,HIGH);14.}15.delay(10);//延時(shí)10ms1. 對(duì)端口進(jìn)行申明對(duì) 13號(hào)命名為L(zhǎng)ED同理0號(hào)端口為讀取VALword可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除2. 功能定義13號(hào)口LED在此為輸出端口9600為信息傳送速率(讀取模擬量)模擬量讀?。▽⒋硕丝跀?shù)據(jù)讀取,顯示數(shù)據(jù))if 語(yǔ)句如果val<1000信號(hào)輸出使LED有低電平,使熄滅如果val>1000信號(hào)輸出使LED有高電平,點(diǎn)亮,延時(shí)十秒STEP3:代碼回顧我們之講LM35溫度傳感器的時(shí)候,也用到了用模擬口讀值。強(qiáng)調(diào)了,模擬量不需要輸入輸出模式。這里,也是同樣用模擬口用來(lái)讀取光敏二極管的模擬值。一旦有光照射,讀出的模擬值就會(huì)減小,這里設(shè)定的上限值是1000。這個(gè)值可以按你需要的亮度來(lái)選取。選取方法:先把整個(gè)裝置放在你想讓LED關(guān)閉的一個(gè)環(huán)境下,然后打開(kāi)串口,查看串口顯示的值,把這個(gè)值替換掉代碼中的 1000。從串口讀值,是調(diào)試代碼一種很好的方法。STEP4:硬件回顧這里接觸了一種新元件——光敏器件。這類器件都是將光信號(hào)變成電信號(hào)的特殊電子元件。元件內(nèi)部有特殊的光導(dǎo)材料,外部用塑料或者玻璃封裝。光線照射在這類光導(dǎo)材料上時(shí),光敏器件的電阻值就會(huì)迅速變小。光敏元件有很多,光敏電阻,光敏二極管,光敏三極管等等。不過(guò)原理是差不多的。我們這里選用的是光敏二極管。光敏二極管其實(shí)是光敏電阻中的一種。所謂二極管,就是有正負(fù)極的,所以在連線的時(shí)候也要注意正負(fù)極。光敏電阻在黑暗的環(huán)境中,具有非常高阻值的電阻。光線越強(qiáng),電阻值反而越低。隨著兩端電阻值的減小,電壓也就相應(yīng)減?。◤哪M口讀到的值也就變小,模擬口0~1023的值對(duì)應(yīng)是0~5V的電壓值)。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除互動(dòng)交通信號(hào)燈針對(duì)紅黃綠交通的燈進(jìn)行一個(gè)拓展,增加一種行人按鍵請(qǐng)求通過(guò)馬路的功能。當(dāng)按鍵按下時(shí)Arduino會(huì)自動(dòng)反應(yīng),改變交通燈的狀態(tài),讓車停下,允許行人通過(guò)。此項(xiàng)目開(kāi)始實(shí)現(xiàn) Arduino的互動(dòng)也會(huì)在代碼中學(xué)習(xí)到如何創(chuàng)建自己的函數(shù)。元器件ArduinoUno*1原型拓展版*1條線(公公頭)*13歐姆電阻*6按鍵開(kāi)關(guān)*15MMLED燈紅*2綠*2黃*1接線行車燈紅黃綠與人行燈紅綠串聯(lián)限流電阻后陽(yáng)極分別連接數(shù)字口 12,11,10,8,7,負(fù)極共陰接地代碼intcarRed=12;//設(shè)置汽車紅燈引腳intcarYellow=11;//設(shè)置汽車黃燈引腳intcarGreen=10;//設(shè)置汽車綠燈引腳intbutton=9;//按鈕引腳intpedRed=8;//設(shè)置人行紅燈引腳intpedGreen=7;//設(shè)置人行紅燈引腳word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除intcrossTime=5000; // 允許行人通過(guò)的時(shí)間unsignedlongchangeTime; // 按鈕按下后的時(shí)間voidsetup(){pinMode(carRed,OUTPUT); // 設(shè)置汽車紅燈為輸出模式pinMode(carYellow,OUTPUT); // 設(shè)置汽車黃燈為輸出模式pinMode(carGreen,OUTPUT); // 設(shè)置汽車綠燈為輸出模式pinMode(pedRed,OUTPUT); // 設(shè)置人行紅燈為輸出模式pinMode(pedGreen,OUTPUT); // 設(shè)置人行綠燈為輸出模式pinMode(button,INPUT); // 按鈕設(shè)置為輸入模式digitalWrite(carGreen,HIGH); // 開(kāi)始時(shí)汽車燈綠燈亮digitalWrite(pedRed,HIGH); // 開(kāi)始時(shí)行人燈紅燈亮}voidloop(){intstate=digitalRead(button); // 設(shè)置按鈕為數(shù)字量輸入if(state==HIGH&&(millis()-changTime)>5000 ); // 檢測(cè)按鈕是否被按下,并且是否距上次按下按鈕后有 5秒的等待時(shí)間{changeLights(); // 調(diào)用變燈函數(shù)}}voidchangeLights() // 變燈函數(shù){digitalWrite(carGreen,LOW); // 汽車綠燈滅digitalWrite(carYellow,HIGH); // 汽車黃燈亮delay(2000); // 等待2秒digitalWrite(carYellow,LOW); // 汽車黃燈滅digitalWrite(carRed,HIGH)); // 汽車紅燈亮word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除delay(1000); // 為安全考慮等待一秒digitalWrite(carYellow,LOW); // 汽車黃燈滅digitalWrite(carRed,HIGH); // 汽車紅燈亮delay(crossTime); // 等待一個(gè)通過(guò)時(shí)間for(int x=0;x<10;x++) // 閃爍行人綠燈,提示可通過(guò)馬路時(shí)間快到{digitalWrite(pedGreen,HIGH);Delay(250);digitalWrite(pedGreen,LOW);Delay(250);}digitalWrite(pedRed,HIGH);//行人紅燈亮delay(500);//等待0.5秒digitalWrite(carYellow,HIGH);//行人黃燈亮delay(1000);//等待1秒digitalWrite(carYellow,LOW);//汽車黃燈滅digitalWrite(carGreen,HIGH);//汽車綠燈亮changeTime=millis();//將按鈕按下后的時(shí)間轉(zhuǎn)變?yōu)樯洗伟粹o按下后的時(shí)間}要點(diǎn)1.220歐姆電阻作用:限流2.選擇不同變量原因:微控制器內(nèi)部存儲(chǔ)容量有限。 ArduinoUNO板上主芯片Atmega328最大內(nèi)存32K,應(yīng)盡量少用存儲(chǔ)空間,能不用就不用。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除變量類型有多種,不同的數(shù)對(duì)應(yīng)不同的變量,int和long是針對(duì)整數(shù)變量,char是針對(duì)字符型變量,而float,double是針對(duì)含有小數(shù)點(diǎn)的變量。13函數(shù)digitalRead ()這個(gè)函數(shù)是用來(lái)讀取數(shù)字引腳狀態(tài),high還是low(high也可表示為1,low也可表示為0),函數(shù)需要一個(gè)傳遞參數(shù)——pin。此處需讀取的是按鍵信號(hào),按鍵所在引腳為數(shù)字引腳9,讀取結(jié)果為high,即按鍵按下導(dǎo)通,結(jié)果為low即按鍵斷開(kāi)。14函數(shù)changeLights()這是一個(gè)函數(shù)調(diào)用。該函數(shù)單獨(dú)寫在loop()函數(shù)之外。需要使用時(shí),直接寫出函數(shù)名就可以實(shí)現(xiàn)調(diào)用。該函數(shù)是void型,所以是無(wú)返回值、無(wú)傳遞參數(shù)的函數(shù)。當(dāng)函數(shù)被調(diào)用時(shí),程序自動(dòng)跳到它的函數(shù)中運(yùn)行。運(yùn)行完之后,再跳回主函數(shù)。注意:函數(shù)調(diào)用時(shí),函數(shù)調(diào)用時(shí),函數(shù)名后面的括號(hào)不能省,要和所寫的函數(shù)保持一致。15邏輯語(yǔ)句if (表達(dá)式){語(yǔ)句}這是一種條件判斷的語(yǔ)句,判斷是否滿足括號(hào)內(nèi)的條件,如果滿足則執(zhí)行花括號(hào)內(nèi)的語(yǔ)句,如不滿足則跳出if語(yǔ)句。表達(dá)式是語(yǔ)句的判斷條件,通常為一些關(guān)系式或邏輯式,也可以是直接表示某一數(shù)值。如果if表達(dá)式條件為真則執(zhí)行if中的語(yǔ)句。表達(dá)式條件為假,則跳出if語(yǔ)句。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除、邏輯運(yùn)算符常用邏輯運(yùn)算符&&——邏輯與(兩者同時(shí)滿足)——邏輯或(兩者人其中一個(gè)滿足)!——邏輯非(取反,相反的情況)&&與&區(qū)別:都表示邏輯與,&&還具有短路功能,即第一個(gè)表達(dá)式為假則不執(zhí)行第二個(gè)表達(dá)式,&還可以用作位運(yùn)算符當(dāng)兩邊表達(dá)式不是 boolean類型時(shí),&表示按位與操作。7.函數(shù)millis()millis()-changTime)>5000millis()是一個(gè)函數(shù),該函數(shù)是arduino語(yǔ)言自有的函數(shù),它返回值是一個(gè)時(shí)間,arduino開(kāi)始運(yùn)行到執(zhí)行到當(dāng)前的時(shí)間,也稱之為機(jī)器時(shí)間,如同一個(gè)隱形時(shí)鐘,從控制器開(kāi)始運(yùn)行的那一刻起開(kāi)始計(jì)時(shí),以毫秒為單位。變量 changeTime初始化時(shí),不儲(chǔ)存任何數(shù)值,直到millis() 賦值給它,才開(kāi)始有數(shù)值,且隨millis()值變化而變化。通過(guò) millis() 函數(shù)不斷記錄時(shí)間,判斷兩次記錄的時(shí)間間隔是否大于5秒,5秒之內(nèi)不予反應(yīng),以防止重復(fù)按鍵導(dǎo)致運(yùn)行錯(cuò)誤,讓交通燈之間的跳轉(zhuǎn)完整完成。按鍵開(kāi)關(guān)按鍵共有四個(gè)引腳。1與4,2與3始終導(dǎo)通,1、4和2、3之間按鍵按下就導(dǎo)通了,否則為斷開(kāi)。下拉電阻“下拉”可以理解為吧電壓往下拉,價(jià)低電壓。按鍵作為開(kāi)關(guān),當(dāng)輸入電路狀態(tài)為high時(shí),電壓要盡可能接近5v,輸入電路狀態(tài)為low時(shí),電壓要盡可能接word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除近0v。若不能確保狀態(tài)接近所需電壓,這部分電路會(huì)產(chǎn)生電壓浮動(dòng),讀取的數(shù)字量不能確保正確。一圖未接下拉電阻按鍵為按下時(shí)input引腳處于懸空狀態(tài),空氣會(huì)使該引腳電壓產(chǎn)生浮動(dòng),不能確保為0v。二圖接了下拉電阻,按鍵為按下時(shí),9號(hào)口通過(guò)電阻接地確保為0v,不會(huì)產(chǎn)生電壓浮動(dòng)現(xiàn)象。word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除舵機(jī)初動(dòng)舵機(jī),其實(shí)就是個(gè)低端的伺服電機(jī)系統(tǒng), 它也是最常見(jiàn)的伺服電機(jī)系統(tǒng)。 主要是由外殼、電路板、無(wú)核心馬達(dá)、齒輪與位置檢測(cè)器所構(gòu)成。它將 PWM信號(hào)與滑動(dòng)變阻器的電壓相比對(duì),通過(guò)硬件電路實(shí)現(xiàn)固定控制增益的位置控制。它使用一個(gè)反饋系統(tǒng)來(lái)控制電機(jī)的位置??梢院芎谜莆针姍C(jī)角度。大多數(shù)舵機(jī)是可以最大旋轉(zhuǎn) 180°的。也有一些能轉(zhuǎn)更大角度,甚至360°。#include<Servo.h> // 聲明調(diào)用Servo.h庫(kù)Servomyservo; // 創(chuàng)建一個(gè)舵機(jī)對(duì)象intpos=0; // 變量pos用來(lái)存儲(chǔ)舵機(jī)位置voidsetup(){myservo.attach(9); // 將引腳9上的舵機(jī)與聲明的舵機(jī)對(duì)象連接起來(lái)}voidloop(){for(pos=0;pos<180;pos+=1){ // 舵機(jī)從0°轉(zhuǎn)到180°,每次增加1°myservo.write(pos); // 給舵機(jī)寫入角度delay(15); // 延時(shí)15ms讓舵機(jī)轉(zhuǎn)到指定位置}for(pos=180;pos>=1;pos-=1){ // 舵機(jī)從180°轉(zhuǎn)回0°每次減小1°myservo.write(pos); // 寫角度到舵機(jī)word可編輯資料收集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系網(wǎng)站刪除delay(15); // 延時(shí)15ms

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論