17. Wio Terminal EP.04, การควบคุมสวิตช์ 5 ทิศทาง และ สวิตช์ 3 ตัว


Wio Terminal EP.04, การควบคุมสวิตช์ 5 ทิศทาง และ สวิตช์กด 3 ตัว

จะเห็นว่า บนตัวเครื่อง  Wio Terminal มีสวิตช์ควบคุม 5 ทิศทาง หรือที่เรียกกันว่า จอยสติ๊ก อยู่ทางด้านขวามือของผู้ใช้ และยังมีสวิตช์กดอยู่ที่ขอบด้านข้างบนซ้ายอยู่อีก 3 ปุ่ม โดยจอยสติ๊ก และสวิตช์ทุกตัว จะมีสถานะเป็น ลอจิก 0 เมื่อถูกโยกหรือกด หากไม่มีการกระทำใด ๆ จะมีสถานะเป็น ลอจิก 1 แล้วจะมีวิธีนำมาใช้งานได้อย่างไร เดี๋ยวจะไปทดลองกันนะครับ 

 คำอธิบายฮาร์ดแวร์บนตัวเครื่อง
    ตามที่กล่าวไปแล้วว่า บนตัวเครื่อง Wio Terminal มีจอยสติ๊ก และ สวิตช์ อีก 3 ตัว ซึ่งมีชื่อที่ต้องใช้ในการอ้างถึง ดังนี้

สวิตช์ 5 ทิศทาง
WIO_5S_LEFT        สำหรับการโยกไปด้านซ้าย
WIO_5S_RIGHT    สำหรับการโยกไปด้านขวา
WIO_5S_UP    สำหรับการโยกไปด้านบน
WIO_5S_DOWN    สำหรับการโยกลงด้านล่าง
WIO_5S_PRESS    สำหรับการกดลงตรงกลาง

สวิตช์กด
WIO_KEY_C    สำหรับสวิตช์ตัวซ้ายสุด ทางด้านขอบซ้ายของเครื่อง
WIO_KEY_B    สำหรับสวิตช์ตัวกลาง ทางด้านขอบซ้ายของเครื่อง
WIO_KEY_A    สำหรับสวิตช์ตัวขวา ทางด้านขอบซ้ายของเครื่อง

การเรียกใช้งานสามารถทำได้ โดยการประกาศ เช่น
S_LEFT = Pin(Map.WIO_5S_LEFT, Pin.IN)
S_RIGHT = Pin(Map.WIO_5S_RIGHT, Pin.IN)
S_UP = Pin(Map.WIO_5S_UP, Pin.IN)
S_DOWN = Pin(Map.WIO_5S_DOWN, Pin.IN)
S_PRESS = Pin(Map.WIO_5S_PRESS, Pin.IN)

BUTTON1 = Pin(Map.WIO_KEY_C, Pin.IN)
BUTTON2 = Pin(Map.WIO_KEY_B, Pin.IN)
BUTTON3 = Pin(Map.WIO_KEY_A, Pin.IN)



เขียนโค้ด ดังต่อไปนี้ โค้ดที่ใช้ทดสอบนี้ 

from machine import LCD, Pin, Map

# Declaration 

lcd = LCD()

# ประกาศ ให้จอยสติ๊ก และสวิตช์ ทำหน้าที่เป็น INPUT
S_LEFT = Pin(Map.WIO_5S_LEFT, Pin.IN)
S_RIGHT = Pin(Map.WIO_5S_RIGHT, Pin.IN)
S_UP = Pin(Map.WIO_5S_UP, Pin.IN)
S_DOWN = Pin(Map.WIO_5S_DOWN, Pin.IN)
S_PRESS = Pin(Map.WIO_5S_PRESS, Pin.IN)

BUTTON1 = Pin(Map.WIO_KEY_C, Pin.IN)
BUTTON2 = Pin(Map.WIO_KEY_B, Pin.IN)
BUTTON3 = Pin(Map.WIO_KEY_A, Pin.IN)

 # สร้างฟังก์ชั่น สำหรับใช้แสดงข้อความ ในแนวประมาณกึ่งกลางจอ
def stext(txt):   
    lcd.setTextColor(lcd.color.YELLOW, lcd.color.BLACK)
    lcd.setTextSize(4)
    # อันนี้แก้ไขตามสะดวกครับ ผมไม่ได้ตรวจสอบละเอียด เพียงกะคร่าว ๆ เท่านั้น
    px = int((320 - (len(txt) * 20)) / 2)  
    lcd.drawString(txt, px, 110)

# main program
# กำหนดให้ จอภาพมีพื้นเป็นสีดำและ แสดงข้อความด้วยขนาด = 4            
lcd.fillScreen(lcd.color.BLACK)
lcd.setTextSize(4)

# วนรอบการทำงาน เมื่อจอยสติ๊ก หรือ สวิตช์ ถูกกดค้างไว้จะแสดงข้อความบนจอ
while True:
# ระบายสีพื้นด้วยสีดำ
    lcd.fillScreen(lcd.color.BLACK)
# ตรวจสอบการโยกจอยสติ๊กไปทางซ้าย
    if S_LEFT.value() == 0:
        while S_LEFT.value() == 0:
            stext("LEFT ")
# ตรวจสอบการโยกจอยสติ๊กไปทางขวา
    if S_RIGHT.value() == 0:
        while S_RIGHT.value() == 0:
            stext("RIGHT")
# ตรวจสอบการโยกจอยสติ๊กขึ้นด้านบน
    if S_UP.value() == 0:
        while S_UP.value() == 0:
            stext("UP   ")
# ตรวจสอบการโยกจอยสติ๊กลงด้านล่าง
    if S_DOWN.value() == 0:
        while S_DOWN.value() == 0:
            stext("DOWN ")
# ตรวจสอบการโยกจอยสติ๊ก โดยการกดลงตรง ๆ
    if S_PRESS.value() == 0:
        while S_PRESS.value() == 0:
            stext("PRESSED ")
# ตรวจสอบการกดสวิตช์ด้านซ้ายมือ
    if BUTTON1.value() == 0:
        while BUTTON1.value() == 0:
            stext("BUTTON1 ")
# ตรวจสอบการกดสวิตช์ตัวกลาง        
    if BUTTON2.value() == 0:
        while BUTTON2.value() == 0:
            stext("BUTTON2 ")
# ตรวจสอบการกดสวิตช์ด้านขวามือ     
    if BUTTON3.value() == 0:
        while BUTTON3.value() == 0:
            stext("BUTTON3 ")


อย่าลืม!! เมื่อแก้ไขเสร็จ ให้เลือกเมนู Save เพื่อส่งโค้ดเข้าไปใน Wio และทำงานตามที่เขียนไว้ทันที หาก Saveไม่ได้ ให้โยกสวิตช์ปิดเครื่องไปด้านตรงข้ามกับเลื่อนปิด 1 ครั้ง เพื่อเป็นการกด รีเซ็ต แล้วจึงกด Save

รูปที่1 วิธีการกดรีเซ็ต





 ผลที่ได้จากการทำงาน


รูปที่ 2 ผลจากการทำงานของคำสั่ง



โพสต์ยอดนิยมจากบล็อกนี้

14. Wio Terminal EP.01 , เริ่มตันกับ Wio Terminal ด้วย circuitPython

28. Wio Terminal GPS

24. Wio Terminal EP.11, อนาล็อกมิเตอร์ วัดความสว่างของแสง