บทที่ 14 เล่นกับตัวเลข 7-Segment |
|
[วิดีโอประจำบท] | |
ในการใช้งาน Arduino หรือไมโครคอนโทรเลอร์ใดๆก็ตาม นอกจากจะให้รับค่าคำสั่งและทำการคำนวณทางคณิตศาสตร์ต่างๆแล้ว ยังต้องมีส่วนของการแสดงผลการทำงาน เพื่อใช้ตรวจสอบการทำงาน หรือแสดงผลลัพธ์ที่ได้จากการทำงานว่าเป็นไปตามที่เราออกแบบไว้หรือไม่ การแสดงผลผ่าน Serial Monitor มีข้อจำกัดคือต้องเชื่อมต่อกับคอมพิวเตอร์ตลอดเวลา แต่ในทางปฏิบัตินั้นเมื่อเราพัฒนาชิ้นงานเสร็จ ในการใช้งานต้องนำอุปกรณ์นั้นไปตั้งไว้เดี่ยวๆ คงไม่ได้เชื่อมต่อคอมพิวเตอร์ตลอดเวลา ผมคิดว่าคงไม่มีใครซื้อแล็ปทอปราคาหมื่นบาทเพื่อมาใช้แสดงผลของอุปกรณ์ราคาหลักพันหรือบางทีก็หลักร้อยเท่านั้น หรือทำ GPS ติดรถให้รายงานคำแหน่งของรถในขณะนั้น ถ้าต้องต่อกับแล็ปทอปตลอด ลองคิดดูสิครับว่ามันจะเกะกะรถขนาดไหน การแสดงผลแบบง่ายๆวิธีหนึ่งคือการแสดงผ่าน LED แบบ 7-segment ที่มีการทำงานเหมือนหลอด LED 7 ดวงประกอบกันเป็นเลข 8 เราจะสั่งให้แต่ละส่วนสว่างขึ้นมาประกอบกันป็นตัวเลขต่างๆ โดย LED 7 segment นั้นก็มีหลายแบบ หลายสี หลายขนาด ทั้งหลักเดียว หรือหลายๆหลัก ซึ่งการเขียนโปรแกรมควบคุมก็จะต่างกันออกไปเล็กน้อย แต่ในคอร์สนี้เราเน้นที่ความง่าย ให้ใช้งานเบื้องต้นได้อย่างรวดเร็ว ผู้เขียนจึงเลือกใช้บอร์ดโมดูล 7 segment แบบ 4 หลัก ซึ่งมีไอซี TM1637 ควบคุมการทำงานของโมดูลที่สามารถเขียนโปรแกรมได้ง่ายและสั้นลง ไม่ต้องเรียนรู้ในทฤษฎีลึกมากไป นอกจากนี้บนหน้าจอยังมีเครื่องหมาย : แบ่งตัวเลขออกเป็นสองส่วนซึ่งสามารถใช้แสดงผลเป็นนาฬิกาดิจิตอลได้อีกด้วย |
|
![]() ตำแหน่ง segment ต่างๆ |
|
ในการใช้งานโมดูล TM1637 นั้น ให้ทำการลง library TM1637 ก่อน [ดาวน์โหลดไลบรารี่] เพื่อความสะดวกและง่ายในการเขียนโค้ด การเชื่อมต่อโมดูลกับบอร์ดนั้น ขา 5V ต่อกับ 5V ของบอร์ด GND ต่อกับ GND ของบอร์ด ส่วน CLK และ DIO นั้นต่อกับขาดิจิตอลขาใดก็ได้ (ตัวอย่างใช้ขา 2 และ 3 ตามลำดับ) จากนั้นเป็นส่วนของการเขียนโปรแกรมแล้วครับ
|
|
โมดูลจะแสดงเลข 1 2 3 ไปจนถึง 10 จากนั้นเป็น 10 20 30 ไปถึง 100 และไล่หลักร้อย หลักพันตามลำดับ สำหรับคำสั่งต่างๆในการสั่งงานมีดังนี้ครับ setBrightness เป็นคำสั่งปรับระดับความสว่างของโมดูล โดย 0 มีค่าสว่างน้อยที่สุด และ 7 มีค่าสว่างมากที่สุด ตัวอย่างคำสั่ง display.setBrightness(7); showNumberDec เป็นคำสั่งให้แสดงตัวเลขจำนวนเต็ม โดยจะเรียงรูปแบบคือ (เลขที่จะแสดง, true/false, จำนวนหลัก, ตำแหน่งเริ่ม) อธิบายตามนี้ครับ เลขที่จะแสดง คือ เลขอะไรก็ได้ที่เป็นจำนวนเต็ม 0 ถึง 9999 พิมพ์ไปเลย หรือจะใช้เป็นตัวแปรมาแสดงก็ได้ True/false คือ เลือกว่าจะให้มี 0 นำหน้าหรือไม่ เช่น 99 เป็น 0099 โดยปกติจะใช้ค่า false คือไม่ต้องมี จำนวนหลัก คือ จำนวนหลังที่จะให้แสดง เช่น 2 ตัวเลขก็จะแสดงแค่ 2 หลัก ตำแหน่งเริ่ม คือ ตำแหน่งที่ตองการให้เป็นหลักแรกในการแสดงผล โดย 0 คือตำแหน่งซ้ายสุด และ 3 คือตำแหน่งขวาสุด ตัวอย่างคำสั่ง เช่น display.showNumberDec(1234, false, 4, 0) ตัวโมดูลจะแสดงเป็น 1234 หรือ display.showNumberDec(54, true, 3, 1) โมดุลจะแสดงผลเป็น 054 เพราะเราใส่ค่า true ให้แสดง 0 นำหน้า และตำแหน่งซ้ายสุดจะไม่แสดงเนื่องจากเราสั่งให้เริ่มจากตำแหน่ง 1 (ตำแหน่ง 2 นับจากซ้าย) หรือเปลี่ยนเป็น (54, true, 2, 1) ก็จะแสดง 05 แค่สองตำแหน่งตรงกลาง เนื่องจากสั่งให้แสดงแค่ 2 หลักนั่นเอง การแสดงเครื่องหมายโคล่อนตรงกลาง ให้ใช้โค้ด uint8_t segto; int value = 1244; segto = 0x80 | display.encodeDigit((value/100)%10); display.setSegments(&segto, 1, 1); setSegment คือ การแสดง segment ตามต้องการ เช่น อยากแสดงคำว่า dOnE เราก็เขียนโค้ดกำหนดตัวแปรเป็น const uint8_t SEG_DONE[] = { SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O SEG_C | SEG_E | SEG_G, // n SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E }; อยากให้ segment ใดสว่างก็ใส่ลงไปตามตำแหน่งที่แสดงในภาพเลยตรับ จากนั้นจึงเขียนโค้ดเรียกใช้ เช่น display.setSegment(SEG_DONE); |
|
บทนี้ก็เอวังจบลงไป ผู้เขียนอยากให้ทุกท่านไปลองทำความเข้าใจ เล่นโค้ดต่างๆที่อธิบายมา แล้วจะเริ่มสนุกกับตัวเลขครับ ขอให้ทุกท่านสนุกกับการเขียนโปรแกรม แล้วพบกันบทต่อไปนะครับ |
|
[ดาวน์โหลด] [กลับหน้าหลักของคอร์ส] |