极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: ent173

多彩LED水晶球

[复制链接]
发表于 2013-9-21 20:44:41 | 显示全部楼层 |阅读模式
本帖最后由 ent173 于 2013-9-22 21:03 编辑

亚克力水晶球,mega8主控,电脑蓝牙控制


内置3.7V 600mAh锂电池


供电电路和主控分离,两路供电,5V给主控,3.3V给蓝牙


供电电路和主控电路组合在一起


电池和电路组合在一起


加上水晶球支架


USB接口和开关特写


USBtinyISP通过软排线下载程序


加上水晶球熄灭的样子


水晶球发紫光的样子


代码稍后更新。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-9-22 13:10:49 | 显示全部楼层
真漂亮哦,上面放的这个水晶球儿那里有卖?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-22 21:03:29 | 显示全部楼层
绿林网页 发表于 2013-9-22 13:10
真漂亮哦,上面放的这个水晶球儿那里有卖?

淘宝 大概20元一个
回复 支持 反对

使用道具 举报

发表于 2013-9-23 17:29:56 | 显示全部楼层
做的真好,技术、艺术,这是arduino极力倡导的。
回复 支持 反对

使用道具 举报

发表于 2013-10-4 16:35:49 | 显示全部楼层
棒极了,无限遐想,干得漂亮
回复 支持 反对

使用道具 举报

发表于 2013-10-11 20:46:21 | 显示全部楼层
程序呢,也传一下啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-12 13:36:37 | 显示全部楼层
代码有bug,待完善
  1. int val[42] = {
  2.                  255, 255, 255,
  3.                  255, 0, 0,
  4.                  0, 255, 0,
  5.                  0, 0, 255,
  6.                  255, 255, 0,
  7.                  0, 255, 255,
  8.                  255, 0, 255,
  9.                  127, 255, 0,
  10.                  127, 0 , 255,
  11.                  0, 127, 255,
  12.                  255, 127, 0,
  13.                  255, 0, 127,
  14.                  0, 255, 127,
  15.                  0, 0, 0
  16.                };
  17. String data = "";
  18. boolean isComplete = false;
  19. int id[4] = {0, 0, 0};
  20. int rgb[3] = {0, 0, 0};
  21. int pins[3] = {9, 10, 11};
  22. int lts = 64;
  23. int pointer = 0;
  24. boolean isLoop = true;

  25. void setup() {
  26.   Serial.begin(9600);
  27.   fade(0);
  28. }

  29. void loop() {
  30.   if(isComplete) {
  31.     if(data.length() > 15){
  32.       clearData();
  33.     } else if(data == "clear"){
  34.       clearData();
  35.     } else if(data == "fade"){
  36.       fade(0);
  37.     } else if(data == "continue"){
  38.       fade(pointer - 3);
  39.     } else if (data == "white") {
  40.       lightIndex(0);
  41.     } else if (data == "red") {
  42.       lightIndex(1);
  43.     } else if (data == "green") {
  44.       lightIndex(2);
  45.     } else if (data == "blue") {
  46.       lightIndex(3);
  47.     } else if (data == "yellow") {
  48.       lightIndex(4);
  49.     } else if (data == "cyan") {
  50.       lightIndex(5);
  51.     } else if (data == "purple") {
  52.       lightIndex(6);
  53.     } else if (data == "black") {
  54.       lightIndex(13);
  55.     } else{
  56.       parseData(0);
  57.       parseData(1);
  58.       parseData(2);
  59.       
  60.       lightRgb(rgb[0], rgb[1], rgb[2]);
  61.     }
  62.     clearData();
  63.   }
  64. }

  65. // clear data
  66. void clearData() {  
  67.   data = "";
  68.   isComplete = false;
  69. }

  70. void serialEvent() {
  71.   while(Serial.available()){
  72.     char c = (char)Serial.read();
  73.     Serial.print(c);
  74.     if(c == ',') {
  75.       isComplete = true;
  76.     } else {
  77.       data+=c;
  78.     }
  79.     if(data.length() > 15){
  80.       data = "";
  81.       isComplete = false;
  82.     }
  83.   }
  84. }

  85. // convert rgb string to integer
  86. int parseData(int i) {
  87.   id[0] = data.indexOf('r');
  88.   id[1] = data.indexOf('g');
  89.   id[2] = data.indexOf('b');
  90.   id[3] = data.indexOf(',');
  91.   rgb[i] = data.substring(id[i] + 1, id[i + 1]).toInt();
  92.   return rgb[i];
  93. }

  94. void lightIndex(int i) {
  95.   rgb[0] = val[3*i];
  96.   rgb[1] = val[3*i + 1];
  97.   rgb[2] = val[3*i + 2];
  98.   lightRgb(rgb[0], rgb[1], rgb[2]);
  99. }

  100. // constrain rgb value and light rgb leds
  101. void lightRgb(int r, int g, int b) {
  102.   // common vcc rgb led
  103.   analogWrite(pins[0], max(0, min(255, 255 - r)));
  104.   analogWrite(pins[1], max(0, min(255, 255 - g)));
  105.   analogWrite(pins[2], max(0, min(255, 255 - b)));
  106. }

  107. void fade(int i) {
  108.   int j=i;
  109.   data = "";
  110.   while(isLoop){
  111.     j+=3;
  112.     rgb[0] = val[j];
  113.     rgb[1] = val[j + 1];
  114.     rgb[2] = val[j + 2];
  115.     for(int i=1; i<=lts; i++) {
  116.       serialEvent();
  117.       if(data == "pause") goto toPause;
  118.       lightRgb(rgb[0]*i/lts, rgb[1]*i/lts, rgb[2]*i/lts);
  119.       delay(50);
  120.     }
  121.     for(int i=lts; i>=1; i--) {
  122.       serialEvent();
  123.       if(data == "pause") goto toPause;
  124.       lightRgb(rgb[0]*i/lts, rgb[1]*i/lts, rgb[2]*i/lts);
  125.       delay(50);
  126.     }
  127.     if(j == 36)
  128.       j=0;
  129.   }
  130.   toPause:
  131.   {
  132.     isLoop == false;
  133.     pointer = j;
  134.   }
  135. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-12 14:00:04 | 显示全部楼层
操作步骤:
1.MacOS 下打开蓝牙查找设备输入密码配对(第一次需要配对)
2.打开控制台终端 (Application->Other->Terminal 应用程序->其他->终端)
3.输入sudo cu -l /dev/tty.HC-05-DevB
4.输入密码,提示connected表示成功连接
5.输入操作命令
  i. pause,  暂停,用于从渐变发光模式切换为命令控制模式
  ii. continue,  继续,从当前暂停颜色继续发光
  iii. fade, 渐变发光
  iii. r255g255b255,  rgb为颜色代码红绿蓝,后面是三色led发光数值,范围0-255
  iv. 已设定几种简单颜色,分别为white, red, green, blue, yellow, cyan, purple, black,
  v. 注意每个命令之后需要加英文逗号","
回复 支持 反对

使用道具 举报

发表于 2014-4-4 19:43:38 | 显示全部楼层
为什么用多重if而不用switch?
回复 支持 反对

使用道具 举报

发表于 2014-7-24 14:05:09 | 显示全部楼层
请教一下这个蓝牙是怎么和cheapduino连接的?什么型号的?
我最近刚刚上手cheapduino,苦于找不到也很小的蓝牙
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 19:08 , Processed in 0.044747 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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