วันพุธที่ 14 พฤศจิกายน พ.ศ. 2561

                               



อุปกรณ์ในการทดลอง 
  1. LED RGB 1 ดวง 
  2. ฺบอร์ดทดลอง 
  3. ตัวต้านทาน 330 โอห์ม 3 ตัว 
  4. ตัวต้านทาน 10K โอห์ม 3 ตัว 
  5. Push Button Switch 3 ตัว 
  6. บอร์ด Arduino 
  • คำอธิบาย
  • วงจรทำงานโดยใช้ระดับแรงดันสำหรับ I/O ที่ 5V เท่านั้น
    • มีปุ่มกด 3 ปุ่ม (ให้ชื่อว่า R, G, B) ทำงานแบบ Pull-up (active-low) ให้ต่อวงจรปุ่มกดเอง เพื่อใช้งานกับบอร์ด Arduino
    • มีเอาต์พุต 3 ขา ต่อกับวงจร RGB LED (จะใช้แบบ Common-Anode หรือ Common-Cathode ก็ได้) พร้อมตัวต้านทานจำกัดกระแส 3 ตัว
    • เขียนโค้ดด้วยภาษา C++ สำหรับ Arduino เพื่อสร้าง Class ที่มีชื่อว่า "RGB_LED"
    • กำหนดให้ constructor สำหรับคลาส RGB_LED เป็นดังนี้ RGB_LED( int red_pin, int_green_pin, int blue_pin ); โดยรับค่ามาเป็นหมายเลขของ I/O pins สำหรับ 3 ขาของ Arduino ที่จะถูกใช้งานเป็นเอาต์พุตแบบ PWM
    • มีเมธอดอย่างเช่น void setRed( int duty_cycle ), void setGreen( int duty_cycle ), void setBlue( int duty_cycle ) เพื่อใช้กำหนดค่า duty cycle ของขาเอาต์พุต PWM และใช้ในการกำหนดความสว่างของแต่ละสี ใช้คำสั่ง analogWrite() ในการกำหนดค่า
    • กำหนดสมาชิก instance members ตามความจำเป็น เช่น ค่า duty cycles สำหรับแต่ละสี
    • ใช้คลาสดังกล่าวในการเขียนโค้ด (สร้าง object จากคลาสดังกล่าวและเรียกใช้เมธอด) เพื่อสาธิตการทำงานร่วมกับฮาร์ดแวร์จริง
      1. // ###################################################################
      2.  
      3. class RGB_LED {
      4. public :
      5.   RGB_LED(int red_pin, int green_pin, int blue_pin);
      6.   void setRed(int duty_cycle);
      7.   void setGreen(int duty_cycle);
      8.   void setBlue(int duty_cycle);
      9.   void showRGB();
      10. private :
      11.   int duty_cycle_RED;
      12.   int duty_cycle_GREEN;
      13.   int duty_cycle_BLUE;
      14.   int pinRED;
      15.   int pinGREEN;
      16.   int pinBLUE;
      17. };
      18.  
      19. RGB_LED::RGB_LED(int red_pin, int green_pin, int blue_pin) {
      20.   pinMode(red_pin, OUTPUT);
      21.   pinMode(green_pin, OUTPUT);
      22.   pinMode(blue_pin, OUTPUT);
      23.   pinRED = red_pin;
      24.   pinGREEN = green_pin;
      25.   pinBLUE = blue_pin;
      26. }
      27. void RGB_LED::setRed(int duty_cycle){
      28.   duty_cycle_RED = 255 - duty_cycle;
      29.   showRGB();
      30. }
      31. void RGB_LED::setGreen(int duty_cycle) {
      32.   duty_cycle_GREEN = 255 - duty_cycle;
      33.   showRGB();
      34. }
      35. void RGB_LED::setBlue(int duty_cycle){
      36.   duty_cycle_BLUE = 255 - duty_cycle;
      37.   showRGB();
      38. }
      39. void RGB_LED::showRGB() {
      40.   analogWrite(pinRED, duty_cycle_RED);
      41.   analogWrite(pinGREEN, duty_cycle_GREEN);
      42.   analogWrite(pinBLUE, duty_cycle_BLUE);
      43. }
      44.  
      45. // ###################################################################
      46.  
      47. int SW[3] = {234};
      48. int STEP = 8;
      49. int red, green, blue = 0;
      50. int toggleRed, toggleGreen, toggleBlue = 0;
      51. RGB_LED led(9,10,11);
      52.  
      53. // ###################################################################
      54.  
      55. void printRGB(int red, int green, int blue) {
      56.   Serial.print("RED DutyCycle : ");
      57.   Serial.println(red);
      58.   Serial.print("GREEN DutyCycle : ");
      59.   Serial.println(green);
      60.   Serial.print("BLUE DutyCycle : ");
      61.   Serial.println(blue);
      62.   Serial.println("---------------------------------");
      63. }
      64.  
      65. int check(int colour, int STEP) {
      66.   colour = colour + STEP;
      67.   if (colour > 255) {
      68.     colour = 0;
      69.   }
      70.   return colour;
      71. }
      72.  
      73. // ####################################################################
      74.  
      75. void setup() {
      76.   Serial.begin(9600);
      77.   pinMode(SW[0], INPUT_PULLUP);
      78.   pinMode(SW[1], INPUT_PULLUP);
      79.   pinMode(SW[2], INPUT_PULLUP);
      80. }
      81.  
      82. void loop() {
      83.   if ((digitalRead(SW[0]) == LOW) &&(toggleRed == 0)){
      84.     toggleRed = 1;
      85.   }
      86.   else if ((digitalRead(SW[0]) == HIGH) && (toggleRed == 1)) {
      87.     toggleRed = 0;
      88.     red = check(red, STEP);
      89.     printRGB(red, green, blue);
      90.   }
      91.   if ((digitalRead(SW[1]) == LOW) &&(toggleGreen == 0)){
      92.     toggleGreen = 1;
      93.   }
      94.   else if ((digitalRead(SW[1]) == HIGH) && (toggleGreen == 1)) {
      95.     toggleGreen = 0;
      96.     green = check(green, STEP);
      97.     printRGB(red, green, blue);
      98.   }
      99.   if ((digitalRead(SW[2]) == LOW) &&(toggleBlue == 0)){
      100.     toggleBlue = 1;
      101.   }
      102.   else if ((digitalRead(SW[2]) == HIGH) && (toggleBlue == 1)) {
      103.     toggleBlue = 0;
      104.     blue = check(blue, STEP);
      105.     printRGB(red, green, blue);
      106.   }
      107.   led.setRed(red);
      108.   led.setGreen(green);
      109.   led.setBlue(blue);
      110. }

    • อ้างอิงhttp://emb2014.blogspot.com/2014/08/arduino-rgb-led.html?m=1

ไม่มีความคิดเห็น:

แสดงความคิดเห็น