初步認知Arduino-3,按鈕控制LED燈以及擴展模塊

2022-04-14     大方老師單片機

原標題:初步認知Arduino-3,按鈕控制LED燈以及擴展模塊

步認知Arduino-3按鈕控LED以及擴展模塊

準備器材:

·開發板Arduino UNO

·麵包1

·麵包板跳線

·LED1

·220Ω電阻1

·10KΩ電阻1

·四腳開關1

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我也能領取哦。最近比較閒,帶做畢///

正文開始:

色環電阻

這邊同時使10K220的電阻,我們要學會分辨色環電阻的阻值,以免在實驗或者收拾的時候把兩者搞混了。這邊主要講一下四環電阻和五環電阻

色環電阻外表有不同顏色的環,通過這些環的顏色和位置(序列)可以計算出電阻的阻值,這樣又便於不同的開發人員、維修人員方便的讀出阻值,便於檢測和更換。

色環顏色

色環有不同的顏色,色環在不同位置代表不同的含義,可以代表數值、倍數和誤差。下面是四環和五環電阻色環所在位置代表的含義

四環電阻和五環電阻色環所在位置代表含義

假設現在有一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);

>

這邊定義了兩個常buttonPinledPin,這樣如果針腳換了只需要改變常量里的數字,就不用整個文件里去找去替換了,這是個好習慣(就HIGHLOW其實也是定義的常量)。一旦讀取到按下即亮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(){

//單次按動開LEDoldButtonState=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用了不同的速率,那麼接收和發送數據就會出現問題,9600Arduino的默認值,還可以設1920057600等等,Arduino IDE的串口監視器里也可以看到`Serial.print`輸出的信息可以在串口監視器里查看,可以用於簡單調試

這邊通`pinMode(buttonPin, INPUT_PULLUP)`打開內置的上拉電阻,使2號數字口一直收到高電平,直到按下按鍵才會收到低電平。這邊記錄舊的按鍵狀態的原因在於,一次按動根據按住時間不同出n次觸發,那麼如果長按則會出LED閃爍(一直切LED開關),或者連續快速按動按鍵,也會出LED燈開關不及時問題,因此需要記錄舊的按鍵狀態,來判斷是否是第一次按動按鍵

文章來源: https://twgreatdaily.com/zh-my/fc6adba2c37f2713f95fd6519b782820.html