23. Wio Terminal EP.10, ทดลองใช้ปุ่มต่าง ๆ บน Wio Terminal กับArduino


Wio Terminal EP.10, ทดลองใช้ปุ่มต่าง ๆ บน Wio Terminal กับArduino 

จะเห็นว่า บนตัวเครื่อง  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    สำหรับสวิตช์ตัวขวา ทางด้านขอบซ้ายของเครื่อง

การเรียกใช้งานสามารถทำได้ โดยการกำหนดค่าใน void setup() ดังนี้
void setup(void)
{
  tft.init();
  tft.setRotation(3);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_WHITE);
// กำหนดให้ ปุ่มกดด้านข้าง ทำหน้าที่เป็น INPUT 
  pinMode(WIO_KEY_A, INPUT);  
  pinMode(WIO_KEY_B, INPUT);
  pinMode(WIO_KEY_C, INPUT);
// กำหนดให้ ปุ่มจอยสติ๊ก ทำหน้าที่เป็น INPUT 
  pinMode(WIO_5S_LEFT, INPUT);
  pinMode(WIO_5S_RIGHT, INPUT);
  pinMode(WIO_5S_UP, INPUT);
  pinMode(WIO_5S_DOWN, INPUT);
  pinMode(WIO_5S_PRESS, INPUT);
}


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


/*
 * plakemphet.blogspot.com
 * 24/09/2021
 * Button-test
 */
#include <TFT_eSPI.h>

TFT_eSPI tft = TFT_eSPI();
int btn1, btn2, btn3, jl, jr, ju, jd, jc;

void setup(void)
{
  tft.init();
  tft.setRotation(3);  // กำหนดให้หมุนหน้าจอ โดยขอบด้านช่องเสียบ ยูเอสบี เป็นด้านล่าง
  // กำหนดตัวอักขระ สีขาว พื้นจอ สีดำ
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_WHITE);
  // กำหนดให้ ปุ่มกดด้านข้าง ทำหน้าที่เป็น INPUT 
  pinMode(WIO_KEY_A, INPUT);
  pinMode(WIO_KEY_B, INPUT);
  pinMode(WIO_KEY_C, INPUT);
  // กำหนดให้ ปุ่มจอยสติ๊ก ทำหน้าที่เป็น INPUT 
  pinMode(WIO_5S_LEFT, INPUT);
  pinMode(WIO_5S_RIGHT, INPUT);
  pinMode(WIO_5S_UP, INPUT);
  pinMode(WIO_5S_DOWN, INPUT);
  pinMode(WIO_5S_PRESS, INPUT);
}

// สร้าง ฟังก์ชั่น ในการอ่านค่าของปุ่มกดต่าง ๆ
void readButton()
{
  btn1 = digitalRead(WIO_KEY_C);
  btn2 = digitalRead(WIO_KEY_B);
  btn3 = digitalRead(WIO_KEY_A);
  ju = digitalRead(WIO_5S_UP);
  jd = digitalRead(WIO_5S_DOWN);
  jl = digitalRead(WIO_5S_LEFT);
  jr = digitalRead(WIO_5S_RIGHT);
  jc = digitalRead(WIO_5S_PRESS);
  // แสดงข้อความบนขอบจอด้านล่าง 
  tft.drawString("Button Test", 130, 220,2);
}
void loop()
{
  readButton();

// ตรวจสอบการกด Button1 ที่ขอบด้านซ้ายมือ
  if (btn1 == 0)
  {
    while (btn1 == 0)
    {
      btn1 = digitalRead(WIO_KEY_C);
      tft.drawString("BUTTON1", 10, 10,4);
    }
    tft.fillScreen(TFT_BLACK);
    
  }

// ตรวจสอบการกด Button2 ที่ขอบที่ปุ่มกลาง
  if (btn2 == 0)
  {
    while (btn2 == 0)
    {
      btn2 = digitalRead(WIO_KEY_B);
      tft.drawString("BUTTON2", 100, 10, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการกด Button3 ที่ขอบด้านขวามือ
  if (btn3 == 0)
  {
    while (btn3 == 0)
    {
      btn3 = digitalRead(WIO_KEY_A);
      tft.drawString("BUTTON3", 180, 10, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการโยกจอยสติ๊ก ไปทางด้านบน
  if (ju == 0)
  {
    while (ju == 0)
    {
      ju = digitalRead(WIO_5S_UP);
      tft.drawString("UP", 130, 20, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการโยกจอยสติ๊ก ไปทางด้านล่าง
  if (jd == 0)
  {
    while (jd == 0)
    {
      jd = digitalRead(WIO_5S_DOWN);
      tft.drawString("DOWN", 130, 200, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการโยกจอยสติ๊ก ไปทางด้านซ้าย
  if (jl == 0)
  {
    while (jl == 0)
    {
      jl = digitalRead(WIO_5S_LEFT);
      tft.drawString("LEFT", 10, 100, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการโยกจอยสติ๊ก ไปทางด้านขวา
  if (jr == 0)
  {
    while (jr == 0)
    {
      jr = digitalRead(WIO_5S_RIGHT);
      tft.drawString("RIGHT", 240, 100, 4);
    }
    tft.fillScreen(TFT_BLACK);
  }

// ตรวจสอบการกดจอยสติ๊ก ลงไปแบบกดสวิตช์
  if (jc == 0)
  {
    while (jc == 0)
    {
      jc = digitalRead(WIO_5S_PRESS);
      tft.drawString("PRESSED", 100, 110, 4);
    }

// ลบหน้าจอ
    tft.fillScreen(TFT_BLACK);
  }
}


หมายเหตุ: เมื่อเขียนโค้ดเสร็จ สามารถกด Upload ได้เลย โดยไม่ต้องสนใจว่า เดิมใช้ CircuitPython อยู่ เพราะ Arduino จะอัพโหลดให้ทั้งหมดโดยอัตโนมัติ



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

รูปที่ 1 โยกจอยสติ๊ก ไปทางซ้าย

รูปที่ 2 กดจอยสติ๊ก ลงไป

รูปที่ 3 โยกจอยสติ๊ก ไปทางขวา

รูปที่ 4 โยกจอยสติ๊ก ไปทางด้านบน

รูปที่ 5 โยกจอยสติ๊ก ไปทางด้านล่าง

รูปที่ 6 กดสวิตช์ Button1

รูปที่ 7 กดสวิตช์ Button2

รูปที่ 8 กดสวิตช์ Button3




ความคิดเห็น

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

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

28. Wio Terminal GPS

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