RGB LED using arduino by C++ class
จากโจทย์กำหนดให้ใช้ arduino ร่วมกับ rgb led โดยใช้ push button ในการรับอินพุตสำหรับเพิ่มความสว่างของแต่ละสีโดยเขียนเป็น class RGB_LEDออกแบบวงจร
ออกแบบโค้ด
| //RGB_LED Libraly #ifndef RGB_LED_h #define RGB_LED_h #include "Arduino.h" class RGB_LED { public: RGB_LED( byte red_pin, byte green_pin, byte blue_pin); void add_dc( byte color ); private: void update(); byte pins[3], rgb[3]; }; #endif |
สร้าง RGB_LED.h เป็น Abtract class กำหนดตัวแปรอาเรย์ pin[3] สำหรับเก็บค่าขาต่อใช้ RGB led แต่ละสีและ rgb[3] สำหรับเก็บค่าความสว่าง (duty cycle) ของ RGB led แต่ละสีโดยใส่เมธอดดังต่อไปนี้
RGB_LED( byte red_pin, byte green_pin, byte blue_pin);
เป็นคอนสตรัคเตอร์สำหรับสร้างตัวแปรคลาสโดยรับค่าเป็นขาต่อใช้งานของ RGB led แต่ละสี
void add_dc( byte color );
สำหรับเรียกใช้เพื่อเพิ่มค่าความสว่าง RGB led แต่ละสีโดยรับค่าเป็น 1 สำหรับสีแดง 2 สำหรับสีเขียว 3 สำหรีบสีฟ้า
void update();
สำหรับเปลี่ยนแปลงค่าความสว่างที่ได้จากเมธอด add_dc เพื่อนำค่าที่ถูกปรับไปใช้เปลี่ยนแปลงความสว่างถูกเรียกใช้ใน add_dc
RGB_LED( byte red_pin, byte green_pin, byte blue_pin);
เป็นคอนสตรัคเตอร์สำหรับสร้างตัวแปรคลาสโดยรับค่าเป็นขาต่อใช้งานของ RGB led แต่ละสี
void add_dc( byte color );
สำหรับเรียกใช้เพื่อเพิ่มค่าความสว่าง RGB led แต่ละสีโดยรับค่าเป็น 1 สำหรับสีแดง 2 สำหรับสีเขียว 3 สำหรีบสีฟ้า
void update();
สำหรับเปลี่ยนแปลงค่าความสว่างที่ได้จากเมธอด add_dc เพื่อนำค่าที่ถูกปรับไปใช้เปลี่ยนแปลงความสว่างถูกเรียกใช้ใน add_dc
| #include "RGB_LED.h" RGB_LED::RGB_LED( byte red_pin, byte green_pin, byte blue_pin) { pins[0] = red_pin; pins[1] = green_pin; pins[2] = blue_pin; for ( int i=0; i < 3; i++ ) { pinMode( pins[i], OUTPUT ); // use this pin as output } rgb[0] = 0; rgb[1] = 0; rgb[2] = 0; } void RGB_LED::add_dc( byte color ) { if( rgb[color]<255 ){ rgb[color] = rgb[color]+8; } else{ rgb[color] = 0; } update(); } void RGB_LED::update() { for ( int i=0; i < 3; i++ ) { analogWrite( pins[i], rgb[i] ); } } |
ใส่รายละเอียดของแต่ละเมธอด
Arduino Code
RGB_LED rgb(9,10,11); void loop() { **แก้ไขโค้ด** #include "RGB_LED.h" int count_startR = 0; int count_startG = 0; int count_startB = 0; int count_stopR = 0; int count_stopG = 0; int count_stopB = 0; int stateR = 0; int stateG = 0; int stateB = 0; RGB_LED rgb(9,10,11); void setup() { pinMode(2,INPUT); pinMode(3,INPUT); pinMode(4,INPUT); Serial.begin(9600); } void loop() { delay(100); switch(stateR){ //defult stateR = 0 case 0 : if(digitalRead(2)==0){ //เมื่อกดปุ่มจะนับเวลาเริ่มต้นและเปลี่ยน state เป็น 1 count_startR=millis(); stateR = 1; } break; case 1 : if(digitalRead(2)==0){ //เมื่อ state = 1 จะนับเวลาเพื่อเทียบกับเวลาเริ่มต้น count_stopR=millis(); if((count_stopR-count_startR) > 100){ //เมื่อเวลาเทียบกับเวลาเริ่มต้นต่างกัน 100ms stateR = 2; //เปลี่ยน state = 2 }} break; case 2 : rgb.add_dc(0); // เมื่อ state = 2 จะเพิ่มค่าความสว่างหรือ duty cycle if(digitalRead(2)==1){ // เมื่อปล่อยปุ่มกดจะเปลี่ยน state เป็น 0 เพื่อเริ่มใหม่ stateR =0; } break; } switch(stateG){ //defult stateG = 0 case 0 : if(digitalRead(3)==0){ //เมื่อกดปุ่มจะนับเวลาเริ่มต้นและเปลี่ยน state เป็น 1 count_startG=millis(); stateG = 1; } break; case 1 : if(digitalRead(3)==0){ //เมื่อ state = 1 จะนับเวลาเพื่อเทียบกับเวลาเริ่มต้น count_stopG=millis(); if((count_stopG-count_startG) > 100){ //เมื่อเวลาเทียบกับเวลาเริ่มต้นต่างกัน 100ms stateG = 2; //เปลี่ยน state = 2 }} break; case 2 : rgb.add_dc(1); // เมื่อ state = 2 จะเพิ่มค่าความสว่างหรือ duty cycle if(digitalRead(3)==1){ // เมื่อปล่อยปุ่มกดจะเปลี่ยน state เป็น 0 เพื่อเริ่มใหม่ stateG =0; } break; } switch(stateB){ //defult stateฺB = 0 case 0 : if(digitalRead(4)==0){ //เมื่อกดปุ่มจะนับเวลาเริ่มต้นและเปลี่ยน state เป็น 1 count_startB=millis(); stateB = 1; } break; case 1 : if(digitalRead(4)==0){ //เมื่อ state = 1 จะนับเวลาเพื่อเทียบกับเวลาเริ่มต้น count_stopB=millis(); if((count_stopB-count_startB) > 100){ //เมื่อเวลาเทียบกับเวลาเริ่มต้นต่างกัน 100ms stateB = 2; //เปลี่ยน state = 2 }} break; case 2 : rgb.add_dc(2); // เมื่อ state = 2 จะเพิ่มค่าความสว่างหรือ duty cycle if(digitalRead(4)==1){ // เมื่อปล่อยปุ่มกดจะเปลี่ยน state เป็น 0 เพื่อเริ่มใหม่ stateB =0; } break; } } |
สร้างตัวแปร RGB_LED rgb(9,10,11) โดยใส่อินพุตเป็นขาต่อใช้งานของ LED แต่ละสี
สร้างโค้ดเก็บข้อมูลจากปุ่มกดแต่ละปุ่มและเรียกใช้เมธอด rgb.add_dc(0) โดยใส่อินพุตเป็น 1, 2, 3 เพื่อเปลี่ยนแปลงความสว่างของสีที่เราต้องการ
ผลการทดลอง
source code :')
>> Arduino Source Code <<
>> RGB_LED_Lib <<
>> Schematic <<

No comments:
Post a Comment