โครงงาน kidbright นาฬิกาปลุก

ในส่วน Plugins ของ kidBright IDE ลองไล่ดูมีชื่อ OLED ด้วย ถ้าใครมี OLED อยู่ข้างๆ ตัวก็ต้องลองต่อกันดูครับ ใช้ได้ทั้งบอร์ด openKB และบอร์ด kidBright (ไม่จำกัดเวอร์ชั่น)

โครงงาน kidbright นาฬิกาปลุก

จอแสดงผล OLED

โครงงาน kidbright นาฬิกาปลุก

จอ OLED ที่นิยมใช้จะมีขนาด 128×64 จุด ขนาดจะค่อนข้างเล็กเพียง 0.96 นิ้วเท่านั้น ใช้ตัวควบคุมเป็นเบอร์ SSD1306 การเชื่อมต่อจะเป็นแบบ I2C บัส คือมีสายสัญญาณคุยกัน 2 เส้นประกอบด้วย Data (SDA) และ Clock (SCL) แน่นอนว่าทั้ง openKB และ kidBright มีจุดต่อ I2C บัสให้เราเชื่อมต่อ

ต่อสายสัญญาณกันก่อน

โครงงาน kidbright นาฬิกาปลุก

การต่อสายสัญญาณสำหรับบอร์ด OpenKB จะใช้สาย JST4AF หัวด้านนึงต่อเข้ากับขั้ว I2C ส่วนอีกด้านเป็น IDC ตัวเมีย ต่อเข้ากับจอ OLED ตำแหน่งขา SCL กับ SDA เรียงลำดับสลับกันอยู่ เวลาต่อต้องต่อให้ตรงตามรูป

 

โครงงาน kidbright นาฬิกาปลุก

สำหรับบอร์ด kidBright จะมีสายชื่อ KB5AF มีสาย 5 เส้น แต่ตอนนี้ขณะเขียนบทความยังไม่มีที่ตัวเลยเลือกใช้เป็นสาย IDC ตัวเมีย2 ด้านแทน ข้อระวังก็คือตำแหน่งไฟเลี้ยง ต้องเลือกเป็น 3V3 ต่อเข้ากับ VDD ห้ามนำจุด 5V ไปต่อเด็ดขาด จอ OLED จะเสียหายทันที

ชุดคำสั่งของ OLED

เนื่องจาก OLED ที่เลือกใช้เป็นเบอร์ SSD1306 และมีตำแหน่งแอดเดรสอยู่ที่ 0x3C จึงไม่ต้องปรับตั้งค่าเหล่านี้ใช้ค่าตั้งต้นมาตรฐานได้เลย

โครงงาน kidbright นาฬิกาปลุก

คำสั่งเคลียร์หน้าจอ

โครงงาน kidbright นาฬิกาปลุก

คำสั่งแสดงข้อความตัวอักษร ไปยังตำแหน่ง คอลัมน์ และ แถวที่กำหนด

โครงงาน kidbright นาฬิกาปลุก

คำสั่งแสดงตัวเลข ไปยังตำแหน่ง คอลัมน์ และ แถวที่กำหนด โดยระบุค่า Precision หรือค่าจำนวนเลขทศนิยมได้

โครงงาน kidbright นาฬิกาปลุก

คำสั่งแสดงข้อความตัวอักษรใหญ่เป็น 2 เท่า ไปยังตำแหน่ง คอลัมน์ และ แถวที่กำหนด

โครงงาน kidbright นาฬิกาปลุก

คำสั่งแสดงตัวเลขใหญ่เป็น 2 เท่า ไปยังตำแหน่ง คอลัมน์ และ แถวที่กำหนด โดยระบุค่า Precision หรือค่าจำนวนเลขทศนิยมได้

โครงงาน kidbright นาฬิกาปลุก

ตัวอย่างที่ 1 แสดงอุณหภูมิที่จอ OLED

โครงงาน kidbright นาฬิกาปลุก

เริ่มต้นด้วยการเคลียร์หน้าจอก่อน แล้วแสดงข้อความ นับมาจากซ้าย 5 ตัวอักษร (ตัวอักษรขนาดปกติ) แล้วแสดงข้อความ Temp ใหญ่เป็น 2 เท่า ถัดมาที่บรรทัดที่ 4 (ตัวอักษรขนาดปกติ) ก็แสดงอุณหภูมิ มีเลขทศนิยม 2 ตำแหน่ง

โครงงาน kidbright นาฬิกาปลุก

ตัวอย่างที่ 2 แสดงค่าวันที่และเวลา

โครงงาน kidbright นาฬิกาปลุก

ก่อนจะเขียนโค้ดต้องตั้งนาฬิกาให้ตรงก่อน kidBright IDE เตรียมเครื่องมือไว้ให้แล้ว

โครงงาน kidbright นาฬิกาปลุก

โดยเอาเวลาในเครื่องคอมพิวเตอร์ของเราไปโหลดให้กับตัว openKB หรือ kidBright เมื่อกด OK จะเป็นการโหลดการตั้งค่าเวลาไปทันที

โครงงาน kidbright นาฬิกาปลุก

