สารบัญ:

Arduino และ Touchpad Tic Tac Toe: 8 ขั้นตอน (พร้อมรูปภาพ)
Arduino และ Touchpad Tic Tac Toe: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino และ Touchpad Tic Tac Toe: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino และ Touchpad Tic Tac Toe: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: DIY Arduino Tic Tac Toe Game(4X4 Tic Tac Toe) | Tic Tac Toe Programming Challenge. 2024, กันยายน
Anonim
Arduino และทัชแพด Tic Tac Toe
Arduino และทัชแพด Tic Tac Toe

หรือการออกกำลังกายมัลติเพล็กซ์อินพุตและเอาต์พุตและการทำงานกับบิต และการส่งผลงานเข้าประกวด Arduino

นี่คือการนำเกม tic tac toe มาใช้โดยใช้อาร์เรย์ 3x3 ของ LED สองสีสำหรับจอแสดงผล ทัชแพดตัวต้านทานแบบธรรมดา และ Arduino เพื่อผูกทุกอย่างเข้าด้วยกัน หากต้องการดูวิธีการทำงาน โปรดดูวิดีโอ: สิ่งที่โครงการนี้ต้องการ: ชิ้นส่วนและวัสดุสิ้นเปลือง บอร์ดที่สมบูรณ์แบบ (หรือแผ่นแถบ) ไฟ LED สองสีเก้าดวง แคโทดทั่วไป ตัวต้านทานที่เหมือนกันเก้าตัว ในช่วง 100-220 โอห์ม ตัวต้านทานที่เหมือนกัน 6 ตัวใน ช่วง 10kohm - 500kohm ขั้วเดี่ยว สวิตช์แบบดับเบิ้ล หมุดส่วนหัว มัดสายไฟ อะครีลิคใสสี่เหลี่ยมเล็กๆ แผ่นเดียว หนา ~ 1 มม. ด้านข้าง เทปกาวใส Heatshrinks (อุปกรณ์เสริม) ทั้งหมดที่กล่าวมา เป็นรายการทั่วไป ค่าใช้จ่ายทั้งหมดไม่ควรเกิน 20 เหรียญสหรัฐ เครื่องมือ การตั้งค่า Arduino หนึ่งรายการ (Arduino Duemilanove, Arduino IDE, คอมพิวเตอร์, สาย USB) เครื่องมือไฟฟ้าทั่วไป (มัลติมิเตอร์, ปืนบัดกรีบัดกรี, คีมตัดลวด, เครื่องตัดลวด) ทุกอย่างที่เกี่ยวข้องกับ Arduino สามารถเป็นได้ พบได้ที่ https://www.arduino.cc ด้วยการสร้าง!

ขั้นตอนที่ 1: การเดินสายไฟ LED Matrix

การเดินสายไฟ LED Matrix
การเดินสายไฟ LED Matrix
การเดินสายไฟ LED Matrix
การเดินสายไฟ LED Matrix

หากต้องการให้ LED สว่าง จะต้องต่อสายทั้งสองข้าง ถ้าเราอุทิศหมุดให้กับ LED 18 ดวง (สีแดง 9 ดวงและสีเขียว 9 ดวง) เราจะใช้หมุดบน Arduino หมดอย่างรวดเร็ว อย่างไรก็ตาม ด้วยมัลติเพล็กซ์ เราจะสามารถจัดการกับ LED ทั้งหมดได้ด้วยพินเพียง 9 พิน! ในการทำเช่นนี้ ไฟ LED จะต่อสายในลักษณะคานขวาง ดังแสดงในรูปแรก ไฟ LED ถูกจัดกลุ่มเป็นคอลัมน์สามส่วน และแคโทดของพวกมันจะถูกจัดกลุ่มเป็นแถวๆ ละหก โดยการตั้งค่าสายแอโนดให้สูงและสายแคโทดเฉพาะให้ต่ำ และมีอิมพีแดนซ์สูงบนสายแอโนดและแคโทดอื่นๆ ทั้งหมด เราสามารถทำได้ เลือก LED ที่เราต้องการให้สว่างขึ้น เนื่องจากมีเพียงหนึ่งเส้นทางที่เป็นไปได้ที่ปัจจุบันสามารถทำได้ ตัวอย่างเช่น ในรูปที่สอง การตั้งค่าขั้วบวกสีเขียว 1 บรรทัดให้สูง และแคโทด 1 บรรทัดต่ำ ไฟ LED สีเขียวด้านล่างซ้ายจะสว่างขึ้น. เส้นทางปัจจุบันในกรณีนี้จะแสดงเป็นสีน้ำเงินแต่ถ้าคุณต้องการให้ไฟ LED มากกว่าหนึ่งดวงบนเส้นต่างๆ เราจะใช้วิสัยทัศน์ที่คงอยู่เพื่อให้บรรลุสิ่งนี้ ด้วยการเลือกคู่ของเส้น LED อย่างรวดเร็ว ทำให้เกิดภาพลวงตาว่า LED ที่เลือกทั้งหมดจะติดสว่างพร้อมกัน

