รับ Input จากสวิตช์ A B บนบอร์ด Nanobit
บนบอร์ด Nanobit มีสวิตช์ 2 ตัวที่สามารถเขียนโค้ดเพื่อรับค่าได้ในตำแหน่งดังรูป โดยมีรูปแบบคำสั่งดังนี้
รูปแบบคำสั่ง อ่านค่าสวิตช์ถ้าปุ่ม A,B ถูกกดจะให้ค่าเป็น True (จริง) ถ้าไม่ถูกกดจะให้ค่าเป็น False (เท็จ) button_a.is_pressed() button_b.is_pressed() ถ้าปุ่ม A,B ถูกกดรอจนกระทั่งปล่อยจะให้ค่าเป็น True ถ้าไม่ถูกกดจะให้ค่าเป็น False button_a.was_pressed() button_b.was_pressed() |
ตัวอย่างที่ 14 ทดสอบคำสั่ง is_pressed()
from microbit import * while True: if button_a.is_pressed(): display.show('A',clear=True) if button_b.is_pressed(): display.show('B',clear=True)
การทำงาน
is_pressed() ถ้ากดสวิตช์ค้างจะมีค่าเป็นจริงตลอดเวลา ดังนั้นคำสั่ง display.show ซึ่งกำหนดค่า clear เป็นจริง จะทำการเคลียร์ผลลัพธ์ข้อความหลังจากทำคำสั่งแล้ว จะเคลียร์ข้อความที่หน้าจอออก ถ้ากดค้างจะพบว่า LED 5×5 จะเกิดการกะพริบ
ตัวอย่างที่ 15 ทดสอบคำสั่ง was_pressed()
from microbit import * while True: if button_a.was_pressed(): display.show('A',clear=True) if button_b.was_pressed(): display.show('B',clear=True)
การทำงาน
สำหรับคำสั่ง was_pressed() ถ้ามีการกดสวิตช์ค้าง จะเป็นจริงแค่ครั้งเดียว ถ้าจะให้เป็นจริงอีกครั้งจะต้องปล่อยสวิตช์ก่อนแล้วกดใหม่
ตัวอย่างที่ 16 ใน 10 วินาทีคุณกดสวิตช์ได้กี่ครั้ง
คำสั่ง get_presses
จะทำการเก็บค่าจำนวนครั้งของการกดสวิตช์เอาไว้ และเมื่อเรียกใช้งานคำสั่ง get_presses
จะแสดงค่าจำนวนครั้งของการกด พร้อมทั้งเคลียร์ค่าการนับเดิมด้วย ในตัวอย่างจะรอเวลา 10 วินาทีก่อนที่จะอ่านค่าจำนวนครั้งของการกดคีย์ออกมา
from microbit import * while True: sleep(10000) display.scroll(button_a.get_presses())
การทดสอบ
ให้กดสวิตช์ A เร็วๆ รัวๆ เพื่อตรวจสอบว่า ในเวลา 10 วินาที สามารถกดสวิตช์ย้ำได้จำนวนมากสุดกี่ครั้ง หรืออาจทดสอบ โดยนับจำนวนครั้งของการกดแล้ว ดูว่า ผลลัพธ์ที่แสดงตรงกับที่กดไปหรือไม่ก็ได้
การสุ่มค่าตัวเลข
เพื่อสุ่มค่าตัวเลขในที่นี้จะต้องเพิ่มโมดูลชื่อ random ไว้ที่ส่วนหัวของโค้ดก่อน โดยพิมพ์
import random
รูปแบบการใช้งานคำสั่ง randomการสุ่มค่าตัวเลขจำนวนเต็มrandom.randint(a,b) ตัวอย่างrandom.randint(2,8) #สุ่มค่าตัวเลขจำนวนเต็มตั้งแต่ค่า 2 ถึง 8 การสุ่มค่าตัวเลขทศนิยมตั้งแต่ 0.0 ถึง 1.0random.random() การสุ่มเลือกค่าจากสมาชิกในตัวแปรแบบ listlist = [“choice1”, “choice2”, “choice3”, “choice4”] random.choice(list) |
ตัวอย่างที่ 17 การสุ่มค่าตัวเลขจาก 0.0 ถึง 1.0 แสดงผลที่ REPL
from microbit import * import random while True: print (random.random()) sleep(100)
การทดสอบ
ให้เปิดหน้าต่าง REPL (คลิกที่ Open Serial ) เพื่อดูผลลัพธ์
ตัวอย่างที่ 18 สุ่มการติดสว่างของ LED 5×5
จากคำสั่ง set_pixel เพื่อแสดงตำแหน่ง LED ติดตามที่ต้องการ เมื่อนำมาสุ่มตำแหน่งด้วยตัวเลข ก็จะให้ LED ติดระยิบระยับได้
from microbit import * import random while True : x=random.randint(0,4) y=random.randint(0,4) display.set_pixel(x,y,9) sleep(100) display.set_pixel(x,y,0) sleep(50)
การทำงานของโปรแกรม
คำสั่ง random ไม่มีอยู่ในไลบรารี่หลัก microbit จึงต้อง import เข้ามาเพิ่ม จากนั้นสร้างตัวแปร x และ y สำหรับกำหนดตำแหน่งพิกัด x,y ของ LED 5×5 จากนั้นทำการสุ่ม 2 ครั้ง ครั้งแรกเป็นพิกัดแนวแกน x ครั้งที่ 2 เป็นพิกัดแนวแกน y แล้วส่งค่าไปแสดงด้วยคำสั่ง set_pixel() เว้นระยะ 0.1 วินาทีสั่งดับ LED ที่ตำแหน่งเดิมทิ้ง วนทำซ้ำไปเรื่อยๆ
ข้อแนะนำเพิ่มเติม
ลองนำคำสั่ง ดับ LED ออก เพื่อให้ LED ติดค้าง ซึ่งจะเห็นว่า LED สุ่มติดไปเรื่อยๆ จนเต็มหน้าจอในที่สุด
from microbit import * import random while True : x=random.randint(0,4) y=random.randint(0,4) display.set_pixel(x,y,9) sleep(100)
การใช้งานพอร์ตอินพุต/เอาต์พุต
Nanobit มีพอร์ตให้ใช้งานทั้งหมด 21 พอร์ต การติดต่อใช้ผ่านคำสั่ง pinx โดย x คือตำแหน่งขาตั้งแต่ 0-20 เพื่อทดสอบว่าคำสั่ง pinx มีคำสั่งอะไรให้ใช้งานบ้าง ให้ทำตามขั้นตอนดังนี้
1. เปิดหน้าต่าง REPL เพื่อเข้าสู่โหมดการพิมพ์คำสั่งแบบ Command Line
2. พิมพ์ >>> dir()
เพื่อดูว่ามีชุดโมดูลอะไรให้ใช้งานได้บ้าง
3. พิมพ์ >>> dir(pin2) เพื่อดูว่าคำสั่งที่ใช้งานได้ของ pin 2 มีอะไรบ้าง
คำสั่งสำคัญๆ ประกอบด้วยwrite_digital(value) ตัวอย่างpin2.write_digtal(1) กำหนดให้ขา P2 มีลอจิกเป็น “1” read_digital() ตัวอย่างx=pin3.read_digital() อ่านค่าดิจิตอลจากขา P3 เก็บค่าในตัวแปร x read_analog() write_analog(value) |
ตัวอย่างที่ 19 ไฟกะพริบที่ขา 15
from microbit import * while True : pin15.write_digital(1) sleep(200) pin15.write_digital(0) sleep(200)
การทำงาน
บนบอร์ด Nanobit มี LED ใช้งานทั่วไปติดตั้งเข้ากับขา 15 การสั่งงานให้ติดหรือดับ ทำได้โดยใช้คำสั่ง write_digital ในที่นี้จะให้ LED ที่ขา P15 ติดและค้างอยู่ 0.2 วินาที ดับและดับค้างอยู่ 0.2 วินาที วนซ้ำไปเรื่อยๆ
ตัวอย่างที่ 20 สวิตช์ A/B ควบคุมการติดดับของหลอดไฟ
ประยุกต์จากตัวอย่างก่อนหน้านี้ในเพื่อการควบคุมการเปิดปิดหลอดไฟ โดยเมื่อกดสวิตช์ A ให้หลอดไฟติด กดสวิตช์ B ให้หลอดไฟดับ
from microbit import * while True : if button_a.is_pressed(): pin15.write_digital(1) elif button_b.is_pressed(): pin15.write_digital(0)
ตัวอย่างที่ 21 เปิด/ปิด หลอดไฟด้วยสวิตช์ตัวเดียว
from microbit import * x=0 while True : if button_a.was_pressed(): if x==0: pin15.write_digital(1) x=1 else : pin15.write_digital(0) x=0
การทำงาน
ใช้ตัวแปรเข้ามาช่วย เพื่อให้รับรู้สถานะของ LED ว่าเดิมนั้นติดหรือดับอยู่ จากนั้นค่อยสั่งการให้ LED เปลี่ยนสถานะเป็นสถานะตรงข้าม ตัวอย่างนี้ใช้คำสั่ง if ถึง 2 ชุดซ้อนกัน เวลาเขียนโค้ดจะต้องระวังเรื่องตำแหน่ง Tab ด้วย
ในการตรวจสอบสวิตช์ A จะใช้ was_pressed เนื่องจากจะต้องรอให้มีการกดสวิตช์และปล่อยจึงจะนับเป็นการกดสวิตช์ 1 ครั้ง ทำให้สวิตช์ทำงานได้ถูกต้องมากขึ้น
ตัวอย่างที่ 22 ปรับความสว่างของหลอดไฟด้วยสวิตช์ A B
from microbit import * x=0 while True : if button_a.was_pressed(): if x<900 : x=x+100 else : x=1023 if button_b.was_pressed(): if x>100 : x=x-100 else : x=0 pin15.write_analog(x)
การทำงาน
คำสั่ง write_analog
จะส่งค่าระดับแรงดันที่ปรับเปลี่ยนตามค่าความกว้างพัลส์ ค่าแรงดัน 0-3.3V ปรับเปลี่ยนตามค่าที่เราส่งออกไป 0-1023 ตัวอย่างนี้ใช้การกดสวิตช์ A เพื่อเพิ่มค่าตัวแปร จากนั้นนำตัวแปรที่ถูกเพิ่มค่าทีละ 100 เป็นค่า PWM เพื่อขับ LED ให้ค่อยๆ สว่างมากขึ้น จนถึงค่าสูงสุด ถ้ากดสวิตช์ B จะเป็นการลดค่าตัวแปรลงทีละ 100 จนค่าเป็น 0 จะพบว่า LED ดับ