收藏官网首页
查看: 1993|回复: 24

[经验作品] 基于Arduino Pro Mimi_语音播放彩灯系统

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
发表于 2017-11-25 22:29:44 | 显示全部楼层 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
一  项目简介
      睡前给小朋友讲故事,哄自己的宝贝睡觉,已经成为很多家长的沉重负担,特别是很多女性,既要在外面拼搏,又要负责繁重的家务,好不容易想躺一下,不通情达理的心肝宝贝吵着听故事,真累!
      这款智能设备可以为您分忧解难:通过ardiuno min单片机,语音模块,RGBLED模块,机智云平台,用手机作为控制界面,随心所欲地控制一个深受小朋友喜爱的,能播放故事,音乐,还能发出五彩缤纷,变幻莫测的灯光,秒杀小主人的无理要求,让你瞬间从纠缠中解脱出来。

二   硬件准备
序号
名称
规格/型号
数量
1
主机
arduino  Pro Mimi
一台
2
从机
Arduino  Pro Mimi
一台
3
ESP826WiFi模块
ESP-12F
一个
4
语音模块
N9200B
一个
5
RGBLED彩灯模块
WS2812B  16通道
一个
6
微型音箱
8Ω/3W
一个
7
直流过滤器
5V/5A
一个
8
WiFi模式配置按钮
机械复位
一个
9
滤波电容
60V  1uF
一个
10
儿童硅胶玩具
萌宠小动物
一个
11
TF卡
1G
一个

改装前的硅胶玩具

儿童硅胶玩具

儿童硅胶玩具


改装后的语音播放彩灯系统

改装后的语音播放彩灯系统

改装后的语音播放彩灯系统


分解后的模块

肢解后的模块

肢解后的模块


完全肢解后的零部件
IMG20171123094416.png

三  软件开发环境以及工具
(1)单片机
  1)代码编辑:Notepad++
  2)编译工具:Arduino IDE
  3)烧写工具:OpenJumper
(2)固件烧写工具
ESP_DOWNLOAD_TOOL_V2.4
(3)手机测试用Demo App
   请到机智云物联网云平台下载,与本系统配置绑定后立刻可以控制体验。
IMG_2652.JPG

四  控制思路
(1)主机
  1)主机MCU1  专注与云端和从机的通信,把采集,处理后的数据发送到相应的设备。
  2)数据点  开关类:启动/停止播放或灯光,数据类型:布尔值。选项类:确定被控制对象的多项模式,数据类型:枚举。模拟类:对连续变化变量控制,数据类型:数值。详细数据内容请参阅下表:
语音彩灯控制系统数据点
显示名称
标识名
读写类型
数据类型
数值
枚举
备注
分辨率
增量
数据范围最小值
数据范围最大值
选项

开关
Switch
可写
布尔值



设备总开关
播放
Play_Pause
可写
布尔值



语音开关
播放模式
Play_Mode
可写
枚举


全部循环,单循环,随机播放
语音播放模式
播放内容
Proj_Select
可写
枚举


故事会,音乐会
播放选项
单色控制
EVENT_LED_COLOR
可写
枚举


关闭,黄色,紫色,粉色
彩灯单色控制
彩灯花样
Scene
可写
枚举


关闭,涂色效果,戏剧追逐效果,彩虹效果
彩灯花样选择
音量
Volume
可写
数值
1
0
0
30

音量控制
选曲模式
Control_Mode
可写
数值
1
0
0
40

播放顺序选择
环境温度
Temperature
只读
数值
1
-13
-13
187

备用
环境湿度
Humidity
只读
数值
1
0
0
100

备用

(2)从机
  1)语音专用模块MCU2   专注于解析从主机发来的数据包,依据自身规定的命令集,发挥语音模块丰富的功能,使用方法请参阅附件“N9200 MP3模块说明书(不带配置)v1.3”。

  2)彩灯控制器MCU3   通过开源的Adafruit_NeoPixel函数库,控制WS2812B彩灯模块发出五颜六色的绚丽光彩。
五  代码说明
(1)使用机智云的代码自动生成工具,方法请参阅bigfanofloT老师的“史上最详细的Arduino uno R3接入机智云教程”一文。

