1前言
事情是這樣的,本來在準備公眾號文章,想著用tinkercad模擬一下自己寫的程序,結果無論自己如何調整程序,都無法達到預期的效果,后來經過層層排查發(fā)現是被一個按鍵整破防了。

這種四腳按鍵的四個引腳在按下之前是兩兩相通的原理圖如下:

我在之前一直認為這種按鈕的四個腳都是獨立的,并且在按下后四個腳都會相通,經過查詢資料發(fā)現原來自己認為的一直都是錯的,這里把錯誤分享給大家,希望大家引以為戒(應該也不會有人像我一樣傻吧)
2效果演示
所需材料:
連接電路圖:
實現功能:
1、主持人按下按鈕才能開始搶答,并且閃燈提示;
2、選手A搶答后選手B、C將無法進行搶答;
3、主持人再次點擊按鈕可以恢復搶答模式,并閃燈提示;
3主程序
//定義LED燈的引腳
const int greenLed = 10;
const int yellowLed = 9;
const int redLed = 8;
//定義按鍵開關引腳
const int greenButton = 2;
const int yellowButton = 3;
const int redButton = 4;
const int startButton = 5;
int r=1,y=1,b=1,s=1; //定義三個變量存儲三個按鍵開關的狀態(tài)
bool ready = false; //定義一個變量用于記錄搶答器是否就緒的狀態(tài)
void setup() {
// put your setup code here, to run once:
// 定義引腳輸入輸出狀態(tài)
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(redButton, INPUT);
pinMode(yellowButton, INPUT);
pinMode(greenLed, INPUT);
pinMode(startButton, INPUT);
//將LED燈的初始化狀態(tài)設定為熄滅
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
// 讀取四個按鍵開關的狀態(tài)
r = digitalRead(redButton);
y = digitalRead(yellowButton);
b = digitalRead(greenButton);
s = digitalRead(startButton);
if(s==0){ //如果主持人按下開始搶答按鈕,選手前面的LED閃爍3次
for(int i=0;i<3;i++){
digitalWrite(redLed, HIGH);
digitalWrite(yellowLed, HIGH);
digitalWrite(greenLed, HIGH);
delay(500);
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
delay(500);
}
ready = true;
}
//當搶答器處于就緒狀態(tài)時
//紅色按鍵按下
if(ready && r==0){
digitalWrite(redLed, HIGH);
ready = false;
}
//黃色按鍵按下
if(ready && y==0){
digitalWrite(yellowLed, HIGH);
ready = false;
}
//藍色按鍵按下
if(ready && b==0){
digitalWrite(greenLed, HIGH);
ready = false;
}
}
4效果演示
,時長00:41
[ ]
5代碼分析
在實現搶答環(huán)節(jié)中主要用到了if函數,但是有一個參數至關重要,ready的狀態(tài)直接決定了能否進入if循環(huán),所以使用ready = false;實現各個按鍵的互鎖。
判斷條件ready && y==0用來判斷是否已經準備就緒,并且其他人還未成功搶到,只有這兩種情況同時滿足才能進入if,并將ready的狀態(tài)改為false,防止進入其他if。
另外有的朋友可能會說if放置的先后順序會影響結果,其實代碼的運行速度是非??斓?,并不會出現像大家想想的那種情況,所以在一定程度上還是公平的。
-
搶答器
+關注
關注
17文章
243瀏覽量
35707 -
按鈕
+關注
關注
0文章
134瀏覽量
13499 -
Arduino
+關注
關注
190文章
6527瀏覽量
197527
發(fā)布評論請先 登錄
基于STM32的無線搶答器
FPGA搶答器該怎么設計?
基于STM32的搶答器設計
多路智力競賽搶答器設計
PLC搶答器設計
用Arduino寫個搶答器
評論