在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>簡單的擲骰子草圖開源分享

簡單的擲骰子草圖開源分享

2023-02-08 | zip | 0.03 MB | 次下載 | 免費

資料介紹

描述

擲骰子,第 1 部分

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

在本文中,我提供了兩個“擲骰子”草圖的第 1 部分 - 擲一個骰子。第 1 部分模具草圖和組件的設計非常簡單——它使用 7 個 LED 代表標準模具的六個面/側面中每一個上的每個標準點圖案和一個簡單連接的按鈕開關。

如果您想知道為什么使用七個而不是六個 LED,那是因為需要七個 LED 來反映傳統標準裸片所有面的所有可能布局組合(見下文)。七個 LED 中的每一個都映射并連接到微控制器數字 IO 端口對于單個裸片,這沒問題,但如果我們開始考慮添加兩個或更多裸片,那么不行,需要太多的微控制器端口。但不用擔心,這就是“擲骰子,第 2 部分”文章加快步伐并展示我們如何使用低成本串行并行輸入/輸出 IC(例如 74HC595 IC)來實現這一點,以添加盡可能多的骰子我們想要。但是,對于本文的第 1 部分,我們首先將一個裸片及其 LED 直接連接到微控制器。讓我們開始看這第 1 部分的文章..

設計 - 硬件

發光二極管

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

pYYBAGPi_7qAEOnlAAAdNQ_ggTA552.png
每個芯片側面/面的 pip LED 布局 - X 為開,0 為關
?

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

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

我決定使用不同顏色的 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 部分文章,該文章提供了連接兩個或更多骰子的替代方法。


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

評論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 大香线蕉97久久| 中文字幕一区二区三区永久| 亚色视频在线| 色狠狠综合网| yy6080理aa级伦大片一级| 久久精品免费看| 在线看你懂| 黄色一级片网址| 久久semm亚洲国产| 在线天堂视频| 国产农村女人一级毛片了| 国产牛牛| 婷婷色香| 一级视频免费观看| 亚洲综合国产一区二区三区| 日本韩国做暖暖小视频| 天天做天天爱夜夜想毛片| 亚洲视频一区二区三区| 欧美一二区视频| 奇米奇米| 亚洲swag精品自拍一区| 大色视频| 一区二区三区四区在线观看视频 | 来啊mm影院亚洲mm影院| 欧美影院入口| 与子乱刺激对白在线播放| 国产精品yy9299在线观看| 视频在线观看网站免费| 日本骚视频| 久久亚洲国产视频| 亚洲国产成人成上人色| 在线观看午夜| 日本免费一区二区在线观看| 久久影院朴妮唛| 亚洲性爱城| 人人干97| 国片一级 免费看| 色婷婷精品综合久久狠狠| 日日操夜夜| 婷婷开心激情| 色综合图片二区150p|