查看: 3964|回复: 1

Arduino连接RGB三色led灯

[复制链接]
  • TA的每日心情
    开心
    2017-12-29 15:29
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-10-21 17:27:43 | 显示全部楼层 |阅读模式
    分享到:
    RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

    常用的RGB LED有贴片和插件2种封装,插件的直接可以在面包板上实验,贴片的一板需要做成模块,引出插针。
    RGB-LED_1-1.jpg
    下面的程序使用共阴LED验证,GND接主板GND或者把任意1个数字端口设置为LOW作为负极(LED耗电流较小)。其他的三个引脚分别接到PWM引脚。
    以下程序12脚作为公共端,9,10,11分别接三种颜色。不同的适配板接口定义不同,请自行更改。
    1. 通过串口软件写入对应的数据,格式如下:r,g,b,然后加入回车键
    2. r代表红色,范围是0-255,g代表绿色,范围是0-255,b代表蓝色,范围是0-255
    3. 系统会处理相应的数据并返回相应的值到串口,通过写入不同的数据可以实现
    4. 三色led灯的调光变色功能。
    5.   The circuit:
    6. * led的3个脚连接到9,10,11脚
    7. * 阳极连接到VCC
    8. 通过PWM功能进行调光,实现3种颜色混合显示
    9. */String inString = "";    // 字符串缓冲区
    10. int currentColor = 0;
    11. int red, green, blue = 0;
    12. int COM = 12;
    13. //初始化
    14. void setup() {
    15.   // 打开串口通讯功能等待串口打开
    16.   Serial.begin(9600);
    17.   while (!Serial) {
    18.     ; // wait for serial port to connect. Needed for Leonardo only
    19.   }  // 发送信息
    20.   Serial.println("\n\nString toInt() RGB:");
    21.   Serial.println();
    22.   // 设置led端口方向:
    23.   pinMode(9, OUTPUT);
    24.   pinMode(10, OUTPUT);
    25.   pinMode(11, OUTPUT);
    26.   pinMode(12, OUTPUT);
    27.   digitalWrite(12, LOW);
    28.   //12 pin as gnd
    29.   // 打开13脚led作为电源指示:
    30.   pinMode(13, OUTPUT);
    31.   digitalWrite(13, HIGH);
    32. }
    33. //主循环
    34. void loop() {
    35.   int inChar;  // 读取串口发送的信息:
    36.   if (Serial.available() > 0) {
    37.     inChar = Serial.read();
    38.   }  if (isDigit(inChar)) {
    39.     // 把读取的1个字节变换成字符类型,并添加到字符串中
    40.     inString += (char)inChar;
    41.   }  // 如果遇到逗号,转换数据,并设置相应的颜色,把对应的计数值加1
    42.   if (inChar == ',') {
    43.     // 根据读取到的计数值处理不同的颜色数据
    44.     switch (currentColor) {
    45.     case 0:    // 0 = red 表示红色
    46.       red = inString.toInt();
    47.       // 把字符串情况,等待处理下一个
    48.       inString = "";
    49.       break;
    50.     case 1:    // 1 = green:表示绿色
    51.       green = inString.toInt();
    52.       // 把字符串情况,等待处理下一个
    53.       inString = "";
    54.       break;
    55.     }
    56.     currentColor++;
    57.   }
    58.   // 如果输入的是回车符号,就是最后一个数据
    59.   if (inChar == '\r') {
    60.     blue = inString.toInt();    // 写入对应的PWM值
    61.     analogWrite(11,  255 - red);
    62.     analogWrite(9, 255 - green);
    63.     analogWrite(10, 255 - blue);    // 打印对应的数据到串口
    64.     Serial.print("Red: ");
    65.     Serial.print(red);
    66.     Serial.print(", Green: ");
    67.     Serial.print(green);
    68.     Serial.print(", Blue: ");
    69.     Serial.println(blue);    // 清空字符串缓冲区,等待下一次处理数据
    70.     inString = "";
    71.     // 复位当前颜色的计数值
    72.     currentColor = 0;
    73.   }}
    复制代码
    把代码改成如下模式,直接可以使用贴片RGB模块实验,直插模式,0代表灭,255代表完全点亮。
    1.     // 写入对应的PWM值
    2.     analogWrite(9,  red);
    3.     analogWrite(10, green);
    4.     analogWrite(11, blue);
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-10-24 15:07:07 | 显示全部楼层
    不错。        
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 16:27 , Processed in 0.111091 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.