ขั้นตอนที่ 2: เค้าโครงเมทริกซ์ LED

เค้าโครงเมทริกซ์ LED
เค้าโครงเมทริกซ์ LED
เค้าโครงเมทริกซ์ LED
เค้าโครงเมทริกซ์ LED

แผนภาพวงจรด้านล่างแสดงวิธีการต่อสายไฟ LED (G1-G9: LED สีเขียว, R1-R9: LED สีแดง) แผนภาพนี้ใช้สำหรับ LED สีแดงและสีเขียวเพียงดวงเดียว หากคุณใช้ LED สีแดง/เขียวแคโทดสองสีทั่วไป จะมีขาแคโทดเพียงขาเดียวต่อคู่สีแดง/เขียวที่คุณต้องต่อสาย เส้นแอโนดสีแดงและสีเขียวจะเข้าไปในพิน PWM ของ Arduino (ขา 3, 5, 6, 9, 10, 11 บน Duemilanove) เพื่อให้เรามีผลเหมือนเฟดในภายหลัง เส้นแคโทดเข้าไปในพิน 4, 7 และ 8 แต่ละสายแคโทดและแอโนดมีตัวต้านทาน 100 โอห์มสำหรับการป้องกัน

ขั้นตอนที่ 3: ระบุ LED Matrix

