HoneyBee教程入门系列-第四课-无线控制RGB LED灯 实验一 教程,无线,LED灯

上节课我们介绍了无线Blink

本节课我们将介绍无线控制RGB LEB

本节课将介绍2种方式来无线控制RGB LED



所需器材:

OCROBOT HoneyBee控制板2块

RGB LED灯一颗

220Ω电阻3颗

面包板专用跳线盒1个

面包板一块



实验一:无线串口控制RGB:

连线图

xian.png

2013-7-12 15:23 上传
(82.54 KB)



在接收端连接好RGB LED电路

DSC_9945.jpg

2013-7-9 10:40 上传
(494.92 KB)



下载接收端程序

/*
作者:swim
时间:2013年7月9日
发表地址:www.geek-workshop.com
程序说明:无线RGB接收端程序
*/
#include <ZigduinoRadio.h>
 
//定义变量
int r;
int g;
int b;
//定义输出管脚
int redPin=10;
int greenPin=9;
int bluePin=8;
//定义字符串
String comdata = "";
int numdata[3] = {0}, mark = 0;
 
void setup()
{
  ZigduinoRadio.begin(11);//设置通信通道,可从11-26,通道一致就可通信
  Serial.begin(9600);//初始化话串口
  pinMode(redPin,OUTPUT);//设置管脚为输出模式
  pinMode(greenPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
  setColor(0,0,0);//初始化LED灯为关闭
}
 
void loop()
{
  while(ZigduinoRadio.available()>0)//当无线接收到数据就执行下面程序
  {
    SerialReadVal(3);
  }
 
}
 
void setColor(int red, int green, int blue)//RGB LED调节颜色的程序
{
  analogWrite(redPin, 255-red);
  analogWrite(greenPin, 255-green);
  analogWrite(bluePin, 255-blue);  
}
 
//下面的为对接收到的数据进行处理的程序不解释
void SerialReadVal(unsigned int comdata_digit)
{
  String comdata = "";  //串口字符串传递变量
  char comdata_mark = ','; //字符串分段标志,可更改
  int comdata_mark_count = 0; //分段标志数量
  unsigned int comdata_mark_list[63]; //分段标志位置列表,最大63+1段,此三项可视实际情况增减
  unsigned int comdata_val_long[64]; //每段字串长度列表,最大64段
  String comdata_val[64]; //分段字符串列表,最大64段数据,此数组可在程序开始定义为全局变量,用于返回数据,数据可继续进行深加工
 
  //读入串口数据并赋值给传递变量
  while (ZigduinoRadio.available() > 0)
  {
    comdata += char(ZigduinoRadio.read());
    delay(2);
  }
  Serial.println(comdata);
  //确定分段标志位置,并判断输入段数是否符合给定值
  for (int i = 0; i < comdata.length(); i++)
  {
    if (comdata.charAt(i) == comdata_mark)
    {
      comdata_mark_list[comdata_mark_count] = i;
      comdata_mark_count++;
    }
  }
  for (int i = 0; i <= comdata_mark_count; i++)
  {
    if (i == 0) comdata_val_long[0] = comdata_mark_list[0];
    else if (i == comdata_mark_count) comdata_val_long[i] = comdata.length() - comdata_mark_list[i-1] - 1;
    else comdata_val_long[i] = comdata_mark_list[i] - comdata_mark_list[i-1] - 1;
  }
 
  if (comdata_mark_count < (comdata_digit - 1)) return;
 
  //按给定的段数分段
  for (int i = 0; i < comdata_digit; i++)
  {
    if (i == 0)
    {
      for (int ii = 0; ii < comdata_val_long[0]; ii++) comdata_val[i] += comdata.charAt(ii);
    }
    else
    {
      for (int ii = 0; ii < comdata_val_long[i]; ii++) comdata_val[i] += comdata.charAt(comdata_mark_list[i-1]+1+ii);
    }
  }
  for (int i = 0; i < comdata_digit; i++); //Serial.println(comdata_val[i]); // 串口监视程序运行
  b=comdata_val[2].toInt() ;
  g=comdata_val[1].toInt() ;
  r=comdata_val[0].toInt() ;
  setColor(r,g,b);
}





将发射端连接上电脑,下载发射端程序

/*
作者:swim
时间:2013年7月9日
发表地址:www.geek-workshop.com
程序说明:无线RGB发射端程序
*/
#include <ZigduinoRadio.h>
char i;
 
void setup()
{
  ZigduinoRadio.begin(11);
  Serial.begin(9600);
}
 
void loop()
{
  if (Serial.available())
  {
    ZigduinoRadio.beginTransmission();
    i=(char)Serial.read();
    ZigduinoRadio.write(i);
    ZigduinoRadio.endTransmission();
  }
}





然后打开串口监视器,可以输入三种颜色值,以逗号分隔

例如我们输入255,0,0

1.png

2013-7-9 10:51 上传
(15.12 KB)



点击发射后,可以看到LED显示红色

DSC_9950.jpg

2013-7-9 10:51 上传
(482.32 KB)



输入0,255,0

2.png

2013-7-9 10:52 上传
(14.44 KB)



显示绿色

DSC_9951.jpg

2013-7-9 10:52 上传
(439.75 KB)



输入0,0,255

3.png

2013-7-9 10:52 上传
(14.41 KB)



显示蓝色

DSC_9952.jpg

2013-7-9 10:53 上传
(461.51 KB)




是不是很简单很好玩呢,你也快来试试吧
via - 极客工坊

标签: Arduino教程