數(shù)字負(fù)載秤是現(xiàn)代工程和設(shè)計(jì)的另一個(gè)奇跡。是的,我們談?wù)摰氖俏覀冊(cè)诖蠖鄶?shù)雜貨店和其他地方經(jīng)常看到的體重秤,但你有沒有想過體重秤是如何工作的?為了回答這個(gè)問題,在這個(gè)項(xiàng)目中,我們將看看稱重傳感器及其工作原理。最后,我們將使用 HX711 重量傳感器構(gòu)建一個(gè)基于 Arduino 的便攜式負(fù)載秤,它可以測(cè)量高達(dá) 10 公斤的重量。
這臺(tái)稱重機(jī)非常適合本地商店,他們?cè)谀抢锱堪b物品。與商業(yè)產(chǎn)品一樣,我們的體重秤將有一個(gè)歸零按鈕,可將秤清零。此外,它具有設(shè)置重量進(jìn)行測(cè)量的選項(xiàng),當(dāng)測(cè)量重量達(dá)到設(shè)定重量時(shí),蜂鳴器快速響起,當(dāng)設(shè)定重量等于測(cè)量重量時(shí)停止。這樣,用戶只需聽到聲音就可以打包,而不必看顯示器。由于這是一個(gè)非常簡(jiǎn)單的項(xiàng)目,我們將使用 Arduino 和應(yīng)變計(jì)稱重傳感器等組件非常輕松地構(gòu)建它。所以,事不宜遲,讓我們開始吧。
Arduino稱重機(jī)工作
該項(xiàng)目的主要部件是一個(gè)稱重傳感器和HX711 稱重傳感器放大器模塊。如您所見,一側(cè)標(biāo)有十公斤。另外,您會(huì)注意到稱重傳感器上方有某種白色保護(hù)膠,并出現(xiàn)了四種不同顏色的電線,將在本文后面揭開白色保護(hù)膠下面的秘密以及這些四色電線的功能。
稱重傳感器是將力或壓力轉(zhuǎn)換為電輸出的傳感器。它有兩個(gè)側(cè)面,比如說右側(cè)和左側(cè),它是由鋁塊制成的。正如你所看到的,材料的中間通過放一個(gè)大孔變薄了。這就是為什么當(dāng)負(fù)載放置在安裝側(cè)時(shí)會(huì)發(fā)生變形的點(diǎn)。現(xiàn)在想象一下,右側(cè)傳感器安裝在底座上,左側(cè)是放置負(fù)載的位置,由于中間的巨大孔,這種配置會(huì)使應(yīng)變儀稱重傳感器變形。
當(dāng)負(fù)載放在稱重傳感器的負(fù)載側(cè)時(shí),頂部會(huì)受到拉力,而底部會(huì)受到壓力。這就是鋁條在左側(cè)向下彎曲的原因。如果我們測(cè)量這種變形,我們可以測(cè)量施加在鋁塊上的力,這正是我們要做的。
現(xiàn)在,問題仍然是白色保護(hù)膠里面是什么?在這種保護(hù)膠里面,我們會(huì)發(fā)現(xiàn)一個(gè)非常薄的彈性元件,叫做應(yīng)變儀。 應(yīng)變計(jì)是用于測(cè)量應(yīng)變的組件。如果我們仔細(xì)觀察這個(gè)組件,我們可以看到兩個(gè)連接焊盤,然后我們有一個(gè)重復(fù)偏轉(zhuǎn)的導(dǎo)線圖案。該導(dǎo)線具有確定的電阻。當(dāng)我們彎曲它時(shí),電阻值會(huì)改變嗎?因此,將應(yīng)變片的一側(cè)安裝并固定在一個(gè)地方,如果我們?cè)阡X棒的另一側(cè)放置一個(gè)重物,這將迫使應(yīng)變片彎曲,從而導(dǎo)致電阻發(fā)生變化。這實(shí)際上是如何發(fā)生的?應(yīng)變片的導(dǎo)電圖案是用銅做的,這根導(dǎo)線會(huì)有一定的面積??和長度,所以這兩個(gè)單元會(huì)給出導(dǎo)線的電阻。導(dǎo)線的電阻與電流的流動(dòng)相反。現(xiàn)在很明顯 如果這條線的面積變小了 更少的電子可以通過意味著更低的電流。現(xiàn)在,如果我們?cè)黾用娣e,它將增加導(dǎo)體的電阻。如果對(duì)該線施加一些力,這將拉伸該區(qū)域,同時(shí)它會(huì)變小,電阻會(huì)增加。但是這種電阻變化非常小。如果我們拉伸應(yīng)變片,電阻會(huì)增加,如果我們壓縮它,電阻會(huì)變小。為了測(cè)量力,我們需要測(cè)量阻力。直接測(cè)量電阻并不總是可行的,因?yàn)樽兓浅P R虼耍覀兛梢暂p松地測(cè)量電壓,而不是測(cè)量電阻。因此,在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。如果對(duì)該線施加一些力,這將拉伸該區(qū)域,同時(shí)它會(huì)變小,電阻會(huì)增加。但是這種電阻變化非常小。如果我們拉伸應(yīng)變片,電阻會(huì)增加,如果我們壓縮它,電阻會(huì)變小。為了測(cè)量力,我們需要測(cè)量阻力。直接測(cè)量電阻并不總是可行的,因?yàn)樽兓浅P R虼耍覀兛梢暂p松地測(cè)量電壓,而不是測(cè)量電阻。因此,在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。如果對(duì)該線施加一些力,這將拉伸該區(qū)域,同時(shí)它會(huì)變小,電阻會(huì)增加。但是這種電阻變化非常小。如果我們拉伸應(yīng)變片,電阻會(huì)增加,如果我們壓縮它,電阻會(huì)變小。為了測(cè)量力,我們需要測(cè)量阻力。直接測(cè)量電阻并不總是可行的,因?yàn)樽兓浅P R虼耍覀兛梢暂p松地測(cè)量電壓,而不是測(cè)量電阻。因此,在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。阻力會(huì)越來越低。為了測(cè)量力,我們需要測(cè)量阻力。直接測(cè)量電阻并不總是可行的,因?yàn)樽兓浅P R虼耍覀兛梢暂p松地測(cè)量電壓,而不是測(cè)量電阻。因此,在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。阻力會(huì)越來越低。為了測(cè)量力,我們需要測(cè)量阻力。直接測(cè)量電阻并不總是可行的,因?yàn)樽兓浅P R虼耍覀兛梢暂p松地測(cè)量電壓,而不是測(cè)量電阻。因此,在這種情況下,我們需要將儀表輸出從電阻值轉(zhuǎn)換為電壓值。
我們可以在惠斯通電橋的幫助下做到這一點(diǎn)。如果電橋是平衡的,我們將應(yīng)變計(jì)放置在惠斯通電橋中,中間點(diǎn)的電壓應(yīng)該為零(之前我們已經(jīng)建立了一個(gè)項(xiàng)目,其中我們描述了惠斯通電橋的工作原理,如果你想你可以檢查一下了解有關(guān)該主題的更多信息)。當(dāng)應(yīng)變片改變其電阻時(shí),會(huì)使電橋失衡,電壓也會(huì)發(fā)生變化。因此,這就是惠斯通電橋?qū)㈦娮枳兓D(zhuǎn)換為電壓值的方式。
但是這個(gè)電壓變化還是很小的,所以要增加它,我們需要使用HX711模塊。HX711 是一個(gè) 24 位差分 ADC,通過這種方式,我們可以測(cè)量非常小的電壓變化。它將給出從 0 到 2 的指數(shù) 24 的值。
基于 Arduino 的稱重機(jī)所需的組件
為了使這個(gè)項(xiàng)目盡可能簡(jiǎn)單,我們使用了非常通用的組件,您可以在任何本地愛好商店中找到這些組件。下圖將讓您了解組件。此外,我們還有下面列出的物料清單 (BOM)。
稱重傳感器(我們使用的是 10 kg 稱重傳感器)
HX 711 功放模塊
Arduino納米
I2C LCD 16X2 – I2C 兼容
1k電阻-2個(gè)
LED -2Nos
蜂鳴器
普通PCB
7.4V電池(如果你想要它便攜)
LM7805穩(wěn)壓器
基于 Arduino 的稱重機(jī) - 電路圖
稱重傳感器有四根電線,分別是紅、黑、綠和白。此顏色可能因制造商而異,因此最好參考數(shù)據(jù)表。紅色接HX711板子的E+,黑色接E-,白色接A+,綠色接A-,Dout,板子時(shí)鐘分別接D4和D5。將按鈕的一端連接到 D3、D8、D9,另一端接地。我們有 I2C LCD,所以將 SDA 連接到 A4,將 SCL 連接到 A5。將 LCD、HX711 和 Arduino 的地連接到地,同時(shí)將 VCC 連接到Arduino的 5Vpin 。所有模塊都在 5V 下工作,因此我們添加了一個(gè)LM7805 穩(wěn)壓器。如果您不希望它便攜,您可以使用 USB 電纜直接為 Arduino 供電。
在虛線穿孔板上制作電路
我們已將所有組件焊接在一個(gè)普通的點(diǎn)狀穿孔板上。我們使用母頭將 Arduino 和 ADC 與電路板焊接,我們還使用電線連接所有按鈕和 LED。完成所有焊接過程后,我們已確保從 LM7805 輸出正確的 5V。最后,我們?cè)O(shè)置了一個(gè)開關(guān)來打開/關(guān)閉電路。一旦我們都完成了,它看起來像下面的圖像。
為基于 Arduino 的稱重機(jī)構(gòu)建外殼
如您所見,稱重傳感器有一些螺紋,因此我們可以將其安裝在底板上。我們將使用 PVC 板作為秤的底座,為此,我們首先從 PVC 板上切割出 20*20 厘米的正方形和四個(gè) 20*5 的矩形。然后使用硬膠,我們把每一塊都粘起來,做成一個(gè)小外殼。
請(qǐng)記住,我們沒有固定一側(cè),因?yàn)槲覀冃枰谄渖戏胖冒粹o、LED 和 LCD。然后我們?cè)诔拥捻敳渴褂昧艘粔K塑料板。在永久設(shè)置此設(shè)置之前,我們需要確保從地面到稱重傳感器有足夠的空間,以便它能夠彎曲,所以我們?cè)诜Q重傳感器和底座之間放置了螺釘和螺母,我們還添加了稱重傳感器和頂部之間的一些塑料墊片。我們使用圓形塑料板作為平衡的頂級(jí)智能。
然后我們將LCD、LED和按鈕放在前面板上,所有東西都用長絕緣線連接。完成布線后,我們將前面板傾斜地粘在主底座上,這樣我們就可以很容易地從 LCD 讀取值。最后,我們將主開關(guān)連接到天平的一側(cè),就是這樣。這就是我們?yōu)轶w重秤制作身體的方式。
您可以根據(jù)自己的想法進(jìn)行設(shè)計(jì),但請(qǐng)記住將稱重傳感器放置在圖像中。
Arduino稱重機(jī) - 代碼
由于我們現(xiàn)在完成了數(shù)字秤的構(gòu)建過程,我們可以進(jìn)入編程部分。為了方便編程,我們將使用 HX711 庫、EEPROM 庫和LiquidCrystal 庫。您可以從官方 GitHub 存儲(chǔ)庫下載HX711 庫,或者轉(zhuǎn)到工具》包含 庫》管理 庫,然后使用關(guān)鍵字HX711搜索庫,下載庫后,將其安裝到 Arduino ide 中。
首先,我們需要校準(zhǔn)稱重傳感器并將該值存儲(chǔ)在 EEPROM 中,為此,轉(zhuǎn)到文件 》 示例 》 HX 711_ADC, 然后選擇校準(zhǔn)代碼。在上傳代碼之前,將天平放在穩(wěn)定的平面上。然后將代碼上傳到 Arduino 并打開串行監(jiān)視器。然后將波特率更改為 572600。現(xiàn)在監(jiān)視器要求稱重,為此我們需要按 t 并輸入。
現(xiàn)在,我們需要將已知重量放在天平上,在我的例子中,即 194gm。放置已知重量后,在串行監(jiān)視器上輸入重量,然后按 Enter。
現(xiàn)在,串行監(jiān)視器詢問您是否要將值保存在 EEPROM 中,因此請(qǐng)鍵入 Y 選擇是。現(xiàn)在我們可以在串行監(jiān)視器上看到重量。
該項(xiàng)目的主要代碼,我們從 HX711 庫的示例草圖開發(fā)。您可以從下面下載該項(xiàng)目的代碼。
在編碼部分,首先,我們添加了所有三個(gè)庫。HX711 庫用于獲取稱重傳感器值。EEPROM是Arduino ide的內(nèi)置庫,用于將值存儲(chǔ)在EEPROM中,LiquidCrystal庫用于l2C LCD模塊。
?
#include#include #include
?
然后為不同的引腳定義整數(shù)并分配值。HX711_ADC 稱重傳感器功能用于設(shè)置 Dout 和時(shí)鐘引腳。
?
常量 int HX711_dout = 4; 常量 int HX711_sck = 5; 詮釋 tpin = 3; HX711_ADC LoadCell(HX711_dout, HX711_sck); 常量 int calVal_eepromAdress = 0; 長 t; 常量 int Up_buttonPin = 9; 常量 int Down_buttonPin = 8; 浮動(dòng)按鈕PushCounter = 0; 浮動(dòng) up_buttonState = 0; 浮動(dòng) up_lastButtonState = 0; 浮動(dòng) down_buttonState = 0; 浮動(dòng) down_lastButtonState = 0;
?
在設(shè)置部分,我們首先啟動(dòng)了串口監(jiān)視器,這只是為了調(diào)試。然后我們定義了引腳模式,所有按鈕都定義為輸入。在 Arduino PULL UP 功能的幫助下,我們通常將引腳設(shè)置為邏輯高電平。因此,我們不想為此使用任何外部電阻器。
?
pinMode(tpin,INPUT_PULLUP); pinMode(6,輸出); pinMode(12,輸出); pinMode(Up_buttonPin,INPUT_PULLUP); pinMode( Down_buttonPin , INPUT_PULLUP);
?
以下代碼行用于設(shè)置 I2C LCD。首先,我們使用LCD.print()函數(shù)顯示歡迎文本,兩秒鐘后,我們使用lcd.clear?()清除顯示。也就是說,一開始,顯示器顯示ARDUINO BALANCE作為歡迎文字,兩秒鐘后,它會(huì)清除并顯示測(cè)量重量。
?
液晶顯示器(); 液晶背光(); lcd.setCursor(0, 0); lcd.print("ARDUINO 平衡"); lcd.setCursor(0, 1); lcd.print("讓我們測(cè)量一下"); 延遲(2000); lcd.clear();
?
然后開始使用loadCell.begin()函數(shù)從稱重傳感器讀取值,之后,我們讀取校準(zhǔn)值的 EEPROM,我們使用EEPROM.get()函數(shù)來完成。也就是說,我們已經(jīng)使用校準(zhǔn)草圖將值存儲(chǔ)在?EEPROM地址中,我們只需重新獲取該值。
?
LoadCell.begin(); EEPROM.get(calVal_eepromAdress,calibrationValue);
?
在循環(huán)部分,首先,我們使用LoadCell.update(?)檢查來自稱重傳感器的任何數(shù)據(jù)是否可用,如果可用,我們讀取并存儲(chǔ)該數(shù)據(jù),為此,我們使用LoadCell.getData()。接下來,我們需要在 LCD 中顯示存儲(chǔ)的值。為此,我們使用了LCD.print()函數(shù)。另外,我們打印設(shè)定的重量。設(shè)置重量是在按鈕計(jì)數(shù)器的幫助下設(shè)置的。這在上一節(jié)中解釋了。
?
if (LoadCell.update()) newDataReady = true; if (newDataReady) { if (millis() > t + serialPrintInterval) { float i = LoadCell.getData(); lcd.setCursor(0, 0); lcd.print("設(shè)置 wei:"); lcd.setCursor(9, 0); lcd.print(buttonPushCounter); lcd.setCursor(14, 0); lcd.print("GM"); lcd.setCursor(0, 1); lcd.print("重量:"); lcd.setCursor(9, 1); lcd.print(i); lcd.setCursor(14, 1); lcd.print("GM");
?
接下來,我們?cè)O(shè)置皮重值,為此,首先,我們使用?digitalRead()函數(shù)讀取皮重按鈕的狀態(tài),如果狀態(tài)低,我們將該重量去皮為零。該體重秤的去皮功能是將讀數(shù)歸零。例如,如果我們有一個(gè)裝有東西的碗,那么凈重將是碗的重量 + 東西的重量。如果我們?cè)谘b東西之前用稱重傳感器上的碗按下去皮按鈕,籃子的重量將被抵消,我們可以單獨(dú)測(cè)量東西的重量。
?
if (digitalRead(tpin) == LOW) { LoadCell.tareNoDelay();
?
現(xiàn)在,我們需要設(shè)置不同指示的條件,例如設(shè)置蜂鳴器的延遲和 LED 狀態(tài)。我們使用if?條件來做到這一點(diǎn),我們總共有三個(gè)條件。首先,我們計(jì)算設(shè)定重量和測(cè)量重量之間的差值,然后將該值存儲(chǔ)在變量 k 中。
?
浮動(dòng) k = buttonPushCounter-i ;
?
1.如果設(shè)定重量和測(cè)量重量的差值大于等于50gms,蜂鳴器會(huì)延遲200毫秒(慢)發(fā)出蜂鳴聲。
?
if ( k >= 50 ) { digitalWrite (6, HIGH); 延遲(200); 數(shù)字寫入(6,低); 延遲(200); }
?
2.如果設(shè)定重量與測(cè)量重量的差值小于 50 克且大于 1 克,蜂鳴器會(huì)延遲 50 毫秒(更快)發(fā)出蜂鳴聲。
?
if ( k < 50 && k > 1 ) { digitalWrite (6, HIGH); 延遲(50); 數(shù)字寫入(6,低); 延遲(50); }
?
3、當(dāng)計(jì)量重量等于或大于設(shè)定值時(shí),綠燈亮,蜂鳴器和紅燈滅。
?
if(i>=buttonPushCounter) { digitalWrite (6, LOW); 數(shù)字寫入(12,高); }
?
我們還有兩個(gè) void 函數(shù) () 用于設(shè)置設(shè)定重量(用于計(jì)算按鈕按下)。
每按一次設(shè)定值增加10gms的功能。這是通過使用 Arduino 的digitalRead功能來完成的,如果引腳為低電平,這意味著按鈕被按下,并且該值將增加 10gms。
?
up_buttonState = digitalRead(Up_buttonPin); if (up_buttonState != up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
?
相似地,
?checkdown 用于每按一次將設(shè)定值減少 10gms。
?
down_buttonState = digitalRead(Down_buttonPin); if (down_buttonState != down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter - 10; }
?
這標(biāo)志著編程部分的結(jié)束。
這種基于 Arduino 的電子秤非常適合測(cè)量高達(dá) 10 公斤的重量(我們可以通過使用更高額定的稱重傳感器來增加這個(gè)限制)。這與原始測(cè)量結(jié)果的準(zhǔn)確度為 99%。
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 2, 16);
HX711_ADC LoadCell(HX711_dout, HX711_sck);
常量 int HX711_dout = 4; //mcu > HX711 輸出引腳
常量 int HX711_sck = 5; //mcu > HX711 sck管腳
詮釋 tpin = 3;
常量 int calVal_eepromAdress = 0;
長 t;
常量 int Up_buttonPin = 9; // 按鈕所連接的引腳
常量 int Down_buttonPin = 8;
浮動(dòng)按鈕PushCounter = 0; // 按鈕按下次數(shù)的計(jì)數(shù)器
浮動(dòng) up_buttonState = 0; // 向上按鈕的當(dāng)前狀態(tài)
浮動(dòng) up_lastButtonState = 0; //向上按鈕的前一個(gè)狀態(tài)
浮動(dòng) down_buttonState = 0; // 向上按鈕的當(dāng)前狀態(tài)
浮動(dòng) down_lastButtonState = 0; //向上按鈕的前一個(gè)狀態(tài)
布爾 bPress = 假;
無效設(shè)置(){
序列號(hào).開始(57600);
延遲(10);
序列號(hào).println();
Serial.println("開始...");
pinMode(tpin,INPUT_PULLUP);
pinMode(6,輸出);
pinMode(12,輸出);
pinMode(Up_buttonPin,INPUT_PULLUP);
pinMode( Down_buttonPin , INPUT_PULLUP);
液晶顯示器();
液晶背光();
lcd.setCursor(0, 0);
lcd.print("ARDUINO 平衡");
lcd.setCursor(0, 1);
lcd.print("讓我們測(cè)量一下");
延遲(2000);
lcd.clear();
LoadCell.begin();
浮動(dòng)校準(zhǔn)值;// 校準(zhǔn)值(參見示例文件“Calibration.ino”)
校準(zhǔn)值 = 696.0;// 如果要在草圖中設(shè)置校準(zhǔn)值,請(qǐng)取消注釋
#如果定義(ESP8266)|| 定義(ESP32)
//EEPROM.begin(512); // 如果您使用 ESP8266/ESP32 并想從 eeprom 獲取校準(zhǔn)值,請(qǐng)取消注釋
#萬一
EEPROM.get(calVal_eepromAdress,calibrationValue); // 如果要從 eeprom 獲取校準(zhǔn)值,請(qǐng)取消注釋
穩(wěn)定時(shí)間長 = 2000;// 加電后的精度可以通過增加幾秒鐘的穩(wěn)定時(shí)間來提高
布爾_皮重=真;//如果您不希望在下一步中執(zhí)行去皮,請(qǐng)將其設(shè)置為 false
LoadCell.start(穩(wěn)定時(shí)間,_皮重);
if (LoadCell.getTareTimeoutFlag())
{
Serial.println("超時(shí),檢查 MCU>HX711 接線和引腳名稱");
而(1);
}
別的
{
LoadCell.setCalFactor(校準(zhǔn)值);//設(shè)置校準(zhǔn)值(浮點(diǎn)數(shù))
Serial.println("啟動(dòng)完成");
}
}
無效循環(huán)(){
靜態(tài)布爾 newDataReady = 0;
常量 int serialPrintInterval = 0; //增加值以減慢串行打印活動(dòng)
// 檢查新數(shù)據(jù)/開始下一次轉(zhuǎn)換:
if (LoadCell.update()) newDataReady = true;
// 從數(shù)據(jù)集中獲取平滑值:
如果(新數(shù)據(jù)就緒)
{
if (millis() > t + serialPrintInterval) {
浮動(dòng) i = LoadCell.getData();
Serial.print("Load_cell 輸出值:");
序列號(hào).println(i);
新數(shù)據(jù)就緒 = 0;
t = 毫秒();
lcd.setCursor(0, 0);
lcd.print("設(shè)置 wei:");
lcd.setCursor(9, 0);
lcd.print(buttonPushCounter);
lcd.setCursor(14, 0);
lcd.print("GM");
lcd.setCursor(0, 1);
lcd.print("重量:");
lcd.setCursor(9, 1);
lcd.print(i);
lcd.setCursor(14, 1);
lcd.print("GM");
}
}
清理(??);
checkDown();
如果(數(shù)字讀取(tpin)==低){
LoadCell.tareNoDelay();
}
// 檢查最后一次去皮操作是否完成:
if (LoadCell.getTareStatus() == true) {
lcd.clear();
lcd.print("去皮完成");
延遲(1000);
lcd.clear();
}
浮動(dòng) i = LoadCell.getData();
浮動(dòng) k = buttonPushCounter - i;
如果 ( k < 50 && k > 1 )
{
數(shù)字寫入(6,高);
延遲(50);
數(shù)字寫入(6,低);
延遲(50);
}
如果 ( k >= 50 )
{
數(shù)字寫入(6,高);
延遲(200);
數(shù)字寫入(6,低);
延遲(200);
}
if (i >= buttonPushCounter)
{
數(shù)字寫入(6,低);
數(shù)字寫入(12,高);
}
別的
{
數(shù)字寫入(12,低);
}
}
無效檢查()
{
up_buttonState = digitalRead(Up_buttonPin);
// 比較 buttonState 和之前的狀態(tài)
if (up_buttonState != up_lastButtonState)
{
// 如果狀態(tài)已經(jīng)改變,增加計(jì)數(shù)器
如果(up_buttonState == LOW)
{
bPress =真;
// 如果當(dāng)前狀態(tài)為 HIGH,則按鈕從關(guān)閉變?yōu)榇蜷_:
buttonPushCounter = buttonPushCounter + 10;
}
}
// 將當(dāng)前狀態(tài)保存為上一個(gè)狀態(tài),以備下次循環(huán)使用
up_lastButtonState = up_buttonState;
}
無效 checkDown()
{
down_buttonState = digitalRead(Down_buttonPin);
// 比較 buttonState 和之前的狀態(tài)
if (down_buttonState != down_lastButtonState)
{
// 如果狀態(tài)已經(jīng)改變,增加計(jì)數(shù)器
如果(down_buttonState == LOW)
{
bPress =真;
buttonPushCounter = buttonPushCounter - 10;
}
}
// 將當(dāng)前狀態(tài)保存為上一個(gè)狀態(tài),以備下次循環(huán)使用
down_lastButtonState = down_buttonState;
}
評(píng)論
查看更多