สำหรับรหัส tic tac toe เราจะต้องสามารถเก็บข้อมูลเกี่ยวกับ LED ต่อไปนี้ได้ - ไม่ว่า LED จะติดหรือไม่ - หากติดสว่าง ไม่ว่าจะเป็นสีแดงหรือสีเขียว วิธีหนึ่งในการทำเช่นนี้คือการจัดเก็บสถานะ ในอาร์เรย์ 9 เซลล์ โดยใช้ตัวเลขสามหลักเพื่อแสดงสถานะ (0 = ปิด, 1 = เปิดสีแดง, 2 = เปิดสีเขียว) ทุกครั้งที่เราต้องตรวจสอบสถานะของ LED เช่น ตรวจสอบว่ามีเงื่อนไขชนะหรือไม่ เราจะต้องวนรอบอาร์เรย์ นี่เป็นวิธีการที่ใช้การได้ แต่ค่อนข้างยุ่งยาก วิธีที่คล่องตัวกว่าคือการใช้สองกลุ่มที่มีเก้าบิต กลุ่มเก้าบิตแรกเก็บสถานะการเปิด-ปิดของ LED และกลุ่มที่สองที่มีเก้าบิตเก็บสี จากนั้น การจัดการสถานะ LED จะกลายเป็นเรื่องของการคิดเลขคณิตและการขยับเล็กน้อย นี่คือตัวอย่างการทำงาน สมมติว่าเราวาดตาราง tic tac toe แบบกราฟิก และขั้นแรกให้ใช้ 1 และ 0 เพื่อแสดงสถานะการเปิด-ปิด (1 เปิดอยู่ 0 ปิด): 000 000 = เมทริกซ์ที่มี LED ด้านล่างซ้ายสว่าง 100 100 010 = เมทริกซ์ที่มีเส้นทแยงมุม ไฟ LED ติดสว่าง 001 หากเราระบุเซลล์จากด้านล่างซ้าย เราสามารถเขียนการแทนค่าข้างต้นเป็นชุดของบิตได้ ในกรณีแรก นั่นคือ 100000000 และในกรณีที่สอง จะเป็น 001010100 หากเราคิดว่าสิ่งเหล่านี้เป็นการแทนค่าไบนารี ดังนั้นแต่ละชุดของบิตสามารถย่อเป็นตัวเลขเดียว (256 ในกรณีแรก 84 ในกรณีที่สอง) ดังนั้น แทนที่จะใช้อาร์เรย์เพื่อเก็บสถานะของเมทริกซ์ เราสามารถใช้เลขตัวเดียวได้! ในทำนองเดียวกัน เราสามารถแสดงสีของ LED ในลักษณะเดียวกัน (1 คือสีแดง 0 คือสีเขียว) ก่อนอื่น ให้ถือว่า LED ทั้งหมดติดสว่าง (ดังนั้นสถานะการเปิด-ปิดจะแสดงด้วย 511) เมทริกซ์ด้านล่างจะแสดงสถานะสีของ LEDs: 010 สีเขียว สีแดง สีเขียว 101 สีแดง สีเขียว สีแดง 010 สีเขียว สีแดง สีเขียว ตอนนี้ เมื่อแสดงเมทริกซ์ LED เราแค่ต้องวนผ่านแต่ละบิต อันดับแรกในสถานะเปิด-ปิด จากนั้นในสถานะสี ตัวอย่างเช่น สมมติว่าสถานะเปิด-ปิดของเราคือ 100100100 และสถานะสีคือ 010101010 นี่คืออัลกอริทึมของเราในการให้แสงเมทริกซ์ LED: ขั้นตอนที่ 1 เพิ่มสถานะเปิด-ปิดด้วยไบนารี 1 ในระดับบิต (เช่น บิต กำบัง) ขั้นตอนที่ 2 หากเป็นจริง LED จะติดสว่าง ตอนนี้เพิ่มสถานะสีด้วยเลขฐานสอง 1 ระดับเล็กน้อย ขั้นตอนที่ 3 หากเป็นจริง ให้ไฟ LED สีแดงสว่างขึ้น หากเป็นเท็จ ให้เปิดไฟ LED สีเขียว ขั้นตอนที่ 4 เลื่อนทั้งสถานะเปิด-ปิดและสถานะสี ไปทางขวาหนึ่งบิต (เช่น การขยับบิต) ขั้นตอนที่ 5. ทำซ้ำขั้นตอนที่ 1 - 4 จนกว่าจะอ่านครบทั้งเก้าบิตแล้ว โปรดทราบว่าเรากำลังเติมเมทริกซ์แบบย้อนกลับ - เราเริ่มต้นด้วยเซลล์ 9 จากนั้นย้อนกลับไปยังเซลล์ 1 นอกจากนี้ สถานะการเปิดปิดและสถานะสีจะถูกจัดเก็บเป็นประเภทจำนวนเต็ม (คำ) ที่ไม่ได้ลงนาม แทนที่จะเป็นประเภทจำนวนเต็มที่มีลายเซ็น นั่นเป็นเพราะในการเปลี่ยนบิต ถ้าเราไม่ระวัง เราอาจเปลี่ยนเครื่องหมายของตัวแปรโดยไม่ได้ตั้งใจ สิ่งที่แนบมาคือรหัสสำหรับการส่องสว่างเมทริกซ์ LED

ขั้นตอนที่ 4: การสร้างทัชแพด

การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด
การสร้างทัชแพด

