資料介紹
描述
擲骰子,第 1 部分
我最近為我的孫子制作了一個簡單的擲骰子草圖,供他在玩棋盤游戲時使用。他對結果非常滿意,但我認為分享“擲骰子”草圖并提供另一種擲兩個骰子的版本可能會對其他人有所啟發(請參閱擲骰子,第 2 部分文章)。
在本文中,我提供了兩個“擲骰子”草圖的第 1 部分 - 擲一個骰子。第 1 部分模具草圖和組件的設計非常簡單——它使用 7 個 LED 代表標準模具的六個面/側面中每一個上的每個標準點圖案和一個簡單連接的按鈕開關。
如果您想知道為什么使用七個而不是六個 LED,那是因為需要七個 LED 來反映傳統標準裸片所有面的所有可能布局組合(見下文)。七個 LED 中的每一個都映射并連接到微控制器數字 IO 端口。對于單個裸片,這沒問題,但如果我們開始考慮添加兩個或更多裸片,那么不行,需要太多的微控制器端口。但不用擔心,這就是“擲骰子,第 2 部分”文章加快步伐并展示我們如何使用低成本串行并行輸入/輸出 IC(例如 74HC595 IC)來實現這一點,以添加盡可能多的骰子我們想要。但是,對于本文的第 1 部分,我們首先將一個裸片及其 LED 直接連接到微控制器。讓我們開始看這第 1 部分的文章..
設計 - 硬件
發光二極管
如上所述,電路設計具有 7 個 LED 和一個按鈕開關。本設計中使用了七個 LED,這樣我們就可以將它們布置在面包板上的物理排列中,以反映傳統六面模具每個面/側面的點(點)布局,因此:
我最終得到的面包板安排是:
我決定使用不同顏色的 LED 只是為了增加一點趣味性,但任何顏色都可以。我為不同顏色的短跳線道歉,因為我從我的跳線套件中選擇的是有限的。需要注意的是,這些跳線連接到每個 LED 正極端子,然后沿著面包板進一步連接到微控制器連接線。如果沒有這些跳線,LED 就會被電線弄得亂七八糟,因此耐心地連接電路板是值得的。
作為參考,LED 到微控制器數字引腳分配如下(請注意,面包板上 LED 的方向如上圖所示):
- 右下方(紅色)LED - 數字引腳 2
- 底部中間(綠色)LED - 數字引腳 3
- 左下方(藍色)LED - 數字引腳 4
- 中間(黃色)LED - 數字引腳 5
- 右上角(紅色)LED - 數字引腳 6
- 頂部中間(綠色)LED - 數字引腳 7
- 向左(藍色)LED - 數字引腳 8
- 最后,按鈕開關連接到數字引腳 9
按鈕開關
設計中使用了一個按鈕開關,以便在按下和釋放時啟動新的擲骰子動作。草圖使用ez_switch_lib
簡化設計的庫。該ez_switch_lib
實例針對單個開關進行初始化,并在設置(add_switch
功能)中進一步定義為一個按鈕開關,只需簡單地連接而無需下拉電阻。請注意,該add_switch
函數的參數包括兩個庫宏 - ' button_switch
' 和 ' circuit_C2
'。這些在ez_switch_lib
頭文件 (.h) 中定義,因此只需引用即可。
聲明庫、創建實例并添加/創建按鈕開關后,所需要做的就是不斷測試在主循環中完成的開關狀態。如果按下并釋放按鈕開關,switched
則返回狀態“”(也是ez_switch_lib
庫的定義宏)。
按鈕開關可以位于面包板上任何方便的地方,并根據示意圖接線。我設法將它擠壓在左側邊緣,這樣可以輕松訪問。有關組件布局的圖表,請參見示意圖。
設計 - 素描
在解釋草圖的中心部分之前,我應該提一下,我在其中包含了一個心跳監視器,它旨在以 1 赫茲的頻率(每個周期 1 個周期)閃爍內置微控制器 LED(LED_BUILTIN
通常在引腳 13 上)第二)。這提供了草圖正在運行(或未運行)的一些物理指示。如果不需要草圖的這一方面,則可以通過將心跳聲明部分中的宏定義設置為“ false
”來禁用它。即設置' #define heart_beat_on false
'。心跳監視器的關聯數據是:
// 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
我已經提到代碼使用板載 LED ( LEDBUILTIN
) 以及如何在不需要時禁用監視器,但是如果您希望改變監視器的頻率,請將變量“ heart_beat_freq
”編輯為每個周期的總數第二個愿望。請注意,一個完整的周期是打開然后關閉,因此閃光率會自動計算為所選頻率的 1/2。
該heart_beat
功能很簡單,但心跳只有在定期調用該功能時才會運行。因此,如草圖所示,應在整個代碼中調用它。
繼續,草圖通過監視連接的按鈕開關是否被按下來運行。按鈕開關是使用庫配置的,該ez_switch_lib
庫從草圖設計中消除了去抖動的任何麻煩。要訪問ez_switch_lib
項目中心文章并下載庫文件,請點擊此鏈接 - ez_switch_lib
。
要合并庫,請在本地 Arduino/libraries 目錄下創建一個名為“ ez_switch_lib
”的目錄,然后從項目中心文章將三個文件下載到該目錄中:
1.ez_switch_lib.h
2.ez_switch_lib.cpp
3.keywords.txt
現在讓我們看看草圖的其他主要部分:
圖書館宣言和啟動
開關庫聲明如下:
#include
并通過以下方式啟動單個開關:
Switches my_switches(1);
在這里,我們創建了一個開關實例,其大小僅適用于一個開關,并使用“ my_switches
”作為其實例名稱。我們還沒有定義它的類型(參見 參考資料setup
)。
setup - setup 函數初始化草圖所需的一切:
-
add_switch()
我們使用該功能設置按鈕開關。這具有三個參數 - 開關類型、開關引腳和電路類型,其中開關類型由庫保留宏“button_switch
”定義,開關引腳定義為“button_switch_pin
”,我們決定在草圖中使用的數字引腳 (12),和由庫保留宏“”定義的電路類型circuit_C2
。這會通知開關庫,開關無需 10k 歐姆下拉電阻即可簡單接線。
- 聲明的 LED 和
- 心跳監視器
需要注意的是,按鈕開關的分配過程已驗證成功。如果出于任何原因無法分配開關,則草圖將終止。如果已配置心跳監視器并且觀察到未運行(閃爍),則會看到這一點。' button_switch_pin
' 參數的值由草圖宏定義。
announce_throw - 此函數在擲骰子(按下按鈕開關)之間調用,并顯示骰子的短頻閃模式以指示擲骰即將開始。
該函數執行兩個頻閃周期,點亮由映射到 LED 的數字端口定義的每個 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()
函數首先“宣布”即將開始擲骰子,方法是通過調用該announce_throw()
函數在兩個周期內對七個 LED 中的每一個進行頻閃。
此后,該函數在每次調用時重置隨機種子,然后在 0-5(或現實世界中的 1-6)范圍內確定投擲值(骰子的隨機面/面)。
使用此值,該函數然后檢查是否為該面的每個點定義了 LED,如果是,則點亮關聯的 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);
}
}
}
主循環- 草圖的主循環非常簡單,并使用read_switch
函數 ( myswitches.read_switch(switch_id)
) 不斷循環檢查按鈕開關的狀態。僅當檢測到按下/釋放周期(開關讀取函數返回值“ ”)時,才會通過調用該函數switched
來執行擲骰子操作: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);
}
結論
就是這樣,我希望您在棋盤游戲中使用它會得到一些樂趣,但如果您想使用多個骰子,那么為什么不探索第2 部分文章,該文章提供了連接兩個或更多骰子的替代方法。
- 用于FPGA的賭場擲骰子游戲
- 使用Seeeduino Wio終端模擬Dadiplus擲骰子
- 蝕刻草圖繪圖機開源分享
- iteul的電子蝕刻草圖開源分享
- Arduino骰子開源案例
- LED骰子開源設計
- 具有隨機功能的簡單LED骰子
- RH1016骰子規格
- LTC5596骰子規格
- LT3845骰子規格說明
- LT1220骰子規格
- LT1714骰子規格
- 一種簡單、快捷的草圖交互式地質建模方法 0次下載
- 上帝擲骰子嗎——量子物理史話 0次下載
- 電骰子電路設計論文 101次下載
- 字節發布機器人領域首個開源視覺-語言操作大模型,激發開源VLMs更大潛能 360次閱讀
- 分享一個棋盤游戲電子骰子電路 2234次閱讀
- 三個簡單的電子骰子電路分析 5765次閱讀
- 前沿開源技術領域的開源大數據一一解讀 1005次閱讀
- 基于AT89C205構建的電子骰子的電路圖 2178次閱讀
- 如何通過藍牙微控制器控制多功能骰子? 2905次閱讀
- 帶反接保護的電子骰子電路 3381次閱讀
- 如何通過草圖布線器來降低Layout的復雜性 1188次閱讀
- 隱馬爾可夫模型描述一個含有隱含未知參數的馬爾可夫過程 4417次閱讀
- LED骰子diy教程 4648次閱讀
- 一種將手和筆輸入優勢結合的三維草圖構圖方式 4418次閱讀
- 蒙特卡洛模擬方法 9496次閱讀
- 分享10個cad繪制草圖的技巧 1.4w次閱讀
- 谷歌開源TFGAN輕量級的工具庫 目的是讓訓練和評估GAN變得更加簡單 4811次閱讀
- 驅動電子骰子至少需要幾個I/O口? 3962次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多