初步認知Arduino-3,按鈕控制LED燈以及擴展模塊
準備器材:
·開發板(Arduino UNO)
·麵包板1塊
·麵包板跳線
·LED燈:1個
·220Ω電阻:1個
·10KΩ電阻:1個
·四腳開關:1個
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我也能領取哦。最近比較閒,帶做畢設///
正文開始:
色環電阻
這邊同時使用10K和220的電阻,我們要學會分辨色環電阻的阻值,以免在實驗或者收拾的時候把兩者搞混了。這邊主要講一下四環電阻和五環電阻
色環電阻外表有不同顏色的環,通過這些環的顏色和位置(序列)可以計算出電阻的阻值,這樣又便於不同的開發人員、維修人員方便的讀出阻值,便於檢測和更換。
色環顏色
色環有不同的顏色,色環在不同位置代表不同的含義,可以代表數值、倍數和誤差。下面是四環和五環電阻色環所在位置代表的含義
四環電阻和五環電阻色環所在位置代表含義
假設現在有一個10KΩ的電阻,我們來看看其色環是這樣的
我們可以看出是棕-黑-黑-紅-棕的一個序列,然後我們根據五環電阻色環所在位置含義圖表來計算:
棕色在第一位百位為1,黑色在第二位和第三位即十位和個位為0,這樣數值部分就是100,然後第四位紅色代表倍數為100,這樣最終阻值是100×100=10000=10K,而第五位棕色代表10K這個數值的精度誤差上下浮動1%,即最後這個電阻阻值為10KΩ±1%
色環阻值讀取是有方向性的,就是從左往右計算和從右到左計算出來的阻值是不同的,我們來看一個200Ω的電阻
分別從兩邊計算電阻值,結果是不同的一個算出200Ω±1%,一個算出100Ω±2%,因此在色環電阻里還有一個比較重要的是判斷序列方向(因為色環電阻沒有標示正反的標記),這邊有一些判斷技巧:
·如果有無色出現,則那一端是末尾,因為無色只表示誤差
·如果有出現了金、銀,那麼金銀所在的那一端是末尾,因為金銀只能表示倍數和精度
·如果橙、黃、白、黑出現在最邊上,則這一端是開始,因為這些顏色不能表示精度
·如果白、灰出現在中間兩個位置之一,則偏向的一端是開始,因為它們都不能表示乘倍數
·經常會出現頭尾都是棕環,比較難以辨別,這個時候其實可以看間隔,第四環和第五環之間的間隔比第一環和第二環之間的間隔大
·如果都無法判斷可以用最後計算出來的阻值判斷,如果計算出來的阻值140Ω這種比較奇怪的阻值基本可以確定是錯誤的
間隔大小不同
四腳按鍵開關
四腳按鍵開關就是四個針腳按鍵開關,其中兩兩一組是互通,但是兩組之間是不通的,只有當按鈕被按下去(按住),信號發生跳變才會變為互通
如下圖所示,4個針腳,兩兩互通,但是兩組之間是不通的,按鈕被按住才會使其聯通,如果僅僅只接其中一組互通的進電路,這個按鈕其實就相當於導線而已,起不了任何作用,因此接線的時候最好確保正負極接入不同組中的接口
四腳按鍵開關實物圖
拉電阻
拉電阻分為上拉電阻和下拉電阻,通過下圖能簡單了解拉電阻:
拉電阻
為什麼要用拉電阻而不是直接連一條電線呢?因為直接連電線的話會出現短路現象,並且使用電阻可以避免元器件直接接GND。
Arduino UNO內部只有上拉電阻而沒有下拉電阻
接線
看一下接線圖,分兩部分,一部分是LED的,一部分是四腳按鍵開關的,前者之前已經做過,主要看後者
這邊2號引腳接到四腳按鍵開關,但是在沒有按下開關之前四腳按鍵開關的引腳懸空狀態,這種狀態會得到一個不穩定的值(可能是高也可能低電平,可能是電磁感應等原因產生的),這會導致程序會認為我們在一直隨機的按動按鍵,因此這邊需要加一個下拉電阻(接一個電阻(常用10KΩ)然後接入GND),這樣在沒接電的時候永遠是低電平(接地了),一旦按下按鍵通電之後,就能立馬判斷出高電平了
實際接線圖-返回第一張圖
這邊注意四腳按鍵開關要把針腳用一點力輕輕按進去,不能就輕輕放在表面
代碼 &效果
接好線檢查一下,然後打開Arduino IDE敲代碼
//定義常量constintbuttonPin=2;constintledPin=13;
intbuttonState=0;
voidsetup(){
pinMode(buttonPin,INPUT);
pinMode(ledPin,OUTPUT);}
voidloop(){
//按住才會亮buttonState=digitalRead(buttonPin);
if(buttonState==HIGH){
digitalWrite(ledPin,HIGH);
}else{
digitalWrite(ledPin,LOW);
>
這邊定義了兩個常量buttonPin和ledPin,這樣如果針腳換了只需要改變常量里的數字,就不用整個文件里去找去替換了,這是個好習慣(就像HIGH和LOW其實也是定義的常量)。一旦讀取到按下即亮起LED燈,效果如下:
擴展
這裡使用的是下拉電阻,其實也可以使用上拉電阻,並且Arduino UNO有內置的上拉電阻(沒有內置的下拉電阻),這邊我們就改造成內置的上拉電阻來實現按一次亮,再按一次滅的效果,接線圖如下:
代碼如下:
//定義常量constintbuttonPin=2;constintledPin=13;
//按鍵前一個狀態intoldButtonState=HIGH;//按鍵狀態intbuttonState=HIGH;// led燈狀態,false->沒亮,true->亮booleanledState=false;
voidsetup(){
//使用內置上拉電阻pinMode(buttonPin,INPUT_PULLUP);
pinMode(ledPin,OUTPUT);
Serial.begin(9600);}
voidloop(){
//單次按動開關LED燈oldButtonState=buttonState;
buttonState=digitalRead(buttonPin);
if(buttonState==LOW&&oldButtonState==HIGH){
Serial.print("oldButtonState: ");
Serial.println(oldButtonState);
Serial.print("buttonState: ");
Serial.println(buttonState);
Serial.print("ledState: ");
Serial.println(ledState);
if(ledState==true){
digitalWrite(ledPin,LOW);
}else{
digitalWrite(ledPin,HIGH);
}
ledState=!ledState;
>
這邊`Serial.begin(9600)`初始化串行連接傳輸9600b/s(每秒傳輸9600比特),因為如果開發板和PC用了不同的速率,那麼接收和發送數據就會出現問題,而9600只是Arduino的默認值,還可以設置19200、57600等等,在Arduino IDE的串口監視器里也可以看到。`Serial.print`輸出的信息可以在串口監視器里查看,可以用於簡單調試
這邊通過`pinMode(buttonPin, INPUT_PULLUP)`打開內置的上拉電阻,使得2號數字口一直收到高電平,直到按下按鍵才會收到低電平。這邊記錄舊的按鍵狀態的原因在於,一次按動根據按住時間不同出現n次觸發,那麼如果長按則會出現LED閃爍(一直切換LED開關),或者連續快速按動按鍵,也會出現LED燈開關不及時問題,因此需要記錄舊的按鍵狀態,來判斷是否是第一次按動按鍵