ทัชแพดสร้างจากแผ่นอะคริลิกบางๆ ซึ่งใหญ่พอที่จะวางทับบนเมทริกซ์ LED จากนั้น ติดเทปสายแถวและคอลัมน์ลงบนแผ่นอะครีลิค โดยใช้เทปใส เทปใสยังใช้เป็นฉนวนกั้นระหว่างสายไฟที่ทางแยกต่าง ๆ อย่าลืมใช้เครื่องมือที่สะอาด เพื่อป้องกันไม่ให้จาระบีนิ้วสัมผัสกับด้านที่เหนียวของเทป รอยนิ้วมือไม่เพียงแต่ดูน่าเกลียด แต่ยังทำให้เทปมีความเหนียวน้อยลง ตัดปลายด้านหนึ่งของเส้นแต่ละเส้นออก แล้วบัดกรีปลายอีกด้านให้เป็นลวดที่ยาวขึ้น บัดกรีตัวต้านทานในแนวเดียวกับสายไฟ ก่อนบัดกรีที่ขั้วต่อ ตัวต้านทานที่ใช้ในที่นี้คือ 674k แต่ค่าใดๆ ระหว่าง 10k ถึง 1M ก็น่าจะใช้ได้ การเชื่อมต่อกับ Arduino นั้นสร้างโดยใช้พินอะนาล็อก 6 ตัว โดยที่พิน 14-16 เชื่อมต่อกับแถวกริดลวด และพิน 17-19 ที่เชื่อมต่อกับ คอลัมน์

ขั้นตอนที่ 5: ทัชแพด - มันทำงานอย่างไร

ทัชแพด - มันทำงานอย่างไร
ทัชแพด - มันทำงานอย่างไร
ทัชแพด - มันทำงานอย่างไร
ทัชแพด - มันทำงานอย่างไร

เช่นเดียวกับที่เราใช้มัลติเพล็กเซอร์คานประตูเพื่อตั้งค่าเมทริกซ์ LED ที่มีพินน้อยที่สุด เราสามารถใช้มัลติเพล็กเซอร์ครอสบาร์ที่คล้ายกันเพื่อตั้งค่าอาร์เรย์เซ็นเซอร์สัมผัส ซึ่งเราสามารถใช้เพื่อเปิดใช้งานไฟ LED แนวคิดสำหรับทัชแพดนี้เรียบง่าย โดยพื้นฐานแล้วมันคือโครงลวดโดยมีสายเปลือยสามเส้นวิ่งเป็นแถวและสายเปล่าสามเส้นวิ่งในคอลัมน์เหนือแถว ที่จุดตัดแต่ละจุดจะมีฉนวนสี่เหลี่ยมเล็กๆ ที่ป้องกันไม่ให้สายไฟทั้งสองเส้นสัมผัสกัน นิ้วที่แตะสี่แยกจะสัมผัสกับสายไฟทั้งสองเส้น ทำให้เกิดความต้านทานที่มากแต่จำกัดระหว่างสายทั้งสอง กระแสไฟฟ้าขนาดเล็ก แต่ตรวจจับได้ สามารถสร้างกระแสจากสายหนึ่งไปยังอีกเส้นหนึ่งได้โดยใช้นิ้ว ในการพิจารณาว่ามีการกดจุดตัดใด ใช้วิธีต่อไปนี้: ขั้นตอนที่ 1: ตั้งค่าบรรทัดคอลัมน์ทั้งหมดเป็น OUTPUT LOW ขั้นตอนที่ 2: ตั้งค่าบรรทัดของแถวเป็น INPUT โดยเปิดใช้งานการดึงข้อมูลภายใน ขั้นตอนที่ 3: อ่านแบบอะนาล็อกในแต่ละแถวจนกว่าค่าจะลดลงต่ำกว่าเกณฑ์ที่กำหนด ซึ่งจะบอกคุณว่าทางแยกที่กดอยู่แถวใด ขั้นตอนที่ 4: ทำซ้ำขั้นตอนที่ 1-3 แต่ตอนนี้มีคอลัมน์เป็นอินพุต และแถวเป็นเอาต์พุต สิ่งนี้จะบอกคุณว่าทางแยกที่ถูกกดคือคอลัมน์ใด เพื่อลดผลกระทบของสัญญาณรบกวน จะมีการอ่านค่าจำนวนหนึ่งแล้วจึงหาค่าเฉลี่ย ผลลัพธ์โดยเฉลี่ยจะถูกเปรียบเทียบกับเกณฑ์ เนื่องจากวิธีนี้เพิ่งตรวจสอบกับธรณีประตู จึงไม่เหมาะสำหรับการตรวจจับการกดพร้อมกัน อย่างไรก็ตาม เนื่องจาก tic tac toe หมุนเวียนกันไป การอ่านการกดเพียงครั้งเดียวก็เพียงพอแล้ว สิ่งที่แนบมาคือภาพร่างที่แสดงให้เห็นว่าทัชแพดทำงานอย่างไร เช่นเดียวกับเมทริกซ์ LED บิตจะใช้เพื่อแสดงจุดตัดที่กด

