CAT LoRa Starter Kit ตอนที่ 3 มาสร้าง Library หลอดไฟ LED RGB ไว้ใช้งานกันเองเถอะ

จากในบทความที่แล้ว ผมได้แสดงการเชื่อมต่อ CAT LoraWAN ผ่านการใช้ AcSIP S76S Commands จะเห็นว่าการนำไปใช้งานยุ่งยากมาก ดังนั้นในบทความนี้เราจะนำ Code จากบทความที่แล้วมาสร้างเป็น Library เพื่อให้ง่ายต่อการนำไปใช้ในโปรเจคอื่น ๆ ต่อไป

ก่อนที่เราจะมาทำ Library ภาษา C++ ใช้เองบน Arduino ของ CAT LoraWAN เราต้องทำความเข้าใจในการสร้าง Library เบื้องต้นก่อน โดย Library นั้นจะประกอบด้วยไฟล์ 2 ไฟล์

  1. ไฟล์นามสกุล .h เป็นไฟล์ header เก็บเฉพาะชื่อฟังชั่นและค่าตัวแปรต่าง ๆ

เพื่อให้เข้าใจง่ายจะขอแสดงตัวอย่าง การสร้าง Library ของหลอดไฟ LED RGB โดยหลอด RGB LED มีอยู่สองแบบ คือ
1. common cathode ลบร่วม
2. common anode บวกร่วม

ดังนั้น RGB LED Library ของเราจะต้องรองรับ 2 การทำงานนี้ จึงออกแบบ Attribute และ Method ได้ดังนี้

ทำการสร้างโฟลเดอร์ชื่อ LedRGB ไว้ที่ตำแหน่งเก็บไฟล์ Libraries ของ Arduino (C:\Users\<username>\Documents\Arduino\libraries) และสร้าง Text File จำนวน 2 ไฟล์ชื่อ RgbLED.h และ RgbLED.cpp

ทำการแก้ไขไฟล์ RgbLED.h แล้วพิมพ์โค๊ดดังนี้

#ifndef RgbLED_h
#define RgbLED_h
#include "Arduino.h"class RgbLED{
private:
uint8_t redPin;
uint8_t greenPin;
uint8_t bluePin;
bool isCathode;
void setColor(uint8_t redValue, uint8_t greenValue, uint8_t blueValue);

public:
~RgbLED();
RgbLED(uint8_t redPin, uint8_t greenPin, uint8_t bluePin, bool isCathode);
void begin();
void turnOff();
void turnOn(uint8_t redValue, uint8_t greenValue, uint8_t blueValue);
void turnOnWhite();
void turnOnRed();
void turnOnGreen();
void turnOnBlue();
};
#endif

ทำการแก้ไขไฟล์ LedRGB.cpp พิมพ์โค๊ดดังนี้

#include "RgbLED.h"RgbLED::~RgbLED(){
Serial.println(F("Debug: RgbLED is destroyed."));
}
RgbLED::RgbLED(uint8_t redPin, uint8_t greenPin, uint8_t bluePin, bool isCathode){
this->redPin = redPin;
this->greenPin = greenPin;
this->bluePin = bluePin;
this->isCathode = isCathode;
}
void RgbLED::begin(){
pinMode(this->redPin, OUTPUT);
pinMode(this->greenPin, OUTPUT);
pinMode(this->bluePin, OUTPUT);
turnOff();
}
void RgbLED::setColor(uint8_t redValue, uint8_t greenValue, uint8_t blueValue) {
analogWrite(this->redPin, redValue);
analogWrite(this->greenPin, greenValue);
analogWrite(this->bluePin, blueValue);
}
void RgbLED::turnOff(){
if(this->isCathode){
setColor(0,0,0);
}else{
setColor(255,255,255);
}
}
void RgbLED::turnOn(uint8_t redValue, uint8_t greenValue, uint8_t blueValue){
if(this->isCathode){
setColor(redValue, greenValue, blueValue);
}else{
setColor(255-redValue, 255-greenValue, 255-blueValue);
}
}
void RgbLED::turnOnWhite(){
if(this->isCathode){
setColor(255, 255, 255);
}else{
setColor(0, 0, 0);
}
}
void RgbLED::turnOnRed(){
if(this->isCathode){
setColor(255, 0, 0);
}else{
setColor(0, 255, 255);
}
}
void RgbLED::turnOnGreen(){
if(this->isCathode){
setColor(0, 255, 0);
}else{
setColor(255, 0, 255);
}
}
void RgbLED::turnOnBlue(){
if(this->isCathode){
setColor(0, 0, 255);
}else{
setColor(255, 255, 0);
}
}

อธิบายโค๊ด

ต้องเริ่มในส่วนของ header (.h) ไฟล์ก่อนเลย เพราะในส่วนนี้เป็นการกำหนดว่าในไลบรารี่เราจะต้องมี function และ attribute อะไรบ้าง โดยในส่วนแรกต้องทำการเช็ค macro ก่อนเลย ว่าภายในไลบรารี่เรามี macro ตัวนี้ไหม ถ้าไม่มีก็ให้ทำการสร้าง macro ขึ้นมาใหม่

//เช็คว่าไม่มี macro ชื่อนี้ใช่ไหม ถ้าไม่มีก็ให้ทำงานบรรทัดต่อไป
#ifndef LedRGB_h
//ในส่วนนี้จะทำงานก็ต่อเมื่อมีการเช็คแล้วว่าไม่เคยมี macro ตัวนี้อยู่ ก็ให้ทำการสร้าง macro ออกมาใหม่
#define LedRGB_h
//Codding#endif

ต่อมาทำการ include ไฟล์ Arduino library

#ifndef LedRGB_h
#define LedRGB_h
#include "Arduino.h"//Codding#endif

ต่อมาในส่วนของไฟล์ .cpp นั้นเราต้องทำการ include ไฟล์ Header เข้ามาด้วย เพื่อทำการระบุว่ามี method อะไรบ้างที่เราต้องทำการใส่วิธีการทำงานให้มัน

#include "RgbLED.h"//Codding

เพียงเท่านี้เราก็จะได้ Library ที่เป็นของเราเองมาใช้งานได้แล้ว

วิธีใช้งาน

สามารถเรียกใช้ได้เหมือน Library ทั่ว ๆ ไปเลยครับ

#include "RgbLED.h";#define IS_CATHODE_LED trueRgbLED led1(5, 6, 9, IS_CATHODE_LED);void setup() {
Serial.begin(115200);
delay(500);

led1.begin();
}
void loop() {
led1.turnOn(100,150,255);
delay(1000);
led1.turnOff();
delay(1000);
led1.turnOnWhite();
delay(1000);
led1.turnOff();
delay(1000);
led1.turnOnRed();
delay(1000);
led1.turnOff();
delay(1000);
led1.turnOnGreen();
delay(1000);
led1.turnOff();
delay(1000);
led1.turnOnBlue();
delay(1000);
led1.turnOff();
delay(1000);
}

ในบทความต่อไปเราจะมาเริ่มลงมือสร้าง CAT LoraWAN Library กันนะครับ

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store