電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>簡(jiǎn)單的擲骰子草圖開源分享

簡(jiǎn)單的擲骰子草圖開源分享

2023-02-08 | zip | 0.03 MB | 次下載 | 免費(fèi)

資料介紹

描述

擲骰子,第 1 部分

我最近為我的孫子制作了一個(gè)簡(jiǎn)單的擲骰子草圖,供他在玩棋盤游戲時(shí)使用。他對(duì)結(jié)果非常滿意,但我認(rèn)為分享“擲骰子”草圖并提供另一種擲兩個(gè)骰子的版本可能會(huì)對(duì)其他人有所啟發(fā)(請(qǐng)參閱擲骰子,第 2 部分文章)。

在本文中,我提供了兩個(gè)“擲骰子”草圖的第 1 部分 - 擲一個(gè)骰子。第 1 部分模具草圖和組件的設(shè)計(jì)非常簡(jiǎn)單——它使用 7 個(gè) LED 代表標(biāo)準(zhǔn)模具的六個(gè)面/側(cè)面中每一個(gè)上的每個(gè)標(biāo)準(zhǔn)點(diǎn)圖案和一個(gè)簡(jiǎn)單連接的按鈕開關(guān)。

如果您想知道為什么使用七個(gè)而不是六個(gè) LED,那是因?yàn)樾枰邆€(gè) LED 來反映傳統(tǒng)標(biāo)準(zhǔn)裸片所有面的所有可能布局組合(見下文)。七個(gè) LED 中的每一個(gè)都映射并連接到微控制器數(shù)字 IO 端口。對(duì)于單個(gè)裸片,這沒問題,但如果我們開始考慮添加兩個(gè)或更多裸片,那么不行,需要太多的微控制器端口。但不用擔(dān)心,這就是“擲骰子,第 2 部分”文章加快步伐并展示我們?nèi)绾问褂玫统杀敬胁⑿休斎?輸出 IC(例如 74HC595 IC)來實(shí)現(xiàn)這一點(diǎn),以添加盡可能多的骰子我們想要。但是,對(duì)于本文的第 1 部分,我們首先將一個(gè)裸片及其 LED 直接連接到微控制器。讓我們開始看這第 1 部分的文章..

設(shè)計(jì) - 硬件

發(fā)光二極管

如上所述,電路設(shè)計(jì)具有 7 個(gè) LED 和一個(gè)按鈕開關(guān)。本設(shè)計(jì)中使用了七個(gè) LED,這樣我們就可以將它們布置在面包板上的物理排列中,以反映傳統(tǒng)六面模具每個(gè)面/側(cè)面的點(diǎn)(點(diǎn))布局,因此:

pYYBAGPi_7qAEOnlAAAdNQ_ggTA552.png
每個(gè)芯片側(cè)面/面的 pip LED 布局 - X 為開,0 為關(guān)
?

我最終得到的面包板安排是:

poYBAGPi__-ALPSHAAtHtHuPn7w311.jpg
半尺寸面包板是理想的
?

我決定使用不同顏色的 LED 只是為了增加一點(diǎn)趣味性,但任何顏色都可以。我為不同顏色的短跳線道歉,因?yàn)槲覐奈业奶€套件中選擇的是有限的。需要注意的是,這些跳線連接到每個(gè) LED 正極端子,然后沿著面包板進(jìn)一步連接到微控制器連接線。如果沒有這些跳線,LED 就會(huì)被電線弄得亂七八糟,因此耐心地連接電路板是值得的。

作為參考,LED 到微控制器數(shù)字引腳分配如下(請(qǐng)注意,面包板上 LED 的方向如上圖所示):

  • 右下方(紅色)LED - 數(shù)字引腳 2
  • 底部中間(綠色)LED - 數(shù)字引腳 3
  • 左下方(藍(lán)色)LED - 數(shù)字引腳 4
  • 中間(黃色)LED - 數(shù)字引腳 5
  • 右上角(紅色)LED - 數(shù)字引腳 6
  • 頂部中間(綠色)LED - 數(shù)字引腳 7
  • 向左(藍(lán)色)LED - 數(shù)字引腳 8
  • 最后,按鈕開關(guān)連接到數(shù)字引腳 9

按鈕開關(guān)

設(shè)計(jì)中使用了一個(gè)按鈕開關(guān),以便在按下和釋放時(shí)啟動(dòng)新的擲骰子動(dòng)作。草圖使用ez_switch_lib簡(jiǎn)化設(shè)計(jì)的庫。ez_switch_lib 實(shí)例針對(duì)單個(gè)開關(guān)進(jìn)行初始化,并在設(shè)置(add_switch功能)中進(jìn)一步定義為一個(gè)按鈕開關(guān),只需簡(jiǎn)單地連接而無需下拉電阻。請(qǐng)注意,該add_switch 函數(shù)的參數(shù)包括兩個(gè)庫宏 - ' button_switch' 和 ' circuit_C2'。這些在ez_switch_lib 頭文件 (.h) 中定義,因此只需引用即可。