(2)主机代码
  1)WiFi配置用代码的修改
  1. void wifiStatusHandle()
  2. {
  3. //WIFI配置为SOFTAP模式
  4.   if(myGizwits.wifiHasBeenSet(WIFI_SOFTAP))
  5.   {
  6.         sd_data = 'R';//设置标志字符为“R”
  7.         Data_Send();//向从机发送点亮RGBLED红色灯指令
  8.   }
  9. //WIFI配置为AIRLINK模式
  10.   if(myGizwits.wifiHasBeenSet(WIFI_AIRLINK))
  11.   {
  12.         sd_data = 'G';//设置标志字符为“G”
  13.         Data_Send();//向从机发送点亮RGBLED绿色灯指令
  14.   }
  15. //WIFI配置成功
  16.   if(myGizwits.wifiHasBeenSet(WIFI_CON_ROUTER))
  17.   {
  18.         sd_data = 'F';//设置标志字符为“F”
  19.         Data_Send();//向从机发送关闭RGBLED灯指令
  20.   }
  21.   
复制代码
作为配置状态的显示手段,WS2812B  16通道RGBLED灯分别在SOFTAP模式时,点亮红色,AIRLINK模式时,点亮绿色,成功时关闭所有通道的灯。
2)语音模块控制代码
    语音模块的指令集比较多,这里只简单说明几个数据包如何发送,其他都大同小异,主机完整代码里面有详细的注释,请参阅为盼。下面我们根据厂家提供的N9200B语音模块的部分指令集,说明一下如何添加这部分的逻辑代码:
N9200B指令(16进制数据)
指令名称
指令代码
反码
数据长度
数据1
数据2
校验和
播放
04
FB
01
01
-
01
暂停
04
FB
01
02
-
02
上一曲
04
FB
01
04
-
04
音量控制
06
F9
02
01
VOL
04
①首先需要定义一个多维数组“unsigned char data[7] = {0,0,0,0,0,0,0};”,用于储存语音数据包。然后根据不同的指令,把16进制的数据添加到下面各个函数的数组中,其中播放,暂停,上一目录的数据都是常量,只有音量的第二组数据为变量v,由于校验和w,表示除了校验和本身之外,所有字节之和,所以校验和也成了变量w。
②然后创建播放Control_Play(),暂停Control_Pause(),上一目录Control_Back_dir()以及音量控制Control_Volume()4个函数,这样在各个逻辑代码区域就可以调用了。
  1. void Control_Play(){
  2.     unsigned char data[7] = {0x04,0xfb,0x01,0x01,0x01};//将播放数据包存进数组储存器
  3.     mySerial1.write(data,7);//将以上数据包发送到语音模块
  4.     }
  5. void Control_Pause(){
  6.     unsigned char data[7] = {0x04,0xfb,0x01,0x02,0x02}; //将暂停数据包存进数组储存器
  7.     mySerial1.write(data,7);//将以上数据包发送到语音模块
  8.     }
  9. void Control_Back_dir(){
  10.     unsigned char data[7] = {0x04,0xfb,0x01,0x12,0x12};//将上一目录数据包存进数组储存器
  11.     mySerial1.write(data,7);//将以上数据包发送到语音模块
  12.     }
  13. void Control_Volume(){
  14.     unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};//将音量数据包存进数组储存器
  15.     mySerial1.write(data,7);//将以上数据包发送到语音模块
  16.     }
