久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 54073|回復(fù): 7
收起左側(cè)

Arduino教程-另一種時(shí)間延遲

[復(fù)制鏈接]
ID:99556 發(fā)表于 2015-12-19 21:13 | 顯示全部樓層 |閱讀模式
Hi,大家好!經(jīng)過(guò)前幾次的學(xué)習(xí),我們對(duì)Arduino有了基本的了解。接下來(lái)我們將繼續(xù)深入的學(xué)習(xí)。
還記得嗎?在前幾次的學(xué)習(xí)過(guò)程中,我們?cè)?jīng)多次使用到了delay()這個(gè)可以讓時(shí)間延遲的方法。為了在接下來(lái)的學(xué)習(xí)過(guò)程中,能夠更靈活的對(duì)延時(shí)進(jìn)行控制,這一次,我們?cè)囍魬?zhàn)一下如何在不使用delay()方法的情況下,依然可以做到時(shí)間延時(shí)!
開(kāi)始之前,還讓我們準(zhǔn)備一下所需的材料。
硬件方面
arduino-led.jpg
圖片來(lái)源:Arduino 電路配件
具體包括如下:
  • Arduino UNO電路板(1塊)
  • mini面包板(1塊)
  • 220歐姆電阻(1個(gè))
  • LED燈(1盞)
  • 面包線(2根)
配件看起來(lái)是不是很眼熟?其實(shí)和點(diǎn)亮LED神燈所需的配件一樣的。不僅如此,電路的連接上也是一樣的呢!
軟件方面
Arduino官方提供的IDE。
連接電路
arduino-led-light.jpg
圖片來(lái)源:Arduino連接LED電路示意圖
看看是不是和之前學(xué)過(guò)的點(diǎn)亮LED神燈的電路連接是一樣的?畢竟這次我們的重點(diǎn)在程序,電路起到的是一個(gè)輔助的角色。好!關(guān)于這個(gè)就不啰嗦了,下面重點(diǎn)看程序!
添加幾行代碼
首先打開(kāi)Arduino的IDE,新建一個(gè)Arduino項(xiàng)目窗口。
arduino-menu.jpg
圖片來(lái)源:Arduino官方IDE
新建完成之后,向其中添加幾行代碼。如下:

  1. // 定義LED燈針腳號(hào)
  2. const int ledPin =  13;
  3. // 定義LED燈點(diǎn)亮狀態(tài)
  4. int ledState = LOW;
  5. // 定義上一次loop到當(dāng)前l(fā)oop的時(shí)間間隔,
  6. // 數(shù)值類型為毫秒,
  7. // 變量類型為無(wú)符號(hào)長(zhǎng)整型。
  8. unsigned long previousMillis = 0;
  9. // 定義常量來(lái)表示固定的時(shí)間間隔,
  10. // 此處為1000毫秒,也即1秒鐘,
  11. // 變量類型為長(zhǎng)整型。
  12. const long interval = 1000;

  13. // 對(duì)Arduino電路板或相關(guān)狀態(tài)進(jìn)行初始化方法
  14. void setup() {
  15.   // 設(shè)置LED針腳類型為狀態(tài)輸出針腳
  16.   pinMode(ledPin, OUTPUT);

  17. }
  18. // 系統(tǒng)調(diào)用,無(wú)限循環(huán)方法
  19. void loop() {
  20.   // 記錄程序執(zhí)行到此處的時(shí)間,
  21.   // 數(shù)值類型為毫秒,
  22.   // 變量類型為無(wú)符號(hào)長(zhǎng)整型。
  23.   unsigned long currentMillis = millis();

  24.   // 判斷當(dāng)前的時(shí)間與上一次記錄時(shí)間的時(shí)間
  25.   // 間隔是否大于等于internal數(shù)值,
  26.   // 此處的internal是我們自定義的時(shí)間間隔。
  27.   // 如果大于等于internal數(shù)值,則執(zhí)行內(nèi)部操作,
  28.   // 否則進(jìn)入下一次loop循環(huán)。
  29.   if (currentMillis - previousMillis >= interval) {
  30.     // 更新previousMillis變量數(shù)值,
  31.     // 也即更新上一次時(shí)間記錄為
  32.     // 當(dāng)前時(shí)間。
  33.     previousMillis = currentMillis;
  34.     // 判斷LED燈狀態(tài),并進(jìn)行更改,
  35.     // 如果為亮,則變?yōu)闇纭?br />
  36.     // 如果為滅,則變?yōu)榱痢?br />
  37.     if (ledState == LOW) {
  38.       ledState = HIGH;
  39.     } else {
  40.       ledState = LOW;
  41.     }
  42.     // 將LED狀態(tài)變量的更改結(jié)果發(fā)送給LED燈元器件。
  43.     digitalWrite(ledPin, ledState);
  44.   }
  45. }