กดปุ่ม OK อีกครั้งเป็นอันเสร็จสิ้นการตั้งค่าเวลาให้นาฬิกา

โครงงาน kidbright นาฬิกาปลุก

เพื่อให้นาฬิกายังเดินต่อไปได้เรื่อยๆ แม้ไม่มีไฟเลี้ยง บอร์ด openKB จะมีตัวเก็บประจุแบบ SuperCAB ติดตั้งอยู่เพื่อแบ็คอัพไฟให้นาฬิกาทำงาน

โครงงาน kidbright นาฬิกาปลุก

ส่วน kidBright จะต้องหาแบตเตอรี่ลิเที่ยม CR2032 หรือรุ่นใกล้เคียงใส่ให้กับมัน

ชุดคำสั่งของนาฬิกา

โครงงาน kidbright นาฬิกาปลุก

โครงงาน kidbright นาฬิกาปลุก

อันนี้ไม่ต้องอธิบายมาก ค่อนข้างตรงไปตรงมา สามารถดึงค่าต่างๆ วัน เดือน ปี ชั่วโมง นาที วินาที มาแสดงผล หรือนำไปประมวลผลได้เลย ดังนั้นเพื่อแสดงวันเดือนปี และแสดงเวลา พร้อม แสดงวินาที ก็ได้ผลลัพธ์ดังโค้ดในรูป

การแสดง Time ในโค้ดนี้จะแสดงเฉพาะ ชั่วโมงกับนาทีเท่านั้น ไม่แสดงวินาที บรรทัดที่ 3 จึงนำเอาค่าวินาทีมาแสดง โดยให้ใหญ่ขึ้นเป็น 2 เท่า

โค้ดนี้มีปัญหา

เมื่อค่าตัวเลขของวินาที อยู่ในช่วง 0-9 เนื่องจากการแสดงตัวเลข จะแสดง 0-9 ไม่ใช่ 00-09 ทำให้ค่าตัวเลขชิดด้านซ้าย เมื่อค่าเวลา นับไปถึง 59 แทนที่จะเปลี่ยนเป็น 00 ก็กลายเป็น 09 แทน

การวนลูปแต่ละรอบใช้การ Delay 0.5 เป็นค่าที่ไม่ซิงค์กับค่าหลักวินาที บางครั้งจะเห็นตัวเลขวินาทีเปลี่ยนแปลงเร็วหรือช้าไป

ปัญหานี้จะแก้ในตัวอย่างต่อไป

ตัวอย่างที่ 3 นาฬิกาแบบตรวจสอบค่าวินาที

โครงงาน kidbright นาฬิกาปลุก

ตัวอย่างนี้จะสร้างตัวแปร x ขึ้นมาเพื่อบันทึกค่าวินาที ณ ปัจจุบัน เมื่อค่าวินาทีเปลี่ยน ก็ให้บันทึกค่าวินาทีใหม่ ไปเรื่อยๆ โดยถ้าค่าวินาทีเปลี่ยนแต่ละครั้ง ค่อยให้แสดงผล วันเดือนปี และเวลาออกไปยังจอ OLED

สำหรับการแก้ปัญหาเรื่องเลข 9 ที่เกินมา จะใช้วิธีตรวจสอบว่าค่า X เป็น 0 หรือเปล่า ถ้าเป็นจะให้ส่งคำสั่ง แสดงเลข “0 ” พร้อม Space Bar เพื่อให้การเคาะ Space bar ไปลบข้อมูลเดิมที่มี

บางคนอาจถามว่า ทำไมไม่ใช้การเคลียร์หน้าจอ เพื่อลบ ตอบว่า การเคลียร์หน้าจอจะทำจอดับไปชั่วระยะสั้น ๆ ซึ่งดูเหมือนกับว่าการแสดงผลนั้นสะดุด

ตัวอย่างที่ 4 นาฬิกาปลุก แบบตั้งเวลาได้

โครงงาน kidbright นาฬิกาปลุก

โครงงาน kidbright นาฬิกาปลุก

ถ้าเขียนโค้ดตามไม่ไหว ก็ไปดาวน์โหลด https://pastebin.com/2sFM1gh4 เก็บไว้ให้นามสกุลเป็น .txt ได้เลย

การทำงานของโค้ด

โปรแกรมหลักจะสร้างตัวแปรไว้หลายตัวเพื่อเก็บเวลาที่ใช้ตั้งค่า จกานั้นก็แสดงเวลาที่หน้าจอปกติ

ตรวจสอบว่ามีการกดสวิตช์หรือไม่ ถ้ากดสวิตช์ ให้เข้าสู่ฟังก์ชั่นการตั้งปลุก

ตรวจสอบค่าตัวแปร Flag ซึ่งไว้ตรวจสอบว่ามีการตั้งปลุกหรือไม่ ถ้ามีก็ไปดูชั่วโมงกับนาทีว่า ตรวกับเวลาปัจจุบันหรือไม่ ถ้าตรงกัน ก็เคลียร์ Flag เพื่อยกเลิกการตั้งปลุก สร้างเสียงออกลำโพง เคลียร์หน้าจอ เพื่อลบการตั้งปลุกออก