复制代码
③函数的调用
   因为音乐控制需要用到变量,下面我们详细说明一下如何调用音量控制函数对音量进行控制。其他函数的调用大同小异,请举一反三,与此类推。
   (myGizwits.hasBeenSet(EVENT_Volume)),myGizwits.read(EVENT_Volume,&varR_Volume);都是机智云自动生成的代码,用于读取云端的数据,我们只管使用就行。
   上面介绍过,语音模块厂家的音量通信指令格式为(06 F9 02 01 v  w),其中,v为音量数据,厂家规定音量等级范围为(0-30),w为校验和,表示除了校验和本身之外,所有字节之和,这里我们有一个更简易的计算方法:w=v+2。下面的第9行代码就是用这个公式计算校验和的。第2-6行代码表示从云端读取音量变量 varR_Volume的数值,并存入v,当音量在规定范围内(0 <= v < 31)时,调用 Control_Volume();,注意函数内的数组unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,w};,的变量将被替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,v,(v+2)};,例如:当将手机的音量滑动条移到20等级的音量位置时,v将存入0x14的16进制数据(十进制20的HEX值),数组将替代成unsigned char data[7] = {0x06,0xf9,0x02,0x01,0x14,0x16};。    另外其他的二种状态:音量小于0时(v < 0),音量大于最大值时(v > 30)的时候,系统强制限定其回归规定范围内,数组变量替代方法以及调用的函数都大同小异,这里不再累述。
  1. //音量控制
  2.   if(myGizwits.hasBeenSet(EVENT_Volume))
  3.   {
  4.         myGizwits.read(EVENT_Volume,&varR_Volume);//Address for storing data
  5.         //收到来自云端的音量控制指令
  6.         v = varR_Volume;//将云端下发的音量数值存到V
  7.         if(0 <= v < 31)//音量在规定范围内
  8.         {
  9.   w = v + 2;//计算校验和,并将结果存入w
  10.   Control_Volume();//调用带有当前音量数值的音量控制函数
  11.   }
  12.   else if(v < 0)//音量小于0时
  13.   {
  14.   v = 0;//强制静音
  15.   w = v + 2;//计算校验和,并将结果存入w
  16.   Control_Volume();//调用带有当前音量数值的音量控制函数
  17.   }
  18.   else if(v > 30)//音量大于规定值时
  19.   {
  20.   v = 30;//强制限定到音量最大值
  21.   w = v + 2;//计算校验和,并将结果存入w
  22.   Control_Volume();//调用带有当前音量数值的音量控制函数
  23.   }
  24. }
复制代码
3)RGBLED彩灯控制
    由于彩灯运行时,CPU一直以循环的方式依次对彩灯做花样模式变换控制,非常“忙绿”,如果这时云端有数据进入,会有点应接不暇,所以我们追加了一个从机,专门负责彩灯“事务”,主机和从机都参与了对彩灯的控制,但是主机只专注于将云端的彩灯控制指令收集,分类后通过串口用字符代号转发给从机,从机利用库函数进行控制。下面我们分析主机的这部分代码。
  1. //设定彩灯花样标志
  2.   if(myGizwits.hasBeenSet(EVENT_Scene))
  3.   {
  4.     myGizwits.read(EVENT_Scene,&varR_Scene);//Address for storing data
  5.         switch(varR_Scene){
  6.     //自定义
  7.     case Scene_VALUE0:
  8.     sd_data = 'F';
  9.         Data_Send();
  10.     break;

  11.     //涂色效果
  12.     case Scene_VALUE1:
  13.         sd_data = 'W';
  14.         Data_Send();
  15.     break;

  16.     //戏剧追逐效果
  17.     case Scene_VALUE2:
  18.         sd_data = 'C';
  19.         Data_Send();
  20.     break;

  21.     //彩虹效果
  22.     case Scene_VALUE3:
  23.         sd_data = 'B';
  24.         Data_Send();
  25.     break;

  26.     //default;
  27.     //break;
  28.     }
  29.    }

  30.   //binary datapoint handle

  31.   myGizwits.process();
  32. }

  33. //发送彩灯控制数据
  34. void Data_Send(){
  35.     mySerial2.println(sd_data);
  36. }
复制代码
彩灯花样模式控制     上面代码的第1-31行,用于彩灯花样控制,varR_Scene用于读取云端彩灯场景变量值,然后通过读取的结果,调用函数。其中Scene_VALUE0-3是机智云根据数据点生成的结构体枚举数据,一共有4个,根据这4个条件,调用Data_Send();函数,分别发送F,W,C,B 4个字符代号,用于发送给从机执行“关闭,涂色效果,戏剧追逐效果和彩虹效果”等命令。
WiFi配置状态显示彩灯控制
     详细请参阅本文“1)WiFi配置用代码的修改”。
