เราทุกคนคุ้นเคยกับลูกเต๋าและมักเล่นเกม LUDO หรือ SANP SIDI (Snake & Ladders) โดยใช้ลูกเต๋า ลูกเต๋าเป็นกล่องทึบประเภทสไควร์ซึ่งมีตัวเลข 6 ตัวที่แตกต่างกันทุกด้าน เราโยนลูกเต๋าบนพื้นผิวเพื่อรับหมายเลขสุ่มในขณะที่เล่นเกม ในโครงการนี้เราได้พยายามที่จะทำซ้ำกับลูกเต๋าดิจิตอลโดยใช้บอร์ด Arduino Uno แทนการโยนลูกเต๋าที่นี่เราต้องกดปุ่มเพื่อรับหมายเลขสุ่มระหว่าง 0 ถึง 6
ส่วนประกอบที่จำเป็น
- Arduino UNO
- การแสดงผลเจ็ดส่วน (Anode ทั่วไป)
- กดปุ่ม
- การเชื่อมต่อสายไฟ
- กระดานขนมปัง
- ตัวต้านทาน 1 k
- แหล่งจ่ายไฟ
แผนภาพวงจรและคำอธิบาย
ดังแสดงในวงจรลูกเต๋าดิจิตอลข้างต้น arduino ใช้สำหรับควบคุมกระบวนการทั้งหมด ใช้ปุ่มกดสองปุ่มในวงจร - ปุ่มหนึ่งเพื่อเริ่มทอยลูกเต๋าและปุ่มอื่น ๆ สำหรับการรีเซ็ตลูกเต๋า Arduino อ่านสองปุ่มนี้และดำเนินการ การแสดงผลเจ็ดส่วนใช้เพื่อแสดงผลลูกเต๋า
Arduino กำลังเรียกใช้ฟังก์ชัน rand () อย่างต่อเนื่องและเก็บค่าไว้ในตัวแปรชั่วคราว เมื่อกดปุ่มลูกเต๋าค่าที่จัดเก็บไว้คำนวณและแสดงในเจ็ดส่วนโดยใช้วิธีที่เหมาะสม (ดูส่วนการเขียนโปรแกรมของบทความ)
ในวงจรลูกเต๋านี้จะใช้จอแสดงผลแอโนดเจ็ดเซกเมนต์ทั่วไปสำหรับการแสดงตัวเลขลูกเต๋าซึ่งเชื่อมต่อโดยตรงกับหมายเลขพินดิจิทัลของ arduino 6, 5, 4, 3, 2, 1, 0 และขาแอโนดทั่วไปของเจ็ดส่วนคือ เชื่อมต่อกับตัวต้านทาน +5 โวลต์ 220 โอห์ม ปุ่มกดสองปุ่มยังเชื่อมต่อกันคือปุ่มลูกเต๋าและปุ่มรีเซ็ตซึ่งเชื่อมต่อกับพินดิจิตอล 14 (A0) และ 15 (A1) เมื่อเทียบกับกราวด์
คำอธิบายรหัส
ส่วนการเขียนโปรแกรมของโครงการนี้มีบทบาทสำคัญมากในการแสดงหมายเลขลูกเต๋าดิจิทัลแบบสุ่มบนหน้าจอเจ็ดส่วน Arduino ไม่มีไลบรารีสำหรับการแสดงผลเจ็ดส่วน ดังนั้นเราจึงสร้างโค้ดทั้งหมดโดยไม่ต้องใช้ไลบรารีใด ๆ
ก่อนอื่นเราเลือกพินดิจิทัลสำหรับการแสดงเจ็ดส่วน
พิน int = {6,5,4,3,2,1,0};
หลังจากนั้นเราจะสร้างอาร์เรย์ของลูกเต๋า 6 หลักคือ 1, 2, 3, 4, 5 และ 6
ถ่านหลัก = {0x02, 0x79, 0x24, 0x30, 0x19, 0x12};
ตอนนี้เราให้ทิศทางในการใช้พิน arduino เป็นเอาต์พุต
การตั้งค่าเป็นโมฆะ () {สำหรับ (int i = 0; i <7; i ++) pinMode (พิน, เอาท์พุท); pinMode (ลูกเต๋า, อินพุต); pinMode (ตั้งค่าใหม่, INPUT); digitalWrite (ลูกเต๋าสูง); digitalWrite (ตั้งค่าใหม่สูง);
เราส่งรหัสสำหรับการแสดงศูนย์บนการแสดงผลเจ็ดส่วนโดยค่าเริ่มต้น
อุณหภูมิ int = 0x40; สำหรับ (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (พิน, temp1); temp = อุณหภูมิ >> 1; }
ตอนนี้เราเรียกใช้ฟังก์ชัน Rand () เพื่อรับตัวเลขสุ่ม
int temp = แรนด์ ();
และเมื่อเรากดโปรแกรมปุ่มลูกเต๋าก่อนจะแมปตัวเลขสุ่มนี้จากนั้นส่งตัวเลขไปยังการแสดงผลเจ็ดส่วนโดยใช้ตัวดำเนินการที่ชาญฉลาด
ถ้า (digitalRead (ลูกเต๋า) == 0) {int k = temp% 6; temp = หลัก; รอ(); สำหรับ (int i = 0; i <7; i ++) {int temp1 = temp & 0x01; digitalWrite (พิน, temp1); temp = อุณหภูมิ >> 1; } ล่าช้า (200); }
และเหมือนกันสำหรับปุ่มรีเซ็ต
ในโปรแกรมนี้เราส่งทีละบิต ที่นี่เราใช้สำหรับลูปซึ่งรัน 7 ครั้งเพื่อส่งข้อมูลไปยังแต่ละส่วนทีละส่วน