บทความประกอบการเรียนรู้ => เทคนิคการอินเตอร์เฟส Visual C# => ข้อความที่เริ่มโดย: admin ที่ กันยายน 21, 2018, 12:10:15 PM

หัวข้อ: เรียนรู้ครั้งที่ 11 [LED แสดงผลจากค่าในตัวแปร]
เริ่มหัวข้อโดย: admin ที่ กันยายน 21, 2018, 12:10:15 PM
การเรียนรู้ครั้งนี้ใช้เพื่อต่อยอดที่จะขับ LED ที่ต่อพอร์ตในการเรียนรู้ครั้งต่อ ๆ ไป จุดประสงค์หลักคือการเขียนโค้ดเพื่อให้ LED สามารถแสดงผลติด/ดับในแต่ละหลักได้โดยรับค่าจากข้อมูลที่เก็บอยู่ในตัวแปร เมื่อทำการเชื่อมต่อพอร์ต (ไม่ว่าจะเป็นขนานหรืออนุกรม) LED ที่อยู่กับฮาร์ดแวร์จะต้องมีสถานะเช่นเดียวกับ LED ที่อยู่บนหน้าต่างของโปรแกรม
เป้าหมายของการทำงานของโปรแกรมจะเป็นเช่นนี้
(http://www.praphas.com/PhotoForum/interface/HowTo11/12.png)

(http://www.praphas.com/PhotoForum/interface/HowTo11/run.gif)
ขั้นตอนการดำเนินการ
1. ค้นหารูปภาพที่ใช้แทนสวิตช์และ LED โดยให้มีทั้ง 2 สภาวะคือ ON/OFF หรือเข้าไปที่เวปไซต์
http://www.clker.com/clipart-6515.html (http://www.clker.com/clipart-6515.html)
เมื่อได้ภาพที่ต้องการแล้วให้คลิกขวาที่ภาพแล้วเลือก Save as บันทึกภาพเก็บลงเครื่อง
ตัวอย่างภาพที่ใช้งาน
(http://www.clker.com/cliparts/Y/u/h/d/l/1/led-off-th.png)(http://www.clker.com/cliparts/o/c/7/P/9/5/led-on-th.png)

(http://www.clker.com/cliparts/R/B/I/T/f/z/led-green-th.png)(http://www.clker.com/cliparts/E/E/C/W/C/P/led-green-th.png)

(http://www.clker.com/cliparts/D/U/l/o/Y/B/switch-on-off-th.png)(http://www.clker.com/cliparts/c/N/3/F/S/Q/power-switch-on-th.png)

(http://www.clker.com/cliparts/4/V/m/S/l/i/button-on-th.png)(http://www.clker.com/cliparts/U/w/Q/Q/Q/3/button-off-th.png)

วิธีการเก็บภาพลงเครื่อง ให้คลิกขวากลางภาพที่ต้องการแล้วเลือก Save image as... ดังรูป
(http://www.praphas.com/PhotoForum/interface/HowTo11/1.png)
*เฉพาะรูป LED ติดกับ LED ดับเพียง 2 รูปเท่านั้น

2. วางคอนโทรล PictureBox ลงบน Form ทำการเลือกภาพที่ดาวน์โหลดจากข้อ 1 (เฉพาะ LED)
(http://www.praphas.com/PhotoForum/interface/HowTo11/2.png)

3. คลิกตามรูปแล้วทำการเลือกรูปที่ดาวน์โหลดมาทั้ง 2 รูป
(http://www.praphas.com/PhotoForum/interface/HowTo11/3.png)

4. เลือกรูปแรก
(http://www.praphas.com/PhotoForum/interface/HowTo11/4.png)

5. ตั้งค่าคุณสมบัติ SizeMode เป็น AutoSize
(http://www.praphas.com/PhotoForum/interface/HowTo11/5.png)

6. เปลี่ยนชื่อรูปจากเดิมที่เป็น picturebox1 เป็นชื่อแทนโดยให้มีความหมายที่ใช้งาน (ในที่นี้ใช้คำว่า LOFF)
(http://www.praphas.com/PhotoForum/interface/HowTo11/6.png)

7. คัดลอก PictureBox จากข้อ 6 วาง แล้วเปลี่ยนรูปพร้อมเปลี่ยนชื่อดังรูป
* LON,LOFF เป็นต้นแบบภาพ LED ในสภาวะติดและดับ
(http://www.praphas.com/PhotoForum/interface/HowTo11/7.png)

8. ปรับขนาด Form ให้ปิดบังต้นแบบภาพ
(http://www.praphas.com/PhotoForum/interface/HowTo11/8.png)

9. จะได้หน้าตาโปรแกรมดังรูป
(http://www.praphas.com/PhotoForum/interface/HowTo11/9.png)

10. วางคอนโทรล Timer ลงใน Form และกำหนดค่าใน Properties ดังนี้
   -Enabled-->True   เพื่อให้ไทเมอร์ทำงานทันทีเมื่อรันโปรแกรม
   -Interval--->100 กำหนดช่วงเวลาการกระตุ้นเป็น 100 มิลลิวินาที (1/10 วินาที)
(http://www.praphas.com/PhotoForum/interface/HowTo11/10.png)

11. ดับเบิลคลิกที่ตัว Timer แล้วเขียนโค้ด
   -ส่วนแรกเป็นการประกาศตัวแปร แต่เนื่องจากโปรแกรมที่ใช้งานเป็น C# 2015 จึงยังไม่สามารถใส่เป็นเลขฐานสองได้
   -ส่วนของโปรแกรม ใช้การตรวจสอบบิตข้อมูลในแต่ละบิตว่าเป็น 1 หรือ 0 ก่อนสั่งให้เปลี่ยนภาพ(นำภาพจากต้นแบบ)แทนภาพเดิม
(http://www.praphas.com/PhotoForum/interface/HowTo11/11.png)
โค้ดโปรแกรมส่วนประกาศตัวแปร
โค๊ด: [Select]
        Byte[] vals = {0x00,    //0000 0000
                       0x01,    //0000 0001
                       0x03,    //0000 0011
                       0x07,    //0000 0111
                       0x0F,    //0000 1111
                       0x1F,    //0001 1111
                       0x3F };  //0011 1111
        Int16 n = 0;
โค้ดโปรแกรมส่วนตรวจสอบข้อมูลและเปลี่ยนภาพ
โค๊ด: [Select]

            L0.Image = ((vals[n] & 1) == 1) ? LON.Image : LOFF.Image;
            L1.Image = ((vals[n] & 2) == 2) ? LON.Image : LOFF.Image;
            L2.Image = ((vals[n] & 4) == 4) ? LON.Image : LOFF.Image;
            L3.Image = ((vals[n] & 8) == 8) ? LON.Image : LOFF.Image;
            L4.Image = ((vals[n] & 16) == 16) ? LON.Image : LOFF.Image;
            //-----------------next index pointer----------------------
            if (n < vals.Length - 1)
                n++;
            else
                n = 0;

หมายเหตุ ใช้ if แบบย่อเพื่อให้โค้ดสั้นลง เช่น
โค๊ด: [Select]
L0.Image = ((vals[n] & 1) == 1) ? LON.Image : LOFF.Image;
โค้ดเต็มคือ
โค๊ด: [Select]
if((vals[n] & 1) == 1)
{
L0.Image=LON.Image;
}
else
{
L0.Image=LOFF.Image;
}

12. รันโปรแกรมเพื่อทดสอบผล
(http://www.praphas.com/PhotoForum/interface/HowTo11/12.png)

(http://www.praphas.com/PhotoForum/interface/HowTo11/run.gif)
หัวข้อ: Re: เรียนรู้ครั้งที่ 11 [LED แสดงผลจากค่าในตัวแปร]
เริ่มหัวข้อโดย: admin ที่ กันยายน 21, 2018, 12:17:35 PM
(http://www.praphas.com/PhotoForum/interface/HowTo10/led-green.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-green1.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-purple.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-purple1.png)
(http://www.praphas.com/PhotoForum/interface/HowTo10/led-red.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-red1.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-yellow.png)(http://www.praphas.com/PhotoForum/interface/HowTo10/led-yellow1.png)
หัวข้อ: Re: เรียนรู้ครั้งที่ 11 [LED แสดงผลจากค่าในตัวแปร]
เริ่มหัวข้อโดย: admin ที่ กันยายน 21, 2018, 12:17:48 PM
สร้างรูปแบบไฟวิ่งด้วยกูเกิลชีต
ให้ทำสำเนาลงไดร์ฟของตนเองแล้วค่อยใช้งาน (ล็อกอินเข้ากูเกิลไดร์ฟก่อนคลิกสำเนา)

https://docs.google.com/spreadsheets/d/1ApTaPgUt7pWdjOn85-47ihYxN8vkTyAudvIZzH1MU4w (https://docs.google.com/spreadsheets/d/1ApTaPgUt7pWdjOn85-47ihYxN8vkTyAudvIZzH1MU4w)

(https://www.praphas.com/PhotoForum/interface/HowTo11/13.png)


(https://www.praphas.com/PhotoForum/interface/HowTo11/14.png)