(4)从机代码
      1)语音控制模块
     模块是市售成品,没有开源资料,只有使用说明书,按照说明书提供的指令集就可以用代码控制了。
      2)彩灯控制器
      该代码充分利用当下流行的Adafruit_NeoPixel函数库,作为控制主线,读取主机串口的指令字符集,判断相关条件,添加相应代码,完成对WS2812B  16通道RGBLED彩灯模块的控制。详细代码:

彩灯花样控制代码
     花样五花百门,时间关系,我们只介绍“戏剧追逐效果”这部分的代码。
②彩灯花样函数
    “theaterChase()”是一个不断循环的三色追逐效果函数,只要不断电,就一直循环下去,除非串口收到字符“F”,循环才会中断。
  1. void theaterChase(){
  2.   Serial.println(ch);
  3.         ch = ' ';  //清空字符储存器
  4.     while(1){
  5.         theaterChase(strip.Color(127, 0, 0), 12); // 红色-指定第12号灯开始红色追逐
  6.     theaterChase(strip.Color(0,   127,   0), 12); // 绿色-指定第12号灯开始绿色追逐
  7.     theaterChase(strip.Color(  0,   0, 127), 12); // 蓝色-指定第12号灯开始蓝色追逐
  8.         ch = Serial.read();  //读取串口数据
  9.   if(ch == 'F'){
  10.         RGB_LED_Off(); //当串口收到字符“F”,脱出死循环,关闭所有通道的LED灯
  11.         break;
  12.         }
  13.   }
  14.         return;
  15. }
复制代码
③花样函数的调用
  字符:“C”是主机通过串口发过来的,在手机界面上的意思是启动“戏剧追逐效果”场景,从机收到这个字符后,会立刻调用“theaterChase();”函数,这样RGBLED彩灯就会发出绚丽夺目的光亮了。
  1. void loop() {
  2.    if(Serial.available() > 0){
  3.     ch = Serial.read();
  4. }
  5.   switch(ch){
  6. case 'C':theaterChase();break;//戏剧追逐效果

  7.    default :
  8.    break;
  9. }
  10. }
复制代码
      上面通过举例,说明了该系统的部分代码,更详细和完整的内容,请参阅附件的“ardiuno完整代码”。为方便大家分享,附件还添加了电路图,代码,模块,固件烧写包等详细资料,请查阅为盼。鉴于篇幅所限,未能提供更多的说明,这方面的教程,请参阅Genius,admin以及bigfanofloT等老师的文章,里面都有非常详细,非常实用的内容。
     感谢大家的关注,如有不妥之处,恳请批评指正。

ardiuno完整代码.zip (33.18 KB, 下载次数: 56)

GAgent_ESP826资料.zip

2.34 MB, 下载次数: 28, 下载积分: 威望 1

1

主题

12

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2018-3-20 19:56:25 | 显示全部楼层
清风duino 发表于 2018-3-20 17:03
很好!就是各种思路,只要能够快速推出就是好的方法,能够分享一下吗?
...
void rainbow(){
  Serial.println(ch);
  ch = ' ';
    while(1){
  for(uint16_t j=0; j<256; j++) {
    for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
      ch = Serial.read();
   if(ch == 'F'){
RGB_LED_Off();
return;
  }
    }
    strip.show();
    delay(20);
  }
  for(uint16_t j=0; j<256*5; j++) { // 5 cycles of all colors on wheel 在全彩色谱内循环5次
    for(uint16_t i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
         ch = Serial.read();
  if(ch == 'F'){
RGB_LED_Off();
return;
  }
    }
    strip.show();
    delay(20);
  }
   for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel 按全彩色谱转圈
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on 以三盏灯一组点亮
                ch = Serial.read();
  if(ch == 'F'){
RGB_LED_Off();
return;
  }
        }
        strip.show();
        delay(50);
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off 以三盏灯一组熄灭
        }
    }
  }
}
}


就是这样了,把函数改一下

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-4-16 11:52:38 | 显示全部楼层
爱哭的王小吹 发表于 2018-4-1 15:54
我最近做这个彩灯的时候,想要自己定义从机彩灯的颜色。不晓得如何从主机那里发送数据?就是可以自己定义从 ...