聲明庫、創(chuàng)建實(shí)例并添加/創(chuàng)建按鈕開關(guān)后,所需要做的就是不斷測(cè)試在主循環(huán)中完成的開關(guān)狀態(tài)。如果按下并釋放按鈕開關(guān),switched則返回狀態(tài)“”(也是ez_switch_lib 庫的定義宏)。

按鈕開關(guān)可以位于面包板上任何方便的地方,并根據(jù)示意圖接線。我設(shè)法將它擠壓在左側(cè)邊緣,這樣可以輕松訪問。有關(guān)組件布局的圖表,請(qǐng)參見示意圖。

設(shè)計(jì) - 素描

在解釋草圖的中心部分之前,我應(yīng)該提一下,我在其中包含了一個(gè)心跳監(jiān)視器,它旨在以 1 赫茲的頻率(每個(gè)周期 1 個(gè)周期)閃爍內(nèi)置微控制器 LED(LED_BUILTIN通常在引腳 13 上)第二)。這提供了草圖正在運(yùn)行(或未運(yùn)行)的一些物理指示。如果不需要草圖的這一方面,則可以通過將心跳聲明部分中的宏定義設(shè)置為“ false”來禁用它。即設(shè)置' #define heart_beat_on false'。心跳監(jiān)視器的關(guān)聯(lián)數(shù)據(jù)是:

// Define heart beat data...
//
#define heart_beat_pin   LED_BUILTIN  // digital pin for heart beat LED
#define heart_beat_on    true         // determines if the implementation uses the heartbeat
long unsigned heart_beat_freq = 1000; // time(milliseconds) of heart beat frequency
long unsigned heart_beat_on_off_time; // the time the LED is on and off - 1/2 frequency
long unsigned last_heart_beat_time;   // time in milliseconds of last heart beat status change
bool heart_beat_status = HIGH;        // current status of heart beat, start high 

我已經(jīng)提到代碼使用板載 LED ( LEDBUILTIN) 以及如何在不需要時(shí)禁用監(jiān)視器,但是如果您希望改變監(jiān)視器的頻率,請(qǐng)將變量“ heart_beat_freq”編輯為每個(gè)周期的總數(shù)第二個(gè)愿望。請(qǐng)注意,一個(gè)完整的周期是打開然后關(guān)閉,因此閃光率會(huì)自動(dòng)計(jì)算為所選頻率的 1/2。

heart_beat 功能很簡(jiǎn)單,但心跳只有在定期調(diào)用該功能時(shí)才會(huì)運(yùn)行。因此,如草圖所示,應(yīng)在整個(gè)代碼中調(diào)用它。

繼續(xù),草圖通過監(jiān)視連接的按鈕開關(guān)是否被按下來運(yùn)行。按鈕開關(guān)是使用庫配置的,該ez_switch_lib 庫從草圖設(shè)計(jì)中消除了去抖動(dòng)的任何麻煩。要訪問ez_switch_lib 項(xiàng)目中心文章并下載庫文件,請(qǐng)點(diǎn)擊此鏈接 - ez_switch_lib。

要合并庫,請(qǐng)?jiān)诒镜?Arduino/libraries 目錄下創(chuàng)建一個(gè)名為“ ez_switch_lib”的目錄,然后從項(xiàng)目中心文章將三個(gè)文件下載到該目錄中:

1.ez_switch_lib.h

2.ez_switch_lib.cpp

3.keywords.txt

現(xiàn)在讓我們看看草圖的其他主要部分:

圖書館宣言啟動(dòng)

開關(guān)庫聲明如下:

#include 

并通過以下方式啟動(dòng)單個(gè)開關(guān):

Switches my_switches(1); 

在這里,我們創(chuàng)建了一個(gè)開關(guān)實(shí)例,其大小僅適用于一個(gè)開關(guān),并使用“ my_switches”作為其實(shí)例名稱。我們還沒有定義它的類型(參見 參考資料setup)。

setup - setup 函數(shù)初始化草圖所需的一切:

  • add_switch()我們使用該功能設(shè)置按鈕開關(guān)。這具有三個(gè)參數(shù) - 開關(guān)類型、開關(guān)引腳和電路類型,其中開關(guān)類型由庫保留宏“ button_switch”定義,開關(guān)引腳定義為“ button_switch_pin”,我們決定在草圖中使用的數(shù)字引腳 (12),和由庫保留宏“”定義的電路類型circuit_C2。這會(huì)通知開關(guān)庫,開關(guān)無需 10k 歐姆下拉電阻即可簡(jiǎn)單接線。
  • 聲明的 LED 和
  • 心跳監(jiān)視器