ขั้นตอนที่ 6: นำทุกอย่างมารวมกัน

รวมทุกอย่างไว้ด้วยกัน
รวมทุกอย่างไว้ด้วยกัน

เมื่อส่วนประกอบแต่ละอย่างเสร็จสิ้นแล้ว ก็ถึงเวลาที่จะรวมเข้าด้วยกัน วางโครงลวดบนเมทริกซ์ LED คุณอาจต้องจัดลำดับหมายเลขพินใหม่ในโค้ดเมทริกซ์ LED เพื่อให้ซิงโครไนซ์กับเซ็นเซอร์กริดลวด ยึดตะแกรงลวดให้เข้าที่ด้วยการยึดหรือกาวที่คุณเลือก แล้วติดบนกระดานที่ดี เพิ่มสวิตช์ระหว่างพิน 12 และกราวด์ของ Arduino สวิตช์นี้ใช้สลับระหว่างโหมดผู้เล่น 2 คนและโหมดผู้เล่น 1 คน (เทียบกับไมโครคอนโทรลเลอร์)

ขั้นตอนที่ 7: การเขียนโปรแกรม Tic Tac Toe

สิ่งที่แนบมาคือรหัสสำหรับเกม ขั้นแรกให้แบ่งเกม tic tac toe ออกเป็นขั้นตอนต่างๆ ในโหมดผู้เล่นสองคน: ขั้นตอนที่ 1: ผู้เล่น A เลือกเซลล์ที่ยังไม่ได้บรรจุโดยแตะที่สี่แยก ขั้นตอนที่ 2: ไฟ LED สำหรับเซลล์นั้นสว่างขึ้นด้วยสี A ขั้นตอนที่ 3: ตรวจสอบเพื่อดูว่าผู้เล่น A ชนะหรือไม่ ขั้นตอนที่ 4: ผู้เล่น B เลือกเซลล์ที่ยังไม่ได้บรรจุ ขั้นตอนที่ 5: LED สำหรับเซลล์นั้นจะสว่างขึ้นด้วยสี B.ขั้นตอนที่ 6: ตรวจสอบเพื่อดูว่าผู้เล่น B ชนะหรือไม่ ขั้นตอนที่ 7: ทำซ้ำ 1-6 จนกว่าจะมีเงื่อนไขการชนะ หรือถ้าเซลล์ทั้งหมดเต็ม การอ่านเซลล์: โปรแกรมจะวนซ้ำระหว่างการอ่านตารางและการแสดงเมทริกซ์ LED. ตราบใดที่กริดเซนเซอร์ไม่ได้บันทึกค่าที่ไม่ใช่ศูนย์ ลูปนี้จะดำเนินต่อไป เมื่อกดจุดตัด ตัวแปร Pressed จะเก็บตำแหน่งของเซลล์ที่ถูกกด ตรวจสอบว่าเซลล์ไม่เติมหรือไม่:เมื่อได้ตำแหน่งที่อ่านแล้ว (กดตัวแปร) ตัวแปรจะถูกเปรียบเทียบกับสถานะเซลล์ปัจจุบัน (เก็บไว้ในตัวแปร GridOnOff) โดยใช้การบวกระดับบิต หากเซลล์ที่ถูกกดไม่เติม ให้เปิดไฟ LED ไม่เช่นนั้นให้กลับไปอ่านเซลล์ การสลับสี: ตัวแปรบูลีน เทิร์น ใช้เพื่อบันทึกว่าใครถึงตา สี LED ที่เลือกเมื่อเซลล์ถูกเลือกจะถูกกำหนดโดยตัวแปรนี้ ซึ่งจะสลับกันทุกครั้งที่มีการเลือกเซลล์ การตรวจสอบเงื่อนไขการชนะ: มีเงื่อนไขการชนะที่เป็นไปได้เพียง 8 เงื่อนไข และสิ่งเหล่านี้จะถูกเก็บไว้เป็นตัวแปรคำในอาร์เรย์ (winArray)). การเพิ่มสองระดับบิตใช้เพื่อเปรียบเทียบตำแหน่งเซลล์ที่เติมของผู้เล่นกับเงื่อนไขการชนะ หากมีการแข่งขัน โปรแกรมจะแสดงรูทีนการชนะ หลังจากนั้นจะเริ่มเกมใหม่ การตรวจสอบเงื่อนไขการเสมอ:เมื่อบันทึกเก้าเทิร์นแล้วและยังไม่มีเงื่อนไขการชนะ เกมจะเสมอกัน ไฟ LED จะจางลงและเริ่มเกมใหม่ การสลับไปยังโหมดผู้เล่นคนเดียว: หากสวิตช์อยู่ในตำแหน่งเปิด โปรแกรมจะเข้าสู่โหมดผู้เล่นคนเดียว โดยให้ผู้เล่นที่เป็นมนุษย์เริ่มก่อน เมื่อสิ้นสุดเทิร์นของผู้เล่นที่เป็นมนุษย์ โปรแกรมจะสุ่มเลือกเซลล์ แน่นอนว่านี่ไม่ใช่กลยุทธ์ที่ฉลาดที่สุด!