回复“如何将gokit3s和自己作的项目连接”可以使用标准的机智云宠物屋+MCU自动生成代码,修改后变为自己的项目,具体方法如下:
1)在机智云平台的开发中心,设定好需要开发的项目
2)按照数据点的内容自动生成MCU代码
3)把自动生成的代码里面的逻辑判断语句,定义的变量,复制到附件Gizwits_Examples上,并按照需要控制的对象,逐一修改逻辑代码。
4)把修改好的MCU代码连同自动生成的其他“.c”,“.h”全部更替到Gizwits_Examples里头。

为了方便使用和了解,我把整理好的标准代码以及参考用的例子打包发给您,请参考。如有不对的地方恳请指教批评。    清风。

如何将gokit3s和自己作的项目连接.zip

112.5 KB, 下载次数: 5, 下载积分: 威望 1

点评

感谢楼主,本小白基本完成了我的彩灯项目的全部制作,非常感谢楼主的分享,已经可以调节ws2812彩灯的的个性化rgb值了,现在控制部分也基本完成,但是在使用原生机智云的app来控制音乐的播放,这一点在app界面上感觉  详情 回复 发表于 2018-4-17 09:43

1

主题

12

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2018-4-17 09:43:39 | 显示全部楼层
清风duino 发表于 2018-4-16 11:52
回复“如何将gokit3s和自己作的项目连接”可以使用标准的机智云宠物屋+MCU自动生成代码,修改后变为自己 ...

感谢楼主,本小白基本完成了我的彩灯项目的全部制作,非常感谢楼主的分享,已经可以调节ws2812彩灯的的个性化rgb值了,现在控制部分也基本完成,但是在使用原生机智云的app来控制音乐的播放,这一点在app界面上感觉有点差强人意,最近在补appui界面制作的这方面知识。(app制作好难啊,写个helloworld,出现1万个错误),楼主可有优化音乐控制的界面的想法?

0

主题

6

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2017-11-27 11:13:47 | 显示全部楼层
注册成为机智云开发者,手机加虚拟设备快速开发
这个可以做产品出售了。

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2017-11-27 11:28:49 | 显示全部楼层
AK49 发表于 2017-11-27 11:13
这个可以做产品出售了。

谢谢关注

0

主题

6

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2017-11-27 11:31:51 | 显示全部楼层

这个语音模块哪里有卖的,淘宝没有。只有一个看起来质量不好。

0

主题

6

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2017-11-27 11:39:31 | 显示全部楼层
语音模块购买地址:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w11632562-16689736681.25.437e57b4uo53E2&id=42236535405

不可以发链接,请删除。谢谢!

9

主题

50

帖子

1467

积分

金牌会员

Rank: 6Rank: 6

积分
1467
QQ
发表于 2017-12-2 12:22:30 | 显示全部楼层
楼主做的超级认真,感谢分享,期待后续作品。

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2017-12-2 13:57:37 | 显示全部楼层
校园创客福利
感谢您的关注,请多多指导。

8

主题

139

帖子

3123

积分

论坛元老

Rank: 8Rank: 8

积分
3123
发表于 2017-12-30 10:11:32 | 显示全部楼层
本帖最后由 peter58 于 2017-12-30 10:29 编辑

你好下载你的程序编译了下,编译不通过是不是缺少#include <I2Cdev.h>这个库呢?请问哪里可以下载这个库,谢谢!!
找到了,已解决

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2017-12-30 22:53:49 | 显示全部楼层
感谢您的关注,有问题的话请随时联系。

8

主题

139

帖子

3123

积分

论坛元老

Rank: 8Rank: 8

积分
3123
发表于 2018-1-7 09:04:43 | 显示全部楼层
本帖最后由 peter58 于 2018-1-7 22:46 编辑

在你程序基础上把声音搞成了一个音乐频谱显示,led显示随音乐变化而变化,效果还可以;去除N9200模块,用闭路输入声音(音乐)或者用咪头都可以(开放式)都行。不过我还是用了N9200模块做的闭路音频输入,这样就可以用机智云控制,还是很好玩的。器件只用了一个ARDUINO MINI,N9200,ESP8266,这样省掉了一个ARDUINO MINI。

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-1-8 05:23:59 | 显示全部楼层
peter58 发表于 2018-1-7 09:04
在你程序基础上把声音搞成了一个音乐频谱显示,led显示随音乐变化而变化,效果还可以;去除N9200模块,用闭 ...