復(fù)制代碼



哈!今天的代碼猛然看起來(lái)有點(diǎn)長(zhǎng)。其實(shí)吧,還好,還好!如果刪除代碼注釋,其實(shí)也是很簡(jiǎn)短滴!叫板的話,今天的代碼里其實(shí)也只出現(xiàn)了一個(gè)新面孔,那就是millis()方法。這個(gè)方法的作用是獲取當(dāng)前的時(shí)間,返回的數(shù)值為無(wú)符號(hào)長(zhǎng)整型,時(shí)間單位是毫秒。loop()方法中的if語(yǔ)句,作用就是判斷上一次的時(shí)間和當(dāng)前時(shí)間的間隔是否大于等于interval數(shù)值,此處設(shè)置的為1秒鐘。如果大于等于1秒鐘,則重新記錄,將previousMillis變量設(shè)置為當(dāng)前時(shí)間,即currentMillis數(shù)值。
圖片來(lái)源:Arduino官方IDE的文件編輯菜單選項(xiàng)
最后點(diǎn)擊上圖中指向右側(cè)的箭頭圖標(biāo),將代碼燒入Arduino UNO電路板中。現(xiàn)在看看LED燈是否是每隔1秒鐘閃爍一次?你還可以在interval數(shù)值定義的地方更改其數(shù)值,重新將代碼燒入Arduino UNO電路板,以加快或減慢LED燈閃爍的頻率。
總結(jié)
今天我們一起學(xué)習(xí)了如何在不使用delay()方法的情況下實(shí)現(xiàn)時(shí)間延遲。不使用delay()方法的好處是,可以在每次延遲中加入自定義邏輯,在每次延遲的過(guò)程中完成多個(gè)操作。
下期預(yù)告
前面的學(xué)習(xí),我們每次只涉及一個(gè)元器件。接下來(lái),我們將嘗試加入多個(gè)元器件。下一次,我們將嘗試用開(kāi)關(guān)按鍵控制LED神燈的亮和滅!


ohcoder的系列精彩Arduino教程:
Arduino教程-初識(shí)Arduino(包含本教程目錄):http://www.zg4o1577.cn/bbs/dpj-41334-1.html
Arduino教程-開(kāi)篇:http://www.zg4o1577.cn/bbs/dpj-41335-1.html
Arduino教程-點(diǎn)亮LED神燈:http://www.zg4o1577.cn/bbs/dpj-41336-1.html
Arduino教程-讓LED神燈閃爍:http://www.zg4o1577.cn/bbs/dpj-41337-1.html
Arduino教程-讓LED神燈亮度漸變:http://www.zg4o1577.cn/bbs/dpj-41338-1.html
Arduino教程-獲取輸入數(shù)字信號(hào):http://www.zg4o1577.cn/bbs/dpj-41339-1.html
Arduino教程-獲取輸入模擬信號(hào):http://www.zg4o1577.cn/bbs/dpj-41340-1.html
Arduino教程-另一種時(shí)間延遲:http://www.zg4o1577.cn/bbs/dpj-41331-1.html
Arduino教程-按鍵開(kāi)關(guān):http://www.zg4o1577.cn/bbs/dpj-41341-1.html
Arduino教程-停止抖動(dòng)!:http://www.zg4o1577.cn/bbs/dpj-41333-1.html
Arduino教程-拋棄外部電阻!:http://www.zg4o1577.cn/bbs/dpj-41332-1.html
Arduino教程-用按鍵開(kāi)關(guān)計(jì)數(shù):http://www.zg4o1577.cn/bbs/dpj-41330-1.html

