1前言
事情是這樣的,本來在準備公眾號文章,想著用tinkercad模擬一下自己寫的程序,結果無論自己如何調整程序,都無法達到預期的效果,后來經過層層排查發現是被一個按鍵整破防了。
這種四腳按鍵的四個引腳在按下之前是兩兩相通的原理圖如下:
我在之前一直認為這種按鈕的四個腳都是獨立的,并且在按下后四個腳都會相通,經過查詢資料發現原來自己認為的一直都是錯的,這里把錯誤分享給大家,希望大家引以為戒(應該也不會有人像我一樣傻吧)
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; //定義三個變量存儲三個按鍵開關的狀態
bool ready = false; //定義一個變量用于記錄搶答器是否就緒的狀態
void setup() {
// put your setup code here, to run once:
// 定義引腳輸入輸出狀態
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(redButton, INPUT);
pinMode(yellowButton, INPUT);
pinMode(greenLed, INPUT);
pinMode(startButton, INPUT);
//將LED燈的初始化狀態設定為熄滅
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
// 讀取四個按鍵開關的狀態
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;
}
//當搶答器處于就緒狀態時
//紅色按鍵按下
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代碼分析
在實現搶答環節中主要用到了if函數,但是有一個參數至關重要,ready
的狀態直接決定了能否進入if循環,所以使用ready = false;
實現各個按鍵的互鎖。
判斷條件ready && y==0
用來判斷是否已經準備就緒,并且其他人還未成功搶到,只有這兩種情況同時滿足才能進入if
,并將ready
的狀態改為false
,防止進入其他if
。
另外有的朋友可能會說if
放置的先后順序會影響結果,其實代碼的運行速度是非常快的,并不會出現像大家想想的那種情況,所以在一定程度上還是公平的。
-
搶答器
+關注
關注
16文章
243瀏覽量
34962 -
按鈕
+關注
關注
0文章
134瀏覽量
13128 -
Arduino
+關注
關注
189文章
6494瀏覽量
190327
發布評論請先 登錄

基于STM32的無線搶答器
FPGA搶答器該怎么設計?
基于STM32的搶答器設計
多路智力競賽搶答器設計

PLC搶答器設計

評論