Getting Started with the Raspberry Pi Pico Microcontroller and Arduino IDE [LEP]

ในตอนสุดท้ายนี้เป็นการทดลองเกี่ยวกับการรับสัญญาณอินเตอร์รัพท์ภายนอก (External interrupt) ของบอร์ด Raspberry Pi Pico โดยในการทดลองนี้จะใช้ขา GP1 (PIN2) เป็นขารับสัญญาณอินพุตอินเตอร์รัพท์ภายนอก โดยเมื่อมีสัญญาณอินเตอร์รัพท์ภายนอกเข้ามาที่ขาดังกล่าว โปรแกรมจะแสดงผลการทำงานให้ทราบ เทียบกับในช่วงที่โปรแกรมกำลังทำงานอยู่ในสถานะปกติ ทั้งนี้การรับสัญญาณอินเตอร์รัพท์ภายนอก เป็นคำสั่งที่นำไปใช้งานในด้านต่างๆ ได้มากมายเช่น การตรวจสอบค่าแรงดันและกระแสไฟฟ้าเกิน (Over voltage and current signal) หรือการรับค่าสัญญาณเตือนต่างๆ (Alarm signal) เป็นต้น

รูปที่ 1 แสดงตำแหน่งขาอินพุตรับสัญญาณอินเตอร์รัพท์
Getting Started with the Raspberry Pi Pico Microcontroller and Arduino IDE
รูปที่ 2 ลักษณะการทดลองอินเตอร์รัพท์ Raspberry Pi Pico

ในรูปที่ 1 และรูปที่ 2 แสดงตำแหน่งขาอินพุตรับสัญญาณอินเตอร์รัพท์ที่ใช้ในการทดลองขา GP1 (PIN2) และให้ขา GP5 (PIN7) รับสัญญาณอินพุตลอจิกปกติสำหรับเปรียบเทียบการทำงาน ในรูปที่ 2 เป็นการทดลองต่อวงจรรับสัญญาณอินเตอร์รัพท์อย่างง่ายบนเบรดบอร์ดเพื่อให้ง่ายและรวดเร็วขึ้น

// https://forum.arduino.cc/t/rotary-encoder-and-raspi-pico-interrupt-handlers-never-trigger/1034710

#define ROTA      1    // GP1, pin 2
#define SWITCH    5    // GP5, pin 7 

int CountInt = 0;
boolean SwitchGP5 = false;

void setup() {
  pinMode(ROTA, INPUT_PULLUP);  
  pinMode(SWITCH, INPUT_PULLUP);
  Serial.begin(9600);
  attachInterrupt(digitalPinToInterrupt(ROTA), ActiveInt, RISING);  
  interrupts();
}

void loop() {
  int val = digitalRead(SWITCH);
  if (val == 0) {
    if (SwitchGP5 == false) {
      SwitchGP5 = true;
      Serial.println("SwitchGP5");
    }
  } else {
    SwitchGP5 = false;
  }

  Serial.println(CountInt);
  delay(300);
}

void ActiveInt() {
  CountInt++;
}

สำหรับโปรแกรม Arduino บนสำหรับบอร์ด Raspberry Pi Pico ในการตรวจจับสัญญาณอินพุตอินเตอร์รัพท์ภายนอก จะแบ่งออกเป็น การตั้งค่าพิน (Pin Setup) กำหนดขา ROTA (GP1) และ SWITCH (GP5) เป็น INPUT_PULLUP ทำให้สถานะปกติของขามีค่าเป็น HIGH (1) และเมื่อปุ่มถูกกดหรือสวิตช์ต่อลง Ground จะกลายเป็น LOW (0) การขัดจังหวะ (Interrupt Handling) จะใช้คำสั่ง attachInterrupt เพื่อจับสัญญาณขาขึ้น (RISING) จากทั้งขา ROTA เมื่อที่ขาดังกล่าวเกิดสัญญาณเปลี่ยนจาก 0 ไป 1 จะทำให้โปรแกรมเข้าไปยังฟังก์ชัน void ActiveInt() ทันทีเพื่อบวกค่าตัวแปร CountInt เพิ่มขึ้นทีละ 1

ในการทำงานลูปโปรแกรมหลัก void loop() โดยปกติจะรอสัญญาณอินพุตอินเตอร์รัพท์ภายนอกและตรวจจับปุ่มกดเพื่ออ่านค่าที่ขา SWITCH โดยถ้า SWITCH ถูกกด (เป็น 0) จะพิมพ์คำว่า “SwitchGP5” ออกทาง Serial Monitor เพียงครั้งเดียว (ใช้ตัวแปรสถานะ witchGP5 ป้องกันไม่ให้พิมพ์ซ้ำขณะกดค้าง) และกรณีที่เกิดการอินเตอร์รัพท์ภายนอกก็จะกระโดดไปยังฟังก์ชั่น void ActiveInt() เพื่อเพิ่มค่าตัวแปร CountInt และพิมพ์ผลที่ได้ออกทาง Serial Monitor เช่นกัน

Getting Started with the Raspberry Pi Pico Microcontroller and Arduino IDE
รูปที่ 3 ผลการทดลองเมื่อเมื่อโปรแกรมเริ่มทำงานและไม่มีสัญญาณใดๆ
Getting Started with the Raspberry Pi Pico Microcontroller and Arduino IDE
รูปที่ 4 เมื่อทดลองกดสวิตช์ที่ขา GP5 (PIN 7)
Getting Started with the Raspberry Pi Pico Microcontroller and Arduino IDE
รูปที่ 5 เมื่อทดลองกดสวิตช์ที่ขา GP1 (PIN 2)

สำหรับการทดลองเกี่ยวกับการรับสัญญาณอินเตอร์รัพท์ภายนอก (External interrupt) ของบอร์ด Raspberry Pi Pico จะเป็นตอนสุดท้ายของการเริ่มต้นใช้งานบอร์ด Raspberry Pi Pico สำหรับเป็นตัวอย่างในการนำโค้ดโปรแกรมไปใช้งานได้ง่ายและรววเร็วยิ่งขึ้น สำหรับผู้อ่านที่ต้องการศึกษาการใช้งานบอร์ด Raspberry Pi Pico โดยละเอียดเพิ่มขึ้นแนะนำเข้าไปที่เว็บไซต์อ้างอิงข้างล่าง ซึ่งจะมีเนื้อหาให้เรียนรู้และทดลองใช้งานต่างๆ มากมายครับ.

Reference

  1. https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html
  2. https://randomnerdtutorials.com/
  3. https://github.com/micropython/micropython/wiki
  4. https://forum.arduino.cc/t/rotary-encoder-and-raspi-pico-interrupt-handlers-never-trigger/1034710
  5. https://pip-assets.raspberrypi.com/categories/610-raspberry-pi-pico/documents/RP-008355-DS-1-raspberry-pi-pico-python-sdk.pdf
  6. https://projecthub.arduino.cc/angadiameya007/getting-started-with-raspberry-pi-pico-in-arduino-ide-5e13ee
  7. https://th.cytron.io/p-edu-project-and-innovation-kits-for-pico-w
  8. https://wokwi.com/pi-pico
  9. https://thonny.org/
  10. https://microcontrollerslab.com/raspberry-pi-pico-pinout-features-programming-peripherals/