非常感谢您的改进和完善,方便的话请分享一下,可以吗?

8

主题

139

帖子

3123

积分

论坛元老

Rank: 8Rank: 8

积分
3123
发表于 2018-1-8 13:32:45 | 显示全部楼层
免费使用STM32、APP自动代码生成工具
清风duino 发表于 2018-1-8 05:23
非常感谢您的改进和完善,方便的话请分享一下,可以吗?

其实也就是用的你的声音处理(控制)程序,把原来控制LED的数据点去掉,只要控制声音部分的数据点,在加了个WS2812的显示代码,通过读取A的模拟信号来控制LED的显示,代码都是东拼西斗出来的,我自已也就小白一个,不好意思拿来显摆,既然你说了,我就整理下另外开个贴放上来。

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-1-9 11:41:13 | 显示全部楼层
peter58 发表于 2018-1-8 13:32
其实也就是用的你的声音处理(控制)程序,把原来控制LED的数据点去掉,只要控制声音部分的数据点,在加 ...

千万不要这样说,我们是一个共享大家庭,任何改善方案和建议都是有意义的,期待您的方案!

1

主题

12

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2018-3-11 10:16:08 | 显示全部楼层
从机里面的ws2812的彩虹效果依旧会出现“系统忙碌”的效果,就是发送了“F”,还是没有关掉当前的彩虹效果,而是等这次的彩虹效果走完才会读入“F”.然后才会灭掉灯。有什么办法可解决吗?

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-3-16 16:03:57 | 显示全部楼层
爱哭的王小吹 发表于 2018-3-11 10:16
从机里面的ws2812的彩虹效果依旧会出现“系统忙碌”的效果,就是发送了“F”,还是没有关掉当前的彩虹效果, ...

这是一个很好的问题,解决方案可以从彩虹函数各个节点读取USART的停止指令,然后退出循环,更简单的方法是用硬件RESET(复位)Arduino,但是有点“暴力”,有空我也想想更好的方案,如果您有社么好的建议,请分享,感谢您的关注。

点评

我用的是比较笨的方法了,将彩虹函数里面的3个小函数一起放到彩虹函数中,将彩虹函数直接打包成一个大函数,然后分别在,每一个小函数里面放一个‘F’的检测,这样就可以一接收到‘F’立马进行off语句,然后直接rent  详情 回复 发表于 2018-3-20 13:14

1

主题

12

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2018-3-20 13:14:00 | 显示全部楼层
清风duino 发表于 2018-3-16 16:03
这是一个很好的问题,解决方案可以从彩虹函数各个节点读取USART的停止指令,然后退出循环,更简单的方法 ...

我用的是比较笨的方法了,将彩虹函数里面的3个小函数一起放到彩虹函数中,将彩虹函数直接打包成一个大函数,然后分别在,每一个小函数里面放一个‘F’的检测,这样就可以一接收到‘F’立马进行off语句,然后直接renturn,这样就直接结束了彩虹函数。

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-3-20 17:03:59 | 显示全部楼层
校园创客福利
爱哭的王小吹 发表于 2018-3-20 13:14
我用的是比较笨的方法了,将彩虹函数里面的3个小函数一起放到彩虹函数中,将彩虹函数直接打包成一个大函 ...

很好!就是各种思路,只要能够快速推出就是好的方法,能够分享一下吗?

点评

就是这样了,把函数改一下  详情 回复 发表于 2018-3-20 19:56

5

主题

39

帖子

1859

积分

金牌会员

Rank: 6Rank: 6

积分
1859
 楼主| 发表于 2018-3-24 20:57:23 | 显示全部楼层
非常棒!谢谢您的分享,以后请多多交流指教。

1

主题

12

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2018-4-1 15:54:23 | 显示全部楼层
我最近做这个彩灯的时候,想要自己定义从机彩灯的颜色。不晓得如何从主机那里发送数据?就是可以自己定义从机的当前rgb的pwm值?我目前没想到怎么解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表