資料介紹
描述
擲骰子,第 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))布局,因此:
我最終得到的面包板安排是:
我決定使用不同顏色的 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è)或更多骰子的替代方法。
- 用于FPGA的賭場(chǎng)擲骰子游戲
- 使用Seeeduino Wio終端模擬Dadiplus擲骰子
- 蝕刻草圖繪圖機(jī)開源分享
- iteul的電子蝕刻草圖開源分享
- Arduino骰子開源案例
- LED骰子開源設(shè)計(jì)
- 具有隨機(jī)功能的簡(jiǎn)單LED骰子
- RH1016骰子規(guī)格
- LTC5596骰子規(guī)格
- LT3845骰子規(guī)格說明
- LT1220骰子規(guī)格
- LT1714骰子規(guī)格
- 一種簡(jiǎn)單、快捷的草圖交互式地質(zhì)建模方法 0次下載
- 上帝擲骰子嗎——量子物理史話 0次下載
- 電骰子電路設(shè)計(jì)論文 101次下載
- 字節(jié)發(fā)布機(jī)器人領(lǐng)域首個(gè)開源視覺-語言操作大模型,激發(fā)開源VLMs更大潛能 360次閱讀
- 分享一個(gè)棋盤游戲電子骰子電路 2234次閱讀
- 三個(gè)簡(jiǎn)單的電子骰子電路分析 5765次閱讀
- 前沿開源技術(shù)領(lǐng)域的開源大數(shù)據(jù)一一解讀 1005次閱讀
- 基于AT89C205構(gòu)建的電子骰子的電路圖 2178次閱讀
- 如何通過藍(lán)牙微控制器控制多功能骰子? 2905次閱讀
- 帶反接保護(hù)的電子骰子電路 3381次閱讀
- 如何通過草圖布線器來降低Layout的復(fù)雜性 1188次閱讀
- 隱馬爾可夫模型描述一個(gè)含有隱含未知參數(shù)的馬爾可夫過程 4417次閱讀
- LED骰子diy教程 4648次閱讀
- 一種將手和筆輸入優(yōu)勢(shì)結(jié)合的三維草圖構(gòu)圖方式 4418次閱讀
- 蒙特卡洛模擬方法 9496次閱讀
- 分享10個(gè)cad繪制草圖的技巧 1.4w次閱讀
- 谷歌開源TFGAN輕量級(jí)的工具庫 目的是讓訓(xùn)練和評(píng)估GAN變得更加簡(jiǎn)單 4811次閱讀
- 驅(qū)動(dòng)電子骰子至少需要幾個(gè)I/O口? 3962次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多