ขั้นตอนที่ 8: ข้อสังเกตและการปรับปรุงเพิ่มเติม

นี่คือวิดีโอที่แสดงโหมดผู้เล่นคนเดียว โดยโปรแกรมจะเล่นการเคลื่อนไหวแบบสุ่มทั้งหมด: โปรแกรมที่แสดงในที่นี้เป็นเวอร์ชันกระดูกเปล่าเพียงเล็กน้อยเท่านั้น สามารถทำได้หลายอย่างด้วยสิ่งนี้:1) ให้ไฟ LED สว่างขึ้นทีละสามดวง รหัสปัจจุบันจะแสดง LED เพียงดวงเดียวในคราวเดียว อย่างไรก็ตาม ด้วยการเดินสายไฟที่แสดงไว้นี้ ทำให้ LED ทั้งหมดที่เชื่อมต่อกับสายแคโทดสว่างขึ้นพร้อมกันได้ ดังนั้น แทนที่จะวนไปตามตำแหน่งทั้งเก้า สิ่งที่คุณต้องทำคือวนไปตามเส้นแคโทดสามเส้น2) ใช้การขัดจังหวะเพื่อแสดงไฟ LED ทั้งนี้ขึ้นอยู่กับรูทีนการแสดงผล LED และปริมาณการประมวลผล ไฟ LED อาจแสดงระดับของบางอย่าง ริบหรี่ เมื่อใช้การขัดจังหวะ เวลาของไฟ LED สามารถควบคุมได้อย่างแม่นยำและจะทำให้การแสดงผลราบรื่นขึ้น3) เครื่องเล่นคอมพิวเตอร์ที่ชาญฉลาดยิ่งขึ้น รหัสปัจจุบันใช้พื้นที่เพียงไม่กี่ kb เหลืออีกเล็กน้อยสำหรับการใช้งานคอมพิวเตอร์ที่ชาญฉลาดขึ้น tic tac toe player หวังว่าคุณจะสนุกกับการอ่านคำแนะนำนี้มากที่สุดเท่าที่ฉันสนุกกับการทำงานกับมัน!

แนะนำ: