วันอังคารที่ 14 กรกฎาคม พ.ศ. 2558

ทำไม Serial.print() ไม่ทำงานในส่วนของ setup()

หลายวันมานี้ทดลองเขียนโปรแกรม เขียนคำสั่งอยู่แต่ Arduino UNO R3 จนแทบจะลืม Leonardo และคราวนี้ลองหยิบจับมาทดสอบเขียนโปรแกรมดูบ้าง งานแรกก็เจอปัญหาเสียแล้ว

คำสั่ง Serial.print() ในส่วนของ setup() ไม่ทำงาน แต่ในส่วนของ loop() กลับทำงานได้ปกติ ก็งงอยู่พักใหญ่ไปค้นหาในอินเตอร์เน็ตก็มีคนเป็นเหมือนกัน แล้วได้คำตอบว่า

Leonardo เป็นบอร์ดที่ใช้ Chip Atmega32U4 ไม่เหมือน UNO R3 ดังนั้นจึงต้องสั่งให้โปรแกรมรอให้ Serial พร้อมทำงานก่อน
ลองดูตัวอย่างแรกก่อน
โปรแกรมในส่วนของ setup() จะมีคำสั่งพิมพ์เลข 10 ถอยหลังไปจนถึง 1 แล้วพิมพ์คำว่า Begin ระหว่างคำสั่งจะรอ 1 วินาที แต่เมื่อรันคำสั่งแล้วพบว่า กว่าจะเปิด Serial Monitor ได้โปรแกรมก็รันไปถึงการสั่งพิมพ์ เลข 6 แล้ว ดูเหมือนระบบจะทำงานเร็วขึ้น (?)

เริ่มพิมพ์ที่เลข 6


ตัวอย่างที่สอง
หลังจากนั้นเพิ่มคำสั่ง while (!Serial){} ไว้หลังบรรทัด Serial.begin(9600); แล้วเมื่อเปิด Serial Monitor โปรแกรมจะทำงานปกติ เริ่มตั้งแต่คำสั่งพิมพ์เลข 10 ไปเรื่อยๆ

เริ่มพิมพ์ที่ 10 เพราะมีคำสั่งตรวจสอบให้รอจนกว่า Serial จะพร้อมทำงาน

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

วันเสาร์ที่ 11 กรกฎาคม พ.ศ. 2558

เสี่ยงซื้อ GPS และ GSM/GPRS/3G Module

หลังจากที่เสี่ยงซื้อ GPS Shield ของ Sparkfun พร้อมกับ GPS Module รุ่น EM-506 มาใช้งาน ยอมรับว่าตอนนั้นอยากใช้หลายๆ ยี่ห้อ แต่ก็คิดถึงอรรถประโยชน์ ความสะดวก ความเรียบง่าย โดยเฉพาะความลงตัวไม่ใช้พื้นที่หรือวางและโยงสายขวักไขว่

อันดับแรกซื้อ GPS EM-506 แต่ Shield ใช้กับรุ่น 501 ซึ่งเป็นแบบ Chip แต่ก็มีพอร์ตสำหรับต่อกับ EM-406 (พิมพ์ติดไว้กับแผ่นวงจรพิมพ์ ก็คาดว่ารุ่นใหม่ก็ยังใช้ได้)

ระหว่างที่ซื้อก็ลังเลกับ GPS ของ Grove ที่มีขนาดเล็กกว่า และมีช่องเสียบสายอากาศที่เป็นแบบ Active ใช้ไฟเลี้ยง 3 V ด้วย แต่ก็เลือกซื้อ EM-506 ที่แพงกว่า ประมาณ 500 บาท เพราะต้องการใช้ Shield ของ Sparkfun ด้วย

จากนั้นก็ซื้อ Module SD Card เพื่อเอามาบันทึกตำแหน่ง และเก็บข้อมูลอ้างอิง ก็เลือกของ SEEED STUDIO ซึ่งดูแล้วมีความสวยงามลงตัว แต่ก็ลังเลกลัวไม่คุ้ม เพราะถ้าเป็น Shield ของ ADA Fruit จะมี RTC ติดมาด้วย ทำให้ไม่ต้องเพิ่มโมดูลนาฬิกา และที่สำคัญ SD ของ ADA Fruit มีขา CD ให้ใช้งาน เพื่อตรวจสอบเวลาถอด SD Card ออกก็ให้แจ้งสถานะทางหน้าจอได้ทันที (สรุปแล้ว SD Card ของ Seeed Studio ไม่คุ้มที่จะนำมาใช้งาน)
Shield GPS ของ Spark fun สำหรับใส่ EM-501
ซ้ายมือสุด SD Card ของ Seeed Studio ซึ่งถือว่าไม่คุ้ม แพงกว่าตัวอื่น และไม่มี RTC และไม่มีขา CD

หลังจากที่ได้อุปกรณ์ก็มาเขียนโปรแกรม และจัดการแสดงผลโดยเลือกเอาจอ OLED ขนาด 128x64 ของ
จอ OLED 128x64 คล้ายๆ ของ ADA Fruit แต่จา VCC และ GND จะสลับกัน
ปัญหาในการทำโปรเจกต์นี้อยู่ที่ การใช้ Global Variable ซึ่งปกติจะใช้หน่วยความจำ SRAM เป็นหลัก และหากใช้เกิน 75% จะเกิด Crash สิ่งที่ตามมาก็คือ การทำงานเพี้ยน รวนเรไปหมด เช่น จอแสดงผลแสดงอักษรประหลาดๆ แสดงครบบ้าง ไม่ครบบ้าง

สุดท้ายได้ไลบรารีมาจากผู้ขาย (ขอบคุณ Thaieasyelec.com ไว้ ณ ที่นี้) การใช้ Global Varible ลดจาก 80% มาอยู่ที่ 4-50% ทำให้ระบบไม่รวนสักนิด

ปัญหาหลักประการหนึ่ง คือ SD Card ของ Seeed Studio ไม่มี RTC จึงแสดงเวลา วันที่ จาก GPS โดยตรง ซึ่งค่อนข้างแม่นยำ ถ้าตราบใดที่ยังมีสัญญาน GPS ตามปกติ และบ่อยครั้งที่ต้องอยู่ใต้อาคารที่จอดรถหลายๆ ชั้น ทำให้นาฬิกาและวันที่เพี้ยนไปทันทีทันใด

สรุปชุด GPS ตัวนี้ทำต้นแบบเสร็จแล้ว รวมราคาประมาณ 1750+490+490+590 บาท (GPS+Sheild+SD Card Shield+UNO R3)

จากนั้นก็คิดถึงเรื่องการนำเอาข้อมูลไปเก็บไว้ส่วนกลาง หรือที่ไหนสักแห่งก็คิดถึงโมดูล 3G แต่ดูราคาของชุดทดลองที่ดีๆ แล้วราคาตก 5-6 พันบาท ตอนแรกจะสั่งบอร์ดจีนราคาพันกว่าบาท (หลักร้อยก็ยังมี) แต่ดูแล้วคงต้องใช้เวลานาน จึงตัดสินใจไปที่ Thaieasyelec อีกตามเคย ครานี้ได้บอร์ด GPS/GPRS/3G ที่วีนัสซัพพลายหรือ Thaieasyelec ผลิตขึ้นมาเอง ราคาตกอยู่ 2,650.-

ก็เสี่ยงซื้อมา และที่หนักใจคือ มีแต่คู่มือการต่อขาต่างๆ พร้อมกับคำสั่ง AT Command พอประมาณ แต่ไม่มีไลบรารี่และตัวอย่างสำหรับ Arduino เลย ก็ถามคนขายหลายครั้งว่า เขียนใน Arduino ได้แน่นอนนะ และสอบถามวิธีการคร่าวๆ ไว้ พร้อมออกตัวก่อนว่า หากติดขัดอะไรจะรบกวนสอบถาม และอาจจะถามเยอะหน่อยนะ

หนึ่งคืนผ่านไปหลังจากขลุกอยู่กับบอร์ดทดลองตัวนี้ ย่างเข้าคืนที่สองก็เจอปัญหาจนเกือบจะท้อ พยายามหาข้อมูลก็มีอยู่น้อยนิด ประติดประต่อ ในที่สุดก็สั่งโทรออกจากบอร์ด Arduino UNO R3 และ Leonardo ได้เสียที

บอร์ด GSM/3G ของ Thaieasyelec ทดลองกับบอร์ด Arduino Leonardo
 สิ่งที่พบและแก้ไขปัญหา พร้อมเก็บข้อมูลเป็นความรู้ใหม่ คือ

1. ต่อบอร์ดไม่ได้ไม่ว่าจะเป็นอัตราเร็วใดๆ ก็ตาม ทั้งๆ ที่ต่อด้วย Putty ได้, ต่อได้ที่ความเร็ว 115200
ปัญหานี้ไปค้นพบว่าบอร์ด Arduino จะมีเพียงบางขาเท่านั้นที่สามารถใช้งานเป็น Tx และ Rx ได้ ของบอร์ด Leonardo จะใช้ได้คือ ขา 7 (เป็น Rx เท่านั้น) ขา 8, 9, 10 และ 11 นอกจากนี้ใช้ไม่ได้ (หลายๆ ตัวอย่างใช้ขา 2, 3)

2. หลังจากต่อได้แล้วก็เจอปัญหาใหม่ คือ ส่งข้อมูลไปที่บอร์ด GSM แต่มักจะได้ข้อมูลขยะ และข้อความเพี้ยนๆ กลับมา

ข้อความที่ได้รับจากบอร์ด GSM มักจะไม่สมบูรณ์
ปัญหานี้แก้ไขได้ด้วยการกำหนดให้ใช้ Buadrate ให้ต่ำลง เพราะเครื่องนี้กำหนดค่าสูงสุดไว้ (115200) เมื่อลดความเร็วลงมาที่ 57600 ก็แสดงผลได้ตามปกติ

3. การอ่านค่าที่ได้รับจากบอร์ดมักจะมีอักขระพิเศษต่อท้ายเสมอ ดังนั้นจึงต้องตรวจสอบ และตัดทิ้งก่อนเอาข้อความที่ได้รับไปใช้งานหรือตรวจสอบอื่นๆ

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

ชุดที่สองนี้ราคา บอร์ด UC15 ราคา 2,650 บาท

และคงต้องลดขนาด เพิ่มประสิทธิภาพอื่นๆ ลงไปอีก จริงๆ แล้วก็เจอปัญหาอื่นๆ อีก แต่จะกลับมาอัพเดทเพิ่มเติมภายหลังครับ


ต้นแบบ GPS พิกัดนี้กำลังจอดรอแม่บ้านซื้อกับข้าวที่ตลาด กม. 11 พิกัดตรงพอดี

ภาพแสต็กของ Arduino UNO R3+SD Card+GPS Shield และจอ OLED

Chip UC15 ของ Quectel 3G ดาวน์โหลด 3.6MBps แต่อัพโหลดได้แค่ 384kBps 

วันจันทร์ที่ 29 มิถุนายน พ.ศ. 2558

ติดตั้ง Concerto Digital Signage และ Raspberry Pi Client

งานเข้าอย่างแรง!!!

ก่อนหน้านี้ทำระบบ Digital Signage ผ่านโปรแกรม Xibo โดยใช้ Windows Client และ Android Client ก็ใช้งานได้ดี โดยเฉพาะ Android แต่ภายหลังถูกเรียกเก็บเงินค่า Client บน Android ด้วยที่ระบบไม่ใช่ทำเพื่อพาณิชย์ ไม่มีรายได้จากการดำเนินการ ก็มีความคิดริเริ่มจะเอา Ubuntu Client มาใช้งาน ตอนนั้นก็มองเครื่องที่เป็น Embedding Computer ไว้หลายตัว แต่ราคาก็แพงเหลือเกิน และงานพัฒนาก็หยุดชะงักไป

ครั้นล่าสุดได้มีโอกาสใช้งาน Raspberry Pi 2 ก็คิดว่าเหมาะสำหรับนำมาใช้เป็น Xibo Client ได้เป็นอย่างดี ก็ตัดสินใจซื้อมา 2 ตัวเพื่อทดสอบก่อน

เมื่อได้เครื่องเรียบร้อยเข้าไปในเว็บ xibo.org.uk ปรากฏว่าไม่มี client ของ Ubuntu ค้นไปค้นมาก็เจอว่า ยกเลิกการใช้งาน pyclient ไปเรียบร้อยเมื่อเดือนธันวาคม 2557 คือ 6-7 เดือนก่อนหน้านี้นี่เอง

ตกใจเล็กน้อย และพยายามค้นหาวิธีการติดตั้ง แต่ก็ติดเรื่อง ติดตั้ง chromium ไม่ผ่านสักที พยายามแล้วก็หมดหนทาง (เสียเวลานานเกินไป) จึงคิดยกเลิก หาทางใช้บริการรายอื่น ก็ไปเจอ piSignage เป็น Digital Signage สำหรับ raspberry pi โดยเฉพาะ แต่ยังเป็นบริษัทใหม่ ระบบใหม่ ยังไม่สมบูรณ์ แจกฟรี 3 Player

เมื่อลองสอบถามไปยังผู้พัฒนาถึงค่าใช้จ่ายเพิ่มที่เกินจาก 3 Player ได้รับคำตอบว่า Player ละ 25$US จะใช้กี่เครื่องก็คูณเข้าไป สรุปแล้วก็ต้องถอย เพราะแพงกว่า xibo Android เสียอีก

คิดจะเขียนเองก็จำกัดจำเขี่ยด้วยเวลาน้อย และเพิ่งเริ่มกระโดดเข้ามาใช้งาน Embedding Computer แต่ก็ยังคิดอยู่ว่า สักวันหนึ่งอาจจะลองสร้างขึ้นมาสักระบบหนึ่ง ดูสิว่าจะเป็นอย่างไร (ถ้าไม่หมดแรงเสียก่อน)

สุดท้ายก็ต้องวนกลับมาที่ Concerto Digital Signage ซึ่งเคยดูเทียบๆ กันกับ xibo แต่ดูเหมือน xibo จะดีกว่าด้านการจัดการ และติดตั้งง่ายกว่ามาก

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

Client for Raspberry Pi:
https://github.com/flamewave000/concerto_rpi

วันพุธที่ 17 มิถุนายน พ.ศ. 2558

Controller: เริ่มต้นจากศูนย์

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

ถึงแม้ว่าจะเขียนโปรแกรมด้วย Visual FoxPro เป็นหลักมาจะครบ 20 ปี แล้วซึ่งโดยหลักการแล้ว VFP เป็นโปรแรกมที่ใช้สำหรับสร้างระบบงานเก็บข้อมูล แต่ก็สามารถเชื่อมต่อควบคุมอุปกรณ์ผ่าน Serial และ Pararell Port ได้ โดยใช้ Win32API เป็นตัวช่วย เรียกได้ว่า VB ทำได้อย่างไร VFP ทำได้ 95% (เผื่อไว้สักเล็กน้อยเพราะบางเรื่องก็จนปัญญาจริงๆ หรือซับซ้อนมากเกินไป)

เมื่อ 4-5 ปีก่อนก็เริ่มคิดเรื่องการนำเอาไมโครคอนโทรลเลอร์มาใช้อีกครั้งหนึ่ง แต่ตอนนั้นเครื่องมือ และอุปกรณ์ในการหัดเขียนไมโครคอนโทรลเลอร์มีมากจนเลือกไม่ถูกประกอบกับเวลาส่วนใหญ่ใช้ในการพัฒนาระบบเน็ตเวิร์ก และระบบ VoIP เป็นส่วนใหญ่ (รวมไปถึงการถ่ายรูป) เป็นอันว่าโครงการที่คิดไว้ก็เป็นหมัน พับเก็บไปเรียบร้อย

ล่าสุดเมื่อเดือนสองเดือนก่อน กลับมารื้อฟื้นงานคอนโทรลเลอร์อีกครั้ง ในเรื่องการสร้างนาฬิกาและป้ายบอกพิกัดบนรถโดยสาร และนี่แหละที่เป็นต้นเหตุให้ได้เรียนรู้เรื่องไมโครคอนโทรลเลอร์อีกครั้งหนึ่ง

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

หลังจากนั้น 4-5 วัน ก็คิดเรื่องอุปกรณ์สลับเครื่องพิมพ์ เพื่อแก้ไขปัญหาการคลิกตั้งค่า Default Printer ในวินโดว์ เพราะระบบมีโปรแกรมหลายระบบ และแต่ระบบต้องกำหนดเครื่องพิมพ์ให้เป็น Default ก่อนถึงจะทำงานได้ แม้ว่าจะพยายามตั้งเครื่องให้แสดงเครื่องพิมพ์ก่อนพิมพ์จริงแล้วก็ตาม ผู้ใช้ก็ไม่พอใจ คงติดระบบเดิมที่สั่งพิมพ์โดยไม่ต้องคิดอะไรเลย

ปัญหาการสลับเครื่องพิมพ์ด้วยการคลิก Set As Default Printer นั้นมีปัญหาหนึ่งที่เกิดขึ้นบ่อยครั้ง คือ ผู้ใช้เผลอไปคลิก Offline ทำให้พิมพ์งานไม่ออก และเดือดร้อนโทรหาไอทีซัพพอร์ตเป็นประจำ กว่าจะแก้ไขได้ก็ใช้เวลาไปหลายนาที (ถึงแม้จะไม่ได้เกิดขึ้นทุกวัน แต่ปัญหามักจะเกิดเช้ามืดหรือกลางคืน ซึ่งเป็นเวลาไม่ปกติ)

หลักการสร้างอุปกรณ์ก็คิดไว้ง่ายๆ แค่ใช้ไมโครคอนโทรลเลอร์รับค่าอินพุทจากสวิทช์แล้วส่งค่าการเลือกหรือการกดนั้นกลับไปยังเครื่องคอมพิวเตอร์ และโปรแกรมที่อยู่ในเครื่องคอมฯ จะทำหน้าที่เปลี่ยนเครื่องพิมพ์ให้เอง โดยผู้ใช้ไม่ต้องคลิกอะไรทั้งสิ้น เพียงแค่กดปุ่ม หรือหมุนสวิทช์ โดยที่อุปกรณ์นั้นก็จะมีไฟ LED แสดงตำแหน่งที่เลือก

แนวคิดง่ายๆ นี้ได้รับคำตอบจากพนักงานในร้าน ThaiEasyElec บอกว่า "งานแบบนี้คอนโทรลเลอร์อะไรก็ทำได้ไม่ซับซ้อน pic ก็ยังไหว แต่ถ้าจะให้ดีก็ Arduino เพราะมีบอร์ดมีคนนิยมใช้งานเยอะ และมีไลบรารีต่างๆ เยอะแยะ..."

สุดท้ายก็จบด้วยการซื้อ Spark Pro Micro 5V เพราะเห็นว่ามีขนาดเล็ก เหมาะสำหรับเอาไปลงก่อนที่ไม่ใหญ่มากนัก และมี Port USB ให้เรียบร้อย ที่จะเชื่อมต่อไปยังเครื่องคอมพิวเตอร์

หลังจากนั้นอีก 1 วัน ก็ทดลองสร้างต้นแบบ และลองสร้างดูโดยใช้ LED เป็นตัวแสดงสถานะลำดับที่ 1-2-3 จากนั้นก็เขียนโปรแกรมอ่านค่าจาก Serial Port จาก Visual FoxPro 6.0 ก็สามารถอ่านและใช้งานได้ การทดลองครั้งนี้ LED ขาดไปสองตัว เพราะเผลอต่อตรงไม่มี R คั่นไว้สักนิด

จากนั้นก็เริ่มศึกษามากยิ่งขึ้นก็อยากได้บอร์ดของ Arduino แท้ๆ สักบอร์ดหนึ่ง ในหนังสือทั่วไปก็นิยมบอร์ด Arduino UNO R3 แต่ที่ร้านของหมดอีกหลายวันถึงจะได้ เลยตัดสินใจซื้อบอร์ด Arduino Leonardo พร้อมกับ LCD 16x2 เพื่อแสดงผลแทนการใช้ LCD และซื้อแบบ I2C เพราะใช้ขาสัญญานน้อยกว่าแบบ Pararell

กลับมาถึงก็เริ่มลงมือทดสอบ LCD แต่ทำอย่างไรก็ไม่ขึ้นข้อความมีแค่ไฟแบ็คไลท์สว่างอย่างเดียว เขียนโปรแกรมตามตัวอย่างแล้ว ต่อสายแบบตัวอย่างในเว็บก็ไม่ได้สักที วันรุ่งขึ้นพยายามอีกรอบก็ไม่สำเร็จ เลยส่ง e-mail ไปสอบถามพนักงานซัพพอร์ทได้รับคำตอบกลับมาภายในไม่ถึงครึ่งชั่วโมงว่า บอร์ด Leonardo มีขา SDA และ SLC แยกต่างหาก ให้ลองใช้งานขานั้นโดยตรง และก็ใช้ได้ จึงเริ่มต้นเขียนโปรแกรมส่งข้อมูลไปให้ LCD อีกครั้งหนึ่ง เพื่อเอามาแทน LED

หลังจากที่บอร์ดสามารถอ่านอินพุทจากสวิทช์ และเอาท์พุทไปที่ LCD ได้แล้ว ก็ถึงเวลาปรับปรุงโปรแกรมที่จะรับข้อมูลในเครื่องคอมพิวเตอร์ ปัญหาของ VFP คือ ไม่สามารถใช้งานได้อย่างสมบูรณ์ใน Windows 8 ซึ่งเป็นปัญหาใหญ่ในการเรียกใช้งาน Win32API ทำให้คิดถึงภาษา C ขึ้นมาทันที โดยมองข้าม VB ไปเพราะรูปแบบการเขียนโปรแกรมไม่ค่อยถูกใจผู้เขียนสักเท่าใดนัก

C# น่าจะเป็นทางเลือกที่ดีเพราะมีตัวอย่าง และเขียนได้ง่ายกว่าภาษา C++ โดย C# จะมี .Net Framework เป็นตัวจัดการให้

โปรแกรมแรกที่เขียนคือ Console Application เพื่อลองอ่าน Serial Port ก็ผ่านไปด้วยดี จึงอาจหาญสร้าง Windows Application Form (ตอนแรกกะจะไป WPF Application มันเสียเลยแต่ก็ยั้้งๆ ไว้เพราะคงต้องใช้เวลาศึกษาอีกเยอะ)

ใช้เวลาเขียน ศึกษา แก้ไขปัญหา ปรับปรุงอยู่ 2-3 วันก็เป็นที่เรียบร้อยครบถ้วนตามที่ต้องการ คือ


  1. Auto start รันโปรแกรมหลังจากที่เปิดเครื่อง 
  2. ตรวจสอบ Port โดยแสดงรายชื่อ Com Port พร้อมทั้งแสดงรายละเอียดด้วย ผู้ใช้งานจะได้รู้ว่า Port ที่เลือกนั้นใช่บอร์ด Arduino หรือไม่
  3. แสดงเครื่องพิมพ์ที่มีอยู่ในระบบเพื่อเลือกกำหนดว่าเครื่องพิมพ์อันไหนจะแสดงชื่ออะไรในจอ LCD เพื่อให้ดูได้ง่าย เช่น Epson L120 --> REPORT (เมื่อเลือก Epson L120 เป็น Default Printer ให้แสดงชื่อ REPORT ออกที่จอ LCD)
  4. เก็บคอนฟิกค่าที่ตั้งไว้ ตรวจสอบเมื่อเริ่มต้นโปรแกรม ถ้าคอนฟิกเรียบร้อยให้ย่อโปรแกรมลง (Minimized เดิมคิดจะให้ซ่อนโปรแกรมไปเลยแต่ก็คิดว่าอาจจะต้องคลิกเรียกโปรแกรมมาใช้งานภายหลัง) แต่ถ้าคอนฟิกไม่ถูกต้อง หรือ ไม่ได้เสียบอุปกรณ์ให้แสดงหน้าจอเพื่อให้เลือกคอนฟิกโปรแกรมและอุปกรณ์ใหม่
สำหรับโปรแกรมนี้ยังขาดการตรวจสอบอยู่อย่างหนึ่งคือ ขณะที่ใช้งานไปหากผู้ใช้ถอดสาย USB ออก ให้แสดงหน้าจอโปรแกรมพร้อมให้ตรวจสอบ แก้ไขให้เรียบร้อย (จะเพิ่มเติมภายหลัง)

ปัญหาสำคัญที่แก้ไม่ตก คือ โปรแกรม Anti-Virus มองว่าโปรแกรมที่รันอยู่นั้นเป็น Virus เพราะโปรแกรมถูกรันใน Registy/.../Run

ทั้งหมดนี้คือ การเริ่มต้นจากศูนย์ เริ่มจากไม่รู้อะไรมากเลย อาศัยถามพนักงานขาย หาอ่านใน google ทั้งการเขียน Arduino C และ C# ซึ่งเป็นเรื่องที่สนุกสนาน ท้าทายความสามารถในการเรียนรู้เป็นอย่างยิ่ง จึงนำมาเล่าสู่กันฟังในที่นี้ และจะคอยอัพเดทอยู่เรื่อยๆ ครับ

ต้นแบบที่ใช้โปรแกรม VFP อ่านข้อมูลจาก Serial Port

ตัวอย่างโดยใช้ Pro Micro 5V ของ SparkFun

ใช้ LED แสดงสถานะที่เลือก

สวิทช์ Selector เลือกตำแหน่งให้ Input แก่ขาที่กำหนดไว้

ลายวงจรจะทำแผ่นปริ้นท์สำหรับชุดอุปกรณ์

ภาพต้นแบบขณะทดลองเขียนโปรแกรม

โปรแกรมแรกที่เขียนด้วย C# 

โปรแกรมที่ปรับปรุงให้แสดงรายละเอียด Com Port 

โปรแกรมที่เสร็จแล้ว ภาพนี้ ComPort ขึ้นสีแดงเพราะไม่ได้เชื่อมต่อ


Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...