【Arduino官方教程第一輯】示例程式 5-6 While迴圈
While迴圈
有時你可能需要進行這樣的操作:如果某個條件為true的話就一直停在那裡,直到它由true變成false才繼續執行(反過來也可以,開始為false,直到true才繼續)。你可以使用while迴圈來做到這一點。本例向你展示如何使用while迴圈來校準模擬訊號感測器。
在loop中,我們讀取A0口的值,來給9號引腳上的LED調光。 但是當2號引腳上的按鍵被按下時,程式就會去執行calibrate() 函式(函式名意思叫 校準,這是自己定義的函式)。calibrate()會尋找模擬訊號的最大、最小值。當你鬆開按鍵時,loop()中的其他程式碼才會繼續被執行。
本例所展示的技巧能夠讓你在環境光線發生明顯改變時進行人工校準。
完成本例所需的硬體裝置
- Arduino板或Genuino板
- 按鍵或開關
- 光敏電阻或其他模擬訊號感測器
- 2個10kΩ電阻
- 麵包板
- 連線線
電路連線
連線模擬訊號感測器(例如:光敏電阻) 到A2口,並且加一個10kΩ下拉電阻。連線按鍵到數字引腳,並且加一個10kΩ下拉電阻。LED和220Ω電阻串接後連線到9號引腳。
原理圖
例程程式碼
/*
While迴圈
本例向你展示while()的使用。
當按鍵被按下時,工程將會啟動開始校準。
while迴圈中獲得的感測器資料講被取最大、最小值,然後對光敏電阻進行校準。
這是校準模擬訊號的另一個例子,之前也介紹過一種方法,不過這次重在演示while迴圈的使用。
電路搭建:
* 光敏電阻連線+5V 和A0口
* 10kΩ電阻連線GND和A0口
* LED與220Ω電阻串聯,並接到9號引腳
* 按鍵連線到A2口和+5V
* 10KΩ電阻連線到A2口到GND
程式碼公開。
*/
// 常亮定義:
const int sensorPin = A2; // 感測器引腳
const int ledPin = 9; // LED引腳
const int indicatorLedPin = 13; // 板載LED引腳
const int buttonPin = 2; // 按鍵引腳
// 變數:
int sensorMin = 1023; // 感測器最小值
int sensorMax = 0; // 感測器最大值
int sensorValue = 0; // 感測器值
void setup() {
// 將indicatorLedPin設定為OUTPUT模式:
pinMode(indicatorLedPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
// 當按鍵被按下時進行校準:
while (digitalRead(buttonPin) == HIGH) {
calibrate();
}
// 關閉LED,標誌校準結束
digitalWrite(indicatorLedPin, LOW);
// 讀取感測器值:
sensorValue = analogRead(sensorPin);
// 運用最大、最小值來校準感測器值
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
// 放置sensorValue超過上下限(正常最小0,最大255)
sensorValue = constrain(sensorValue, 0, 255);
// 使用sensorValue給LED調光:
analogWrite(ledPin, sensorValue);
}
void calibrate() {
// 將LED開啟,標示校準過程的開始:
digitalWrite(indicatorLedPin, HIGH);
// 讀取感測器值:
sensorValue = analogRead(sensorPin);
// 記錄最大值
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// 記錄最小值
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
相關資料
更新程序
日期 | 日誌 | 譯者 |
---|---|---|
2016年6月2日 | 建立並翻譯文件 | 唐家勳 |
譯者:唐家勳
郵箱:[email protected]
QQ:649196486
轉載請註明出處,一切只因為熱愛。
希望您能指出寶貴意見,謝謝。
相關推薦
【Arduino官方教程第一輯】示例程式 5-6 While迴圈
While迴圈 有時你可能需要進行這樣的操作:如果某個條件為true的話就一直停在那裡,直到它由true變成false才繼續執行(反過來也可以,開始為false,直到true才繼續)。你可以使用while迴圈來做到這一點。本例向你展示如何使用while迴
【Arduino官方教程第一輯】示例程式 5-1 陣列
陣列 本例中我們使用for迴圈配合一個數組變數向你展示Arduino中陣列的使用。陣列是一個有多個”部分”的變數。如果我們把普通變數看做一個盛裝值的“杯子”,那麼陣列就好像是一個“製冰器”。陣列就好像是一連串“杯子”,每個杯子都可以儲存一個值(不過這些值
【Arduino官方教程第一輯】示例程式 5-4 Switch和Case條件語句
Switch和Case條件語句 If語句允許你根據條件的真假(真(TRUE)或假(FALSE))進行兩個分支操作。當需要進行多個判斷時,你就必須使用If巢狀。不過其實還有一種更為簡潔的處理多條件判斷的方法,那就是使用switch語句,switch語句允許
【Arduino官方教程第一輯】示例程式 5-3 If條件判斷
If條件判斷 條件判斷結構是程式設計中的最基本結構,在Arduino和其他語言中往往用if()語句實現條件判斷。if()讓你能夠根據某個條件(Condition)的真假執行不同的程式碼。(條件只有兩種可能,要麼是真(true)要麼是假(false))if語句的
【Arduino官方教程第一輯】示例程式 3-2 模擬訊號輸入
模擬訊號輸入 本例中,我們根據電位器(或用光敏電阻替代)的阻值變化來改變LED閃爍頻率。電阻的模擬訊號值將根據電壓變化。 完成本例所需的硬體裝置 Arduino板或Genuino板 電位器 或 10kΩ光敏電阻+10kΩ電阻 紅色220Ω LED
【Arduino官方教程第一輯】示例程式-目錄
譯者序:即將進入大學學習,我謹以本文件的來作為我CSDN部落格的開篇。前段時間看了許多文章,便覺得作為一個程式設計師開通自己的技術部落格是十分重要的。因為這樣做不僅能夠提高自己的技術水平、將知識做鞏固和回爐,還能通過自己的奉獻讓更多人獲利。最好發揮知識
【Arduino官方教程第一輯】示例程式 6-3 Memsic2125加速度計
Memsic2125加速度計 Memsic2125是一款兩軸加速度計,它能夠測量兩個方向正負2g的加速度(g代表重力加速度)。它的引腳設計很簡單:只有兩個資料輸出引腳,一個為X軸,一個為Y軸。它的資料輸出引腳會根據加速度的大小輸出不同的脈寬(不知道脈寬是
【Arduino官方教程第一輯】示例程式 3-5 模擬訊號的校準
模擬訊號的校準 本例向你展示校準感測器的一個技巧:在啟動時先讀取感測器值5秒鐘,然後尋找其最大、最小值。校準後的最大、最小值將在map函式有用。 完成本例所需的硬體裝置 Arduino板或Genuino板 LED 模擬訊號的感測器(光敏電阻就
【Arduino官方教程第一輯】示例程式 4-11 虛擬調色盤
虛擬調色盤 本例向你展示如何從Arduino傳送多個值到電腦。從三個電位器上獲取的值將被用來給Processing工程或Max/MSP工程設定背景色。 完成本例所需的硬體裝置 Arduino板或Genuino板 3個模擬訊號感測器 (電位器,
【Arduino官方教程第零輯】基礎部分 2-2 模擬引腳
模擬引腳 本文是對於Arduino晶片上模擬引腳的介紹。上面所說的Arduino晶片主要包括(Atmega8, Atmega168,Atmega328或Atmega1280)。 數模轉換電路 Arduino中使用的Atmega控制器都配有一個板
【Arduino基礎教程】LCD5110顯示屏
Nokia 5110顯示屏模組 準備材料 Arduino UNO *1 Nokia 5110 LCD *1 跳線 若干 接線 Nokia 511
【三星官方教程】如何為Gear VR 開發應用(一):開發環境搭建(轉)
三星GearVR已經成為第一個成熟的移動VR平臺,並擁有目前全球最大也是最穩定的移動VR使用者群體。基於GearVR的應用越來越多,本文將為開發者介紹如何用Unity為Gear VR開發一個360度圖片檢視器。 搭建開發環境(Windows OS) 在開始用Uni
【Arduino基礎教程】RS1307時鐘模組
RS1307時鐘模組 RS1307是一個低功耗的外接時鐘模組,它可以讓你的專案即使在斷電的情況下,也能保證在重新啟動後走時正確。 所需材料 1x Ar
【Nutch基礎教程之七】Nutch的2種執行模式:local及deploy
mapred nap ont nal servlet miss mos ant issue 在對nutch源碼執行ant runtime後,會創建一個runtime的文件夾。在runtime文件夾下有deploy和local 2個文件夾。 [[email
【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求
情況 led 興趣 題目 嵌入式開發 廣東 難點 在一起 參數 【CC2530入門教程-增強版】基礎技能綜合實訓案例(基礎版)-題目需求 廣東職業技術學院 歐浩源 一、引用 不管是簡單的單片機應用,還是復雜的嵌入式系統,在我看來它們的本質結構是差不多的,都離不開“
【Lucene4.8教程之二】索引
文件路徑 位置 存在 this nth 創建索引 exe 搜索 最簡 一、基礎內容 0、官方文檔說明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, whic
【CQ18階梯賽第一場】題解
sca 就是 scanf main ace con 連續 動態 return 【A-風格不統一如何寫程序】 輸入字符串,得到長度,對於每個字符:如果是大寫,則改為:‘_’+小寫;如果是‘_’則忽略‘_&rsquo
【Vue,自學第一天】
ever return 改變 修改 底層 IT 綁定 包裝 paragraph 一、創建第一個 Vue 應用 接下來我們創建第一個 Vue 應用。 View 層 - HTML 代碼如下: <div id="app"> {{ message }} </
【Docker系列教程之五】如何構建Dockerfile
在上一篇文章中,我們講述了 Dockerfile 的組成以及指令的編寫過程,在本篇文章中詳細講解如何構建 Dockerfile 。 Dockerfile常用的指令 那麼在講如何構建 Dockerfile 之前,我們回顧一下上一篇的編寫過程:
【Docker系列教程之七】如何將自制的漏洞環境打包成映象進行共享
我在之前的文章中只是說過,利用 Dockerfile 去拉去映象,而這些映象的拉取都是從 Docker Hub 上拉取下來,而現在我有個想法,我製作好了一個漏洞環境整合的映象,我又該如何進行開源共享,提供給別人使用呢?這就是我們今天的主題了。 首先我們得準備一個 Docker Hub 的帳號, Docker