0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用Arduino寫個(gè)搶答器

汽車電子技術(shù) ? 來源:嵌入式悅翔園 ? 作者:李斌 ? 2023-02-17 11:25 ? 次閱讀

1前言

事情是這樣的,本來在準(zhǔn)備公眾號文章,想著用tinkercad模擬一下自己寫的程序,結(jié)果無論自己如何調(diào)整程序,都無法達(dá)到預(yù)期的效果,后來經(jīng)過層層排查發(fā)現(xiàn)是被一個(gè)按鍵整破防了。

圖片

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

圖片

我在之前一直認(rèn)為這種按鈕的四個(gè)腳都是獨(dú)立的,并且在按下后四個(gè)腳都會相通,經(jīng)過查詢資料發(fā)現(xiàn)原來自己認(rèn)為的一直都是錯(cuò)的,這里把錯(cuò)誤分享給大家,希望大家引以為戒(應(yīng)該也不會有人像我一樣傻吧)

2效果演示

所需材料:

  • Arduinio uno開發(fā)板一個(gè)
  • 按鍵四個(gè)
  • LED燈三個(gè)
  • 電阻七個(gè)
  • 杜邦線若干

連接電路圖:圖片

實(shí)現(xiàn)功能:

1、主持人按下按鈕才能開始搶答,并且閃燈提示;

2、選手A搶答后選手B、C將無法進(jìn)行搶答;

3、主持人再次點(diǎn)擊按鈕可以恢復(fù)搶答模式,并閃燈提示;

3主程序

//定義LED燈的引腳
const int greenLed = 10;
const int yellowLed = 9;
const int redLed = 8;

//定義按鍵開關(guān)引腳
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;  //定義三個(gè)變量存儲三個(gè)按鍵開關(guān)的狀態(tài)
bool ready = false;   //定義一個(gè)變量用于記錄搶答器是否就緒的狀態(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)設(shè)定為熄滅
  digitalWrite(redLed, LOW);
  digitalWrite(yellowLed, LOW);
  digitalWrite(greenLed, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  // 讀取四個(gè)按鍵開關(guān)的狀態(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;
     }

     //當(dāng)搶答器處于就緒狀態(tài)時(shí)
     //紅色按鍵按下
     if(ready && r==0){
      digitalWrite(redLed, HIGH);
      ready = false;
      }

      //黃色按鍵按下
     if(ready && y==0){
      digitalWrite(yellowLed, HIGH);
      ready = false;
      }

      //藍(lán)色按鍵按下
      if(ready && b==0){
      digitalWrite(greenLed, HIGH);
      ready = false;
      }       
}

4效果演示

,時(shí)長00:41

[ ]

5代碼分析

在實(shí)現(xiàn)搶答環(huán)節(jié)中主要用到了if函數(shù),但是有一個(gè)參數(shù)至關(guān)重要,ready的狀態(tài)直接決定了能否進(jìn)入if循環(huán),所以使用ready = false;實(shí)現(xiàn)各個(gè)按鍵的互鎖。

判斷條件ready && y==0用來判斷是否已經(jīng)準(zhǔn)備就緒,并且其他人還未成功搶到,只有這兩種情況同時(shí)滿足才能進(jìn)入if,并將ready的狀態(tài)改為false,防止進(jìn)入其他if。