需要注意的是,按鈕開關(guān)的分配過程已驗(yàn)證成功。如果出于任何原因無法分配開關(guān),則草圖將終止。如果已配置心跳監(jiān)視器并且觀察到未運(yùn)行(閃爍),則會(huì)看到這一點(diǎn)。' button_switch_pin' 參數(shù)的值由草圖宏定義。

announce_throw - 此函數(shù)在擲骰子(按下按鈕開關(guān))之間調(diào)用,并顯示骰子的短頻閃模式以指示擲骰即將開始。

該函數(shù)執(zhí)行兩個(gè)頻閃周期,點(diǎn)亮由映射到 LED 的數(shù)字端口定義的每個(gè) LED。模式是任意的,可以配置成任何想要的。

void announce_throw() {
 uint8_t led;
 // Start by clearing down the existing die pips/score
 clear_pips();
 for (uint8_t cycle = 1; cycle <= 2; cycle++) {// do 2 cycles
   for (uint8_t led = 0; led < max_leds; led++) {
     digitalWrite(pip_pins[led], HIGH);
     digitalWrite(pip_pins[max_leds - led - 1], HIGH);
     delay(60);
     heart_beat(); // keep pumping the heart beat timer whilst doing the announcing the throw
     digitalWrite(pip_pins[led], LOW);
     digitalWrite(pip_pins[max_leds - led - 1], LOW);
     delay(20);
     heart_beat(); // keep pumping the heart beat timer whilst doing the announcing the throw
   }
 }
}

throw the die - 該throw_die()函數(shù)首先“宣布”即將開始擲骰子,方法是通過調(diào)用該announce_throw()函數(shù)在兩個(gè)周期內(nèi)對(duì)七個(gè) LED 中的每一個(gè)進(jìn)行頻閃。

此后,該函數(shù)在每次調(diào)用時(shí)重置隨機(jī)種子,然后在 0-5(或現(xiàn)實(shí)世界中的 1-6)范圍內(nèi)確定投擲值(骰子的隨機(jī)面/面)。

使用此值,該函數(shù)然后檢查是否為該面的每個(gè)點(diǎn)定義了 LED,如果是,則點(diǎn)亮關(guān)聯(lián)的 LED。

...
#define faces_per_die      6
#define max_pips_per_face  6
uint8_t pip_patterns[faces_per_die][max_pips_per_face] = {
// LEDs that represent die pip patterns, faces/side 1-6 (array index 0-5) across 7 leds
 5, 0, 0, 0, 0, 0, // 1 pip, just the central LED
 3, 7, 0, 0, 0, 0, // 2 pips, each central two outer LEDs
 2, 5, 8, 0, 0, 0, // 3 pips, diagonal LEDs
 2, 4, 6, 8, 0, 0, // 4 pips, each corner LED
 2, 4, 5, 6, 8, 0, // 5 pips, all LEDs
 2, 3, 4, 6, 7, 8, // 6 pips, each outer column of 3 LEDs
};
...
void throw_die() {
  announce_throw();   // 'announce' the throw of the die
  randomSeed(analogRead(A0) * 31 +
            analogRead(A1) * 37 +
            random(1023, 10000)); // keep changing the seed
  uint8_t die_face = (random(1, 104640) % faces_per_die); // range 0-(faces_per_die-1)
  // Now display the pips on the die
  for (uint8_t column = 0; column < max_pips_per_face; column++) {
    uint8_t led = pip_patterns[die_face][column];
    if (led != 0) {
      // A pip LED is defined so illuminate it
      digitalWrite(led, HIGH);
    }
  }
}

主循環(huán)- 草圖的主循環(huán)非常簡(jiǎn)單,并使用read_switch 函數(shù) ( myswitches.read_switch(switch_id)) 不斷循環(huán)檢查按鈕開關(guān)的狀態(tài)。僅當(dāng)檢測(cè)到按下/釋放周期(開關(guān)讀取函數(shù)返回值“ ”)時(shí),才會(huì)通過調(diào)用該函數(shù)switched來執(zhí)行擲骰子操作:throw_die()

void loop() {
 do {
   heart_beat(); // keep pumping the heart beat timer every cycle
   if (my_switches.read_switch(switch_id) == switched) {
     // the value 'switched' is defined by ez_switch_lib.h
     // Switch has been pressed and released, so throw the die...
     throw_die();
   }
 } while (true);
}

結(jié)論

就是這樣,我希望您在棋盤游戲中使用它會(huì)得到一些樂趣,但如果您想使用多個(gè)骰子,那么為什么不探索第2 部分文章,該文章提供了連接兩個(gè)或更多骰子的替代方法。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)