หน่วยที่ 3 การเขียนโปรแกรมเพื่อแก้ปัญหา
3.2 พื้นฐานการเขียนโปรแกรม
หน่วยที่ 3 การเขียนโปรแกรมเพื่อแก้ปัญหา
3.2 พื้นฐานการเขียนโปรแกรม
อธิบายโครงสร้างหน้าจอแสดงผลแบบตารางพิกัด (Matrix Coordinates) ได้
เขียนโปรแกรมควบคุมการเปิด-ปิดหลอดไฟ LED แต่ละดวงได้อย่างแม่นยำ
สร้างภาพเคลื่อนไหว (Animation) พื้นฐานพร้อมใส่เสียงประกอบได้
บอร์ด Micro:bit มีหลอดไฟ LED เรียงกันเป็นตารางขนาด 5 แถวแนวนอน และ 5 แถวแนวตั้ง รวมทั้งหมด 25 ดวง การสั่งงานหน้าจอนี้จะใช้หลักการคล้ายกับ กราฟพิกัด (X,Y) ในวิชาคณิตศาสตร์ แต่มีจุดที่แตกต่างกันเล็กน้อย คือ จุดเริ่มต้น (0,0) จะอยู่มุมซ้ายบนสุด
แกน X (แนวนอน): เริ่มจาก 0 (ซ้ายสุด) ไปถึง 4 (ขวาสุด)
แกน Y (แนวตั้ง): เริ่มจาก 0 (บนสุด) ไปถึง 4 (ล่างสุด)
ข้อควรจำ: พิกัดมุมขวาล่างสุดของหน้าจอ Micro:bit คือ (X: 4, Y: 4) ไม่ใช่ (5,5) เพราะระบบคอมพิวเตอร์มักจะเริ่มนับจากเลข 0 เสมอ
2. บล็อกคำสั่งหมวด Basic (พื้นฐาน)
เป็นกลุ่มบล็อกสีฟ้าที่ใช้บ่อยที่สุดเกี่ยวกับการแสดงผล
3. บล็อกคำสั่งหมวด LED (ควบคุมจุดพิกัด)
หากเราต้องการควบคุมไฟทีละดวงแบบเจาะจง ให้ใช้กลุ่มบล็อกสีม่วง
plot x [ ] y [ ] : สั่งให้ไฟ "ติด" ตามพิกัด X, Y ที่กำหนด
unplot x [ ] y [ ] : สั่งให้ไฟ "ดับ" ตามพิกัด X, Y ที่กำหนด
play melody : สร้างทำนองเพลงแบบง่ายๆ โดยสามารถคลิกเลือกโน้ตดนตรีในตาราง และปรับจังหวะความเร็ว (Tempo) ได้
ลงมือปฏิบัติทั้ง 3 ภารกิจ
ตัวอย่างโค้ดบล็อค
เป้าหมาย: ทำความเข้าใจความแตกต่างของบล็อก on start และ forever
ในบล็อก on start ให้ใส่คำสั่ง show string แล้วพิมพ์ชื่อเล่นภาษาอังกฤษของตนเอง
ในบล็อก forever ให้ใส่คำสั่ง show icon แล้วเลือกไอคอนที่ชอบ
สังเกตผลลัพธ์บน Simulator: ชื่อของนักเรียนจะเลื่อนผ่านหน้าจอเพียง 1 ครั้งตอนเริ่มต้น จากนั้นไอคอนจะค้างอยู่ตลอดเวลา
ตัวอย่างโค้ดบล็อค
เป้าหมาย: ใช้คำสั่ง plot วาดรูปตามพิกัดคณิตศาสตร์
ลากบล็อก on start ออกมา
ใช้คำสั่ง plot x [ ] y [ ] จำนวน 5 บล็อก เพื่อสั่งให้ไฟติดที่พิกัดดังต่อไปนี้:
(2, 0)
(1, 1)
(2, 2)
(3, 1)
(2, 4)
คำถาม: ภาพที่ปรากฏบนหน้าจอคือรูปอะไร?
นักเรียนลงมือทำเองนะครับ
สถานการณ์: ให้นักเรียนสร้างป้ายไฟแอนิเมชันของตนเองให้สวยงามโดดเด่น พร้อมเสียงประกอบ ข้อกำหนดของผลงาน:
ใช้บล็อก forever เป็นโครงสร้างหลัก
สร้างภาพเคลื่อนไหว (Animation) อย่างน้อย 4 เฟรม โดยใช้บล็อก show leds มาต่อกัน
เพิ่มความสมูทของภาพด้วยการแทรกบล็อก pause (ms) (หน่วงเวลา) ระหว่างแต่ละภาพ เช่น หน่วง 200 ms
เลือกคลังเพลงด้านล่าง ไว้ด้านล่างสุดของแอนิเมชัน เพื่อให้ป้ายไฟมีเสียงดนตรีประกอบวนไปเรื่อยๆ
ให้นักเรียนเลือกคลังเพลงด้านล่างมา 1 เพลง เพื่อแต่งเพลงของตนเอง
BABY SHARK
happy birthday
jingle bell
ช้างๆ
ดาวดวงน้อย
อธิบายแนวคิดและประโยชน์ของการทำงานแบบวนซ้ำ (Loop) ในการเขียนโปรแกรมได้
เลือกใช้คำสั่งวนซ้ำประเภทต่างๆ (Forever, Repeat, For, While) ได้เหมาะสมกับสถานการณ์
ประยุกต์ใช้ Loop เพื่อลดความซ้ำซ้อนของชุดคำสั่งตามหลักการ DRY (Don't Repeat Yourself) ได้
ในการเขียนโปรแกรม หากเราต้องการสั่งให้ไฟกะพริบ 100 ครั้ง การลากคำสั่งเปิด-ปิดไฟมาวางต่อกัน 200 บล็อก จะทำให้ไฟล์มีขนาดใหญ่ โปรแกรมทำงานช้า อ่านยาก และหากต้องการแก้ไข (เช่น เปลี่ยนรูปไฟกะพริบ) ก็ต้องแก้ถึง 100 จุด!
โปรแกรมเมอร์จึงยึดหลักการ DRY (Don't Repeat Yourself - อย่าทำอะไรซ้ำซ้อน) โดยใช้คำสั่ง "ลูป (Loop)" เข้ามาช่วย เพื่อสั่งให้คอมพิวเตอร์ทำงานชุดเดิมซ้ำๆ ตามเงื่อนไขที่กำหนด ทำให้โค้ดสั้นลง เป็นระเบียบ และแก้ไขได้ง่าย
ใน MakeCode มีลูปให้เลือกใช้ 4 ประเภทหลัก ซึ่งเหมาะกับสถานการณ์ที่ต่างกัน
ลงมือปฏิบัติทั้ง 3 ภารกิจ
เป้าหมาย: ใช้ลูป repeat เพื่อลดความซ้ำซ้อนของโค้ด
สถานการณ์: รหัสมอร์สคำว่า SOS ประกอบด้วย: สั้น 3 ครั้ง (...) , ยาว 3 ครั้ง (---) , และ สั้น 3 ครั้ง (...)
วิธีทำ:
ใช้บล็อก on button A pressed เป็นจุดเริ่มต้น
ใช้ลูป repeat 3 times ชุดที่ 1: ใส่ไฟกะพริบแบบสั้น (หน่วงเวลา 200 ms)
ใช้ลูป repeat 3 times ชุดที่ 2: ใส่ไฟกะพริบแบบยาว (หน่วงเวลา 800 ms)
ใช้ลูป repeat 3 times ชุดที่ 3: ใส่ไฟกะพริบแบบสั้น (หน่วงเวลา 200 ms)
สังเกตผลลัพธ์: หากนักเรียนไม่ใช้ลูป นักเรียนจะต้องใช้บล็อกคำสั่งถึง 36 บล็อก! แต่เมื่อใช้ลูป จะเหลือเพียงไม่กี่บล็อกเท่านั้น
ตัวอย่างโค้ดบล็อค
1.
3.
2.
เป้าหมาย: เข้าใจการทำงานของตัวแปร index ในลูป for
สถานการณ์: สร้างแอนิเมชันจุดไฟวิ่งจากขอบจอด้านซ้ายไปขอบจอด้านขวา
วิธีทำ:
ลากบล็อก for index from 0 to 4 มาใส่ใน forever
ภายในลูป ให้นำคำสั่ง plot x [ ] y [ ] (หมวด LED) มาใส่
ลากตัวแปร index (สีแดง) จากบนหัวของบล็อกลูป ไปใส่ในช่อง x ส่วนช่อง y ให้ระบุเป็น 2 (กึ่งกลางหน้าจอ)
ใส่บล็อก pause 200 ms และ clear screen ตามลำดับ
สังเกตผลลัพธ์: ตัวแปร index จะมีค่าเปลี่ยนเป็น 0, 1, 2, 3, 4 ตามลำดับรอบ ทำให้พิกัดแกน X เปลี่ยนไป ไฟจึงดูเหมือนกำลังวิ่ง
ตัวอย่างโค้ดบล็อค
ตัวอย่างโค้ดบล็อค
เป้าหมาย: เข้าใจการทำงานของลูป while ร่วมกับเงื่อนไข
สถานการณ์: สร้างสัญญาณเตือนภัยที่จะกะพริบและส่งเสียงไปเรื่อยๆ ตราบใดที่ยังกดปุ่ม A ค้างไว้
วิธีทำ:
ลากบล็อก while [ true ] do มาใส่ใน forever
ไปที่หมวด Input เปลี่ยนช่อง [ true ] เป็นคำสั่ง button A is pressed
ภายในลูป ให้ใส่รูปไอคอนกากบาท (X) สลับกับล้างหน้าจอ พร้อมใส่เสียงเตือนสั้นๆ
สังเกตผลลัพธ์: เมื่อบอร์ดทำงานปกติจะไม่มีอะไรเกิดขึ้น แต่พอกดปุ่ม A ค้างไว้ ระบบเตือนภัยจะทำงานวนไปเรื่อยๆ จนกว่าจะปล่อยมือ
อธิบายหลักการตัดสินใจของคอมพิวเตอร์ผ่านตรรกะแบบบูลีน (Boolean Logic: จริง/เท็จ) ได้
ใช้งานตัวดำเนินการเปรียบเทียบ (เช่น มากกว่า, น้อยกว่า, เท่ากับ) ในการกำหนดเงื่อนไขได้ถูกต้อง
เขียนโปรแกรมโดยใช้โครงสร้าง If-Else เพื่อให้โปรแกรมสามารถตัดสินใจเลือกการทำงานตามสถานการณ์ต่างๆ ได้
มนุษย์เรามีการตัดสินใจตลอดเวลา เช่น "ถ้าวันนี้ฝนตก ฉันจะพกร่ม มิฉะนั้น ฉันจะใส่หมวก" คอมพิวเตอร์ก็เช่นกัน แต่คอมพิวเตอร์จะเข้าใจและตัดสินใจจากสถานการณ์ที่มีคำตอบเพียง 2 ทางเลือกเท่านั้น คือ "เป็นจริง (True)" หรือ "เป็นเท็จ (False)" ซึ่งเราเรียกตรรกะนี้ว่า Boolean Logic
เพื่อสร้างเงื่อนไขให้คอมพิวเตอร์ตรวจสอบ เราต้องใช้เครื่องหมายทางคณิตศาสตร์เข้ามาช่วยเปรียบเทียบค่าข้อมูล (ใน MakeCode จะอยู่ในหมวด Logic สีฟ้าฟองน้ำ)
= : เท่ากับ
≠ : ไม่เท่ากับ
< : น้อยกว่า
> : มากกว่า
≤ : น้อยกว่าหรือเท่ากับ
≥ : มากกว่าหรือเท่ากับ
ใน MakeCode บล็อกคำสั่งเงื่อนไขจะอยู่ในหมวด Logic โดยมีโครงสร้างหลัก 3 ส่วน ได้แก่:
If (ถ้า...): เป็นด่านแรกของเงื่อนไข โปรแกรมจะตรวจสอบว่าเงื่อนไขนี้เป็น "จริง" หรือไม่ หากเป็นจริง จะทำตามคำสั่งที่อยู่ข้างในแล้วจบการตัดสินใจทันที
Else If (มิฉะนั้นถ้า...): หากด่านแรก (If) เป็น "เท็จ" โปรแกรมจะตกมาเช็คที่ด่านนี้แทน เราสามารถเพิ่ม Else If ได้หลายๆ อันเพื่อสร้างทางเลือกที่หลากหลาย
Else (มิฉะนั้น...): เป็นด่านสุดท้าย หากเงื่อนไขด้านบนทั้งหมดเป็น "เท็จ" โปรแกรมจะถูกบังคับให้ทำคำสั่งในกล่อง Else เสมอ
หากสถานการณ์มีความซับซ้อนและต้องตรวจสอบหลายเงื่อนไขพร้อมกัน เราจะใช้ตัวเชื่อม:
AND (และ): เงื่อนไขย่อย ทั้งหมดต้องเป็นจริง ผลลัพธ์รวมถึงจะเป็นจริง
(เช่น ต้องมีรหัสผ่านถูกต้อง AND สแกนนิ้วผ่าน ประตูถึงจะเปิด)
OR (หรือ): ขอแค่มีเงื่อนไขย่อย อันใดอันหนึ่งเป็นจริง ผลลัพธ์รวมก็จะเป็นจริงทันที
(เช่น วันนี้เป็นวันเสาร์ OR วันอาทิตย์ ถือว่าเป็นวันหยุด)
ลงมือปฏิบัติทั้ง 3 ภารกิจ
ตัวอย่างโค้ดบล็อค
เป้าหมาย: ประยุกต์ใช้โครงสร้าง If, Else If และ Else ร่วมกับเซนเซอร์
สถานการณ์: ให้นักเรียนดึงค่าจากเซนเซอร์อุณหภูมิบนบอร์ด (หมวด Input -> temperature) เพื่อสร้างระบบแจ้งเตือนสภาพอากาศ
วิธีทำ:
ลากบล็อกเงื่อนไข if... else... มาใส่ใน forever (กดเครื่องหมาย + ที่ก้นบล็อกเพื่อเพิ่มช่อง else if)
เงื่อนไขที่ 1 (If): นำบล็อกเปรียบเทียบมาใส่ ถ้า temperature > 30 ให้ show icon รูปพระอาทิตย์ (อากาศร้อน)
เงื่อนไขที่ 2 (Else If): ถ้า temperature < 25 ให้ show icon รูปเกล็ดหิมะ หรือ ร่ม (อากาศเย็น)
เงื่อนไขที่ 3 (Else): ให้ show icon รูปหน้ายิ้ม (อุณหภูมิปกติ)
สังเกตผลลัพธ์: ลองปรับแถบเลื่อนอุณหภูมิบนบอร์ดจำลอง (Simulator) เพื่อดูการเปลี่ยนแปลงของไอคอนตามเงื่อนไขที่เขียนไว้
เป้าหมาย: เข้าใจการใช้เงื่อนไขตรวจสอบค่าจากการสุ่มตัวเลข (Random)
สถานการณ์: สร้างเกมเป่ายิ้งฉุบดิจิทัลโดยใช้การเขย่าบอร์ด
วิธีทำ:
ลากบล็อก on shake จากหมวด Input มาวาง
นำบล็อกเงื่อนไข if... else if... else มาใส่ด้านใน
ไปที่หมวด Math นำบล็อก pick random 1 to 3 มาใช้ร่วมกับเครื่องหมาย = (เท่ากับ)
เงื่อนไขที่ 1: ถ้าสุ่มได้เลข 1 ให้วาดรูป กระดาษ (แสดงไฟเต็มจอ)
เงื่อนไขที่ 2: ถ้าสุ่มได้เลข 2 ให้วาดรูป ค้อน (แสดงไฟตรงกลาง)
เงื่อนไขที่ 3 (Else): ไม่ต้องเช็คเลข 3 เพราะถ้าไม่ใช่ 1 และ 2 ย่อมแปลว่าเป็น 3 แน่นอน ให้วาดรูป กรรไกร ได้เลย
ตัวอย่างโค้ดบล็อค
ตัวอย่างโค้ดบล็อค
เป้าหมาย: ทดลองใช้การเชื่อมเงื่อนไข AND (และ)
สถานการณ์: สร้างระบบล็อกนิรภัยที่จะปลดล็อก (แสดงเครื่องหมายถูก ✔️) ก็ต่อเมื่อ ระดับแสงสว่าง (Light Level) น้อยกว่า 50 และ อุณหภูมิ (Temperature) มากกว่า 35 องศา พร้อมกันเท่านั้น นอกเหนือจากนั้นให้แสดงกากบาท (❌) ล็อกไว้ตลอดเวลา
วิธีทำ:
ใช้บล็อก forever
นำบล็อก ... and ... จากหมวด Logic มาใส่ในช่องเงื่อนไข If
ใส่เงื่อนไข light level < 50 ในช่องซ้าย และ temperature > 35 ในช่องขวาของตัว and
แสดงผลตามสถานการณ์ที่กำหนด
เป้าหมาย: นักเรียนสามารถแปลงโค้ดกลับมาเป็นสัญลักษณ์มาตรฐาน และใช้ออกแบบระบบก่อนเขียนโปรแกรมได้
ความสำคัญของ Flowchart: ในโลกการทำงานจริง โปรแกรมเมอร์ไม่ได้เริ่มที่การเปิดคอมพิมพ์โค้ด แต่เริ่มที่กระดาษและ Flowchart เพื่อให้ทีมงานทุกคน (รวมถึงคนที่ไม่ใช่โปรแกรมเมอร์) เข้าใจระบบตรงกัน
ทบทวนสัญลักษณ์มาตรฐานสากล (ISO):
Terminal (แคปซูล/วงรี): Start / Stop
Process (สี่เหลี่ยมผืนผ้า): การประมวลผล เช่น set score to 0, คำนวณ A+B
Data/Input/Output (สี่เหลี่ยมด้านขนาน): การรับค่าหรือแสดงผล เช่น อ่านค่าปุ่ม A, แสดงหน้ายิ้ม
Decision (สี่เหลี่ยมขนมเปียกปูน): การตัดสินใจ ซึ่งเชื่อมโยงกับคำสั่ง If-Else ต้องมีทางออก 2 ทางเสมอ (Yes/No หรือ True/False)
กิจกรรมที่ 1 "วิศวกรถอดรหัส (Reverse Engineering)":
คุณครูแจกโค้ด MakeCode ที่เขียนเสร็จแล้วบนหน้าจอ (เช่น ระบบเปิดไฟอัตโนมัติเมื่อห้องมืด)
ให้นักเรียนทำงานคู่ ช่วยกัน "แกะโค้ด" แล้ววาดออกมาเป็น Flowchart ลงในกระดาษ
กิจกรรมที่ 2 "พิมพ์เขียวนักประดิษฐ์ (System Architecture)":
ให้นักเรียนคิดไอเดียโครงงาน 1 อย่าง (เช่น ระบบรดน้ำต้นไม้ ให้อาหารแมว หรือตู้เซฟรหัสผ่าน)
ไม่ต้องเขียนโค้ด แต่ให้วาด Flowchart การทำงานของระบบนั้นให้สมบูรณ์ที่สุด โดยต้องมีองค์ประกอบครบทั้ง การตั้งค่าตัวแปร, การรับ Input, เงื่อนไข Decision, และ Output