Processing控制彩色LED灯

公众号:STCode

1-RGB彩色LED模块简介

LED是发光二极管的简称,它是半导体二极管的一种,可以把电能转化成光能。LED灯已经大量进入人们的生活。普通的LED灯大部分是单色的,用于照明、装饰等。彩色的LED是以三原色(红、绿、蓝)按照一定比例混合出来,可以近似调出所有人眼可见光的颜色。彩色LED用于户外的大型显示屏等需要多种颜色的场合。彩色LED有贴片和直插封装两种。


2-Arduino控制LED灯亮度和颜色

控制彩色LED灯发出不同的亮度,需要采用模拟输出引脚。每个模拟输出引脚控制红、绿、蓝三种颜色中的一种,通过输出不同的电压,可以搭配出不同的颜色。Arduino的模拟输出引脚是8位的,理论上可以输出16777216种颜色。Arduino与彩色LED的接线如图所示。


3-Arduino控制RGB彩色LED代码测试

下面的代码演示了随机生成三原色混搭形成各种颜色,每种颜色延时200ms。

int Red =3;
int Green =5;
int Blue =6;void setup()
{pinMode(Red,OUTPUT);pinMode(Green,OUTPUT);pinMode(Blue,OUTPUT);
}void loop()
{analogWrite(Red,random(0,255));analogWrite(Green,random(0,255));analogWrite(Blue,random(0,255));delay(200);
}

4-Processing颜色条绘制

首先我们绘制三个颜色条,分别代表R、G、B三种颜色分量,通过颜色条的长度再映射到0~255,赋值给R、G、B三个颜色分量,就能随意组合颜色,效果如图所示。

代码如下:

int redDisplay,greenDisplay,blueDisplay;  //定义R,G,B 3个颜色分量显示的长度变量
int red,green,blue;                       //定义R,G,B三种颜色分量的值的变量void setup()
{size(700,500);
}void draw()
{background(204);rectMode(CORNER);noFill();                              //不填充颜色strokeWeight(2);                       //三个进度条的边框厚度为2个像素stroke(255,0,0);                       //描边颜色为红色rect(50,100,500,50);                   //绘制红色分量进度条的边框stroke(0,255,0);                       //描边颜色为绿色rect(50,200,500,50);                   //绘制绿色分量进度条的边框stroke(0,0,255);                       //描边颜色为蓝色rect(50,300,500,50);                   //绘制蓝色分量进度条的边框fill(red,0,0);                         //填充颜色为当前红色分量的值rect(50,100,redDisplay,50);            //以当前红色分量的长度画出进度条fill(0,green,0);                       //填充颜色为当前绿色分量的值rect(50,200,greenDisplay,50);          //以当前绿色分量的长度画出进度条fill(0,0,blue);                        //填充颜色为当前蓝色分量的值rect(50,300,blueDisplay,50);           //以当前蓝色分量的长度画出进度条fill(red,green,blue);                  //以当前R,G,B分量合成的颜色值为填充,画出一个矩形rect(300,400,50,50);
}
void mouseClicked()                         //定义一个鼠标事件
{if(mouseX<=550&&mouseX>=50)             {if(mouseY<=150&&mouseY>=100)             //当鼠标指针在该范围时,读取mouseX的值,映射到0~255,为红色颜色分量的值{red =(int)map(mouseX,50,550,0,255);redDisplay =mouseX-50;}else if(mouseY<=250&&mouseY>=200)       {green =(int)map(mouseX,50,550,0,255);greenDisplay =mouseX-50;}else if(mouseY<=350&&mouseY>=300){blue=(int)map(mouseX,50,550,0,255);blueDisplay =mouseX-50;}}
}

5-Processing调节彩色LED灯交互

Processing通过将R、G、B分量经串口发送到Arduino上面。Arduino经过处理数据,将R、G、B各分量传送到R、G、B彩色LED模块,就能实现颜色的改变。

Processing端代码:

import processing.serial.*;
Serial port =new Serial(this,"COM10",9600);
int redDisplay,greenDisplay,blueDisplay;
int red,green,blue;
String strRed,strGreen,strBlue;
String message;void setup()
{size(700,500);
}void draw()
{background(204);frame();                                  //绘制进度条边框RGBDisplay();                             //绘制进度条sendMessage();}
void frame()                                 //绘制进度条边框函数
{rectMode(CORNER);noFill();stroke(255,0,0);strokeWeight(2);rect(50,100,500,50);stroke(0,255,0);rect(50,200,500,50);stroke(0,0,255);rect(50,300,500,50);
}
void RGBDisplay()                            //绘制进度条函数
{rectMode(CORNER);noStroke();fill(red,0,0);rect(50,100,redDisplay,50);fill(0,green,0);rect(50,200,greenDisplay,50);fill(0,0,blue);rect(50,300,blueDisplay,50);fill(red,green,blue);rect(300,400,50,50);fill(0);rect(400,400,50,50);
}void mouseClicked()                           //单击鼠标事件,改变现实的进度条,同时更新R,G,B各分量的值
{if(mouseX<=550&&mouseX>=50){if(mouseY<=150&&mouseY>=100){red =(int)map(mouseX,50,550,0,255);redDisplay =mouseX-50;}if(mouseY<=250&&mouseY>=200){green =(int)map(mouseX,50,550,0,255);greenDisplay =mouseX-50;}if(mouseY<=350&&mouseY>=300){blue =(int)map(mouseX,50,550,0,255);blueDisplay =mouseX-50;}if(mouseX<=450&&mouseX>=400)if(mouseY>=400&&mouseY<=450){shut();                             //当鼠标在该区域单击时,关闭LED灯}}
}void sendMessage()                         //定义发送数据函数
{strRed =red+"";                          //将red分量转换为字符串类型if(red<100)                              //当red分量小于100时,将red转换为字符串,并且在前面加上字符0strRed ="0"+red;if(red<10)                               //当red分量小于10时,将red转换为字符串,并且在前面加上字符00strRed="00"+red;strGreen =green+"";if(green<100)strGreen="0"+green;if(green<10)strGreen="00"+green;strBlue =blue+"";if(blue<100)strBlue ="0"+blue;if(blue<10)strBlue="00"+blue;message ='a'+strRed+strGreen+strBlue+'s';   //将R,G,B各分量连接为字符串,通过串口发送到Arduinoprintln(message);port.write(message);
}void shut()                                  //定义关闭LED灯函数
{redDisplay =0;                             greenDisplay =0;blueDisplay =0;red =0;green =0;blue =0;
}

Arduino端代码:

int redpin = 3;
int greenpin = 5;
int bluepin = 6;
char charbuf[20];
int color[3];
void setup()
{Serial.begin(9600);pinMode(redpin,OUTPUT);pinMode(greenpin,OUTPUT);pinMode(bluepin,OUTPUT);
}void loop()
{while(Serial.available()>0){Serial.readBytesUntil('s',charbuf,20);if(charbuf[0] == 'a'){color[0] = 100*(charbuf[1]-'0') + 10*(charbuf[2]-'0') + charbuf[3]-'0';color[1] = 100*(charbuf[4]-'0') + 10*(charbuf[5]-'0') + charbuf[6]-'0';color[2] = 100*(charbuf[7]-'0') + 10*(charbuf[8]-'0') + charbuf[9]-'0';}analogWrite(redpin,color[0]);analogWrite(greenpin,color[1]);analogWrite(bluepin,color[2]);}}

​ 颜色条

​ RGB灯效果

Processing控制彩色LED灯相关推荐

  1. 全彩色LED灯带中应用到的LED炫彩灯

    全彩色LED灯带:所谓LED全彩灯带便是指把LED组装在带状的FPC柔性线路板或PCB硬板上,因其产品形状象一条带子而得名.全彩色LED灯带和幻彩跑马灯条都可控制单灯跑马.流水.开窗.流星追尾.追逐等 ...

  2. 树莓派 | threading01 - 创建两个子线程同时运行,两个线程各负责控制一个LED灯以不同的频率闪烁

    文章目录 一.前言 二.代码 三.运行 一.前言 Python | threading01 - 创建两个同时运行的子线程 上一次使用了python的多线程库threading创建了两个同时运行的子线程 ...

  3. 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程

    第一课,了解单片机及单片机的控制原理和DX516 的用法,控制一个LED 灯的亮和灭 本章学习内容: 单片机基本原理,如何使用DX516 仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC5 ...

  4. AT89C52利用定时器控制单个led灯闪烁

    AT89C52利用定时器控制单个led灯闪烁 keil芯片选择AT89C52 新建一个.c文件,将代码拷贝进去,然后保存. 然后将保存的.c文件加载到工程项目里面去. 设置好生产hex文件,就可以编译 ...

  5. 实例2:树莓派GPIO控制外部LED灯闪烁

    实例2:树莓派GPIO控制外部LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派. 通过树莓派GPIO操作的学习,熟悉GPIO的读写控制. 通过 ...

  6. python自动化控制arduino_LattePandaAI-Python控制Arduino LED灯

    本帖最后由 铁甲小宝 于 2020-9-3 17:58 编辑 LattePanda&AI-Python控制Arduino LED灯 概述 --------------------------- ...

  7. arduinows2812灯条程序_Arduino 控制WS2812 LED灯条

    传统的LED限制总是很多,比如需要很多的引脚.所以有一种很好的解决方案是用灯条.理论上这种灯条可以通过通讯,用一根数据总线可以控制达到无上限个数的RGB-LED灯珠,并且在数量在1024以下时,延迟是 ...

  8. 了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮

    学习内容 单片机基本原理, 如何使用 DX516 仿真器, 如何编程点亮和灭掉一个 LED 灯, 如何进入 KEILC51uV, 调试环境, 如何使用单步,断点,全速,停止的调试方法. ------- ...

  9. LabVIEW控制Arduino LED灯闪烁(基础篇—2)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的数字I/O函数库,通过LabVIEW控制Arduino Uno控制板上D13管脚上LED灯,实现等间隔闪烁. ...

最新文章

  1. SAP WM 物料主数据里的Palletization Data
  2. python No migrations to apply
  3. linux下find命令用法
  4. android4.2添加重启菜单项
  5. python3随记——字符编码
  6. 【Protocol Buffer】Protocol Buffer入门教程(八):Windows平台部署Protobuf环境
  7. Hadoop之MapReduce入门
  8. 倒排索引原理_搜索引擎都在用的倒排索引——原理与实现
  9. leetcode 17. 电话号码的字母组合 思考分析
  10. JS如何判断安卓还是iOS 一种比较被认同的方式
  11. HighCharts入门
  12. 【渝粤教育】广东开放大学 中国文化文学通论 形成性考核 (25)
  13. Oracle安装步骤(自用)
  14. 联想服务器怎么备份系统软件,联想电脑管家备份电脑驱动程序教程
  15. cocos2dx的64位安卓包spine读取atlas失败
  16. DEV gridview数据筛选
  17. 计算机优秀大学生,[最新]优秀计算机大学生毕业自我鉴定精选
  18. 获取贵州茅台2010年1月1号至今的股票交易数据,计算该股票历史数据的5日均线和30日均线
  19. 贴片电解电容正负极区分
  20. 远程桌面链接怎么用(win10电脑远程桌面连接工具怎么使用)

热门文章

  1. 省市县插件PCASClass.js的基本使用方法
  2. 汇总:1. Java基本功
  3. HTML5学习资料推荐
  4. 计算机考试没考好的检讨书,考试没考好检讨书范文(精选5篇)
  5. 常见的两种注意力机制
  6. Office2016的PPT放映幻灯片放映卡死解决方法
  7. 利用GPU并行计算beta-NTI,大幅减少群落构建计算时间
  8. C# 控制台使用 UAC 权限
  9. 华尔街日报中文网络版
  10. Minecraft 1.18.2 生化8 模组 1.1版本 生化维度开启