另外有的朋友可能會說if放置的先后順序會影響結(jié)果,其實(shí)代碼的運(yùn)行速度是非常快的,并不會出現(xiàn)像大家想想的那種情況,所以在一定程度上還是公平的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 搶答器
    +關(guān)注

    關(guān)注

    16

    文章

    243

    瀏覽量

    34551
  • 按鈕
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12840
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    187658
收藏 人收藏

    評論

    相關(guān)推薦

    基于數(shù)字電路的多路搶答器設(shè)計(jì)

    本文介紹一種數(shù)字電路組成的顯示優(yōu)先搶答號碼的多路搶答器的設(shè)計(jì)與制作。
    發(fā)表于 03-31 09:28 ?1.2w次閱讀
    基于數(shù)字電路的多路<b class='flag-5'>搶答器</b>設(shè)計(jì)

    #電子制作 #Arduino 搶答器小實(shí)驗(yàn)

    搶答器Arduino
    電子技術(shù)那些事兒
    發(fā)布于 :2022年08月09日 21:25:55

    求c程序 基于12864的八路搶答器

    本人大二,做個(gè)基于12864的八路搶答器,c程序不怎么給力,不懂怎么寫個(gè)好程序,求幫忙。。。。。
    發(fā)表于 05-17 22:55

    基于STM32的無線搶答器

    無線搶答器采用STM32F103ZET6(STM 32F103ZET6數(shù)據(jù)手冊)芯片主控,同時(shí)藍(lán)牙模塊HC-05,語音模塊ISD1760(ISD1760數(shù)據(jù)手冊),數(shù)碼管,七彩燈等部件構(gòu)成,當(dāng)
    發(fā)表于 08-29 14:13

    制作搶答器

    第四章 搶答器的制作(Arduino邊做邊學(xué):從點(diǎn)亮Led到物聯(lián)網(wǎng))
    發(fā)表于 06-24 12:18

    FPGA搶答器該怎么設(shè)計(jì)?

    主要有兩種:小規(guī)模數(shù)字邏輯芯片譯碼和觸發(fā)來做,另外一種單片機(jī)來做;小規(guī)模數(shù)字邏輯電路比較復(fù)雜,單片機(jī)來做隨著搶答組數(shù)的增加有時(shí)候存在
    發(fā)表于 09-24 08:24

    基于STM32的搶答器設(shè)計(jì)

    前言最近在指導(dǎo)一個(gè)小學(xué)弟完成他的設(shè)計(jì),借此機(jī)會記錄一個(gè)小項(xiàng)目從“系統(tǒng)結(jié)構(gòu)設(shè)計(jì)、器件選型、PC板繪制、程序調(diào)試”的過程。目的:設(shè)計(jì)一個(gè)四人的搶答器設(shè)計(jì)要求:1、搶答器可同時(shí)供四組搶答;2、搶答器
    發(fā)表于 07-26 06:14

    多路智力競賽搶答器設(shè)計(jì)

    掌握搶答器的工作原理及其設(shè)計(jì)方法。重點(diǎn):定時(shí)搶答器的總體框圖的產(chǎn)生。難點(diǎn):搶答器控制電路的設(shè)計(jì)。一、搶答器的功能要求·基本功能① 設(shè)計(jì)一個(gè)智力競賽
    發(fā)表于 12-01 17:34 ?624次下載
    多路智力競賽<b class='flag-5'>搶答器</b>設(shè)計(jì)

    自制電子搶答器

    自制電子搶答器搶答器已被人們所熟知,在一些電子類的雜志中也經(jīng)常介紹,許多電子搶答器都采用了邏輯電路進(jìn)行設(shè)計(jì),在本文
    發(fā)表于 11-21 10:55 ?1.4w次閱讀

    PLC搶答器設(shè)計(jì)

    本文介紹的PLC搶答器,思路清晰,程序設(shè)計(jì)易于理解,能準(zhǔn)確、快速做出判斷,具有很強(qiáng)的實(shí)用性。PLC搶答器設(shè)計(jì)保證了競賽活動的合理、公平、公正進(jìn)行。
    發(fā)表于 12-24 00:30 ?1.9w次閱讀
    PLC<b class='flag-5'>搶答器</b>設(shè)計(jì)

    搶答器

    搶答器 C51單片機(jī)源碼,KEIL源文件,C語言編寫
    發(fā)表于 06-20 16:36 ?44次下載

    搶答器protues仿真程序 51搶答器設(shè)計(jì) 搶答器程序prot

    搶答器protues仿真程序 51搶答器設(shè)計(jì) 搶答器程序protues仿真設(shè)計(jì)
    發(fā)表于 01-14 22:32 ?173次下載

    8路數(shù)字搶答器課程設(shè)計(jì)報(bào)告

    搶答器作為一種工具,已經(jīng)廣泛應(yīng)用于各種智力和知識競賽場合。本設(shè)計(jì)以八路智力競賽搶答器為基本概念,從實(shí)際應(yīng)用出發(fā),利用電子設(shè)計(jì)自動化( EDA)技術(shù),數(shù)字、模擬電子器件設(shè)計(jì)具有擴(kuò)充功能的搶答器
    發(fā)表于 11-15 17:39 ?47次下載

    搶答器plc梯形圖介紹(三路搶答器和四路搶答器

    本文為大家介紹一個(gè)三路搶答器和一個(gè)四路搶答器的PLC梯形圖。
    發(fā)表于 01-31 15:35 ?8.3w次閱讀
    <b class='flag-5'>搶答器</b>plc梯形圖介紹(三路<b class='flag-5'>搶答器</b>和四路<b class='flag-5'>搶答器</b>)

    數(shù)顯號碼搶答器設(shè)計(jì)制作

    本文介紹一種數(shù)字電路組成的顯示優(yōu)先搶答號碼的多路搶答器的設(shè)計(jì)與制作。
    的頭像 發(fā)表于 02-09 10:01 ?4966次閱讀
    數(shù)顯號碼<b class='flag-5'>搶答器</b>設(shè)計(jì)制作