………后續(xù)持續(xù)更新中請(qǐng)打開(kāi):http://www.zg4o1577.cn/bbs/dpj-41334-1.html
回復(fù)

使用道具 舉報(bào)

ID:150345 發(fā)表于 2016-11-26 15:19 | 顯示全部樓層
謝謝分享。如果想要更改閃爍頻率,增加delay就可以了,如果將這個(gè)閃爍做成數(shù)碼管時(shí)間顯示的中間兩個(gè)點(diǎn),那么要如何實(shí)現(xiàn)閃爍時(shí)長(zhǎng)設(shè)定又不影響其他的顯示呢?
回復(fù)

使用道具 舉報(bào)

ID:164854 發(fā)表于 2017-2-15 22:59 來(lái)自手機(jī) | 顯示全部樓層
正需要
回復(fù)

使用道具 舉報(bào)

ID:137736 發(fā)表于 2017-4-28 18:26 來(lái)自手機(jī) | 顯示全部樓層
interval函數(shù)可用于精確的定時(shí)和日歷
回復(fù)

使用道具 舉報(bào)

ID:246093 發(fā)表于 2018-6-20 22:32 | 顯示全部樓層
請(qǐng)問(wèn)這個(gè)可以讓單片機(jī)不用等待嗎?例如執(zhí)行播放一段語(yǔ)音,然后條件符合播放,程序同時(shí)繼續(xù)運(yùn)行
回復(fù)

使用道具 舉報(bào)

ID:432246 發(fā)表于 2018-11-24 10:44 | 顯示全部樓層
適合初學(xué)者   很好
回復(fù)

使用道具 舉報(bào)

ID:437501 發(fā)表于 2018-12-2 09:25 | 顯示全部樓層
老師好!我是剛接觸ARDUINO愛(ài)好者,我想用它來(lái)控制步進(jìn)機(jī)定時(shí)開(kāi)關(guān)門,我想請(qǐng)教 一下如果在時(shí)間周期停電了怎么解決這個(gè)問(wèn)題?
回復(fù)

使用道具 舉報(bào)

ID:81365 發(fā)表于 2022-1-16 22:25 | 顯示全部樓層
ARDUINO和Android還以為是一碼事呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 999久久久精品 | 国产免费一区二区三区 | 久久99国产精品 | 国产精品久久久久久久久久久久 | 精品一区在线看 | 日韩av一区二区在线观看 | 在线观看av网站永久 | 99re在线视频观看 | www.啪啪.com| 天天干天天谢 | 国产一级片精品 | 国产一区三区在线 | 午夜精品久久 | 岛国一区 | 色综合久 | 激情91| 国产精品成人一区二区三区 | 午夜av电影院 | 毛片在线免费播放 | 国产成年人小视频 | 中文天堂在线一区 | 视频在线一区二区 | 久久出精品 | 亚洲一区二区三区在线视频 | 久久综合狠狠综合久久综合88 | 久久久久亚洲精品 | 欧美日韩成人在线 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 午夜视频免费 | 欧美 视频 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 亚洲www啪成人一区二区 | 色www精品视频在线观看 | 久久久久久免费毛片精品 | 久草综合在线视频 | 性一爱一乱一交一视频 | 日韩一区av| 日韩精品一区二区三区四区视频 | 久久久精品高清 | 免费一级欧美在线观看视频 | 麻豆av一区二区三区久久 |