ent173 发表于 2013-9-21 20:44:41

多彩LED水晶球

本帖最后由 ent173 于 2013-9-22 21:03 编辑

亚克力水晶球,mega8主控,电脑蓝牙控制
http://v.youku.com/v_show/id_XNjExNzk4OTE2.html

内置3.7V 600mAh锂电池


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


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


电池和电路组合在一起


加上水晶球支架


USB接口和开关特写


USBtinyISP通过软排线下载程序


加上水晶球熄灭的样子


水晶球发紫光的样子


代码稍后更新。。。

绿林网页 发表于 2013-9-22 13:10:49

真漂亮哦,上面放的这个水晶球儿那里有卖?

ent173 发表于 2013-9-22 21:03:29

绿林网页 发表于 2013-9-22 13:10 static/image/common/back.gif
真漂亮哦,上面放的这个水晶球儿那里有卖?

淘宝 大概20元一个

zzzddd9000 发表于 2013-9-23 17:29:56

做的真好,技术、艺术,这是arduino极力倡导的。

jikegongfang007 发表于 2013-10-4 16:35:49

棒极了,无限遐想,干得漂亮

想飞的猫 发表于 2013-10-11 20:46:21

程序呢,也传一下啊。

ent173 发表于 2014-2-12 13:36:37

代码有bug,待完善int val = {
               255, 255, 255,
               255, 0, 0,
               0, 255, 0,
               0, 0, 255,
               255, 255, 0,
               0, 255, 255,
               255, 0, 255,
               127, 255, 0,
               127, 0 , 255,
               0, 127, 255,
               255, 127, 0,
               255, 0, 127,
               0, 255, 127,
               0, 0, 0
               };
String data = "";
boolean isComplete = false;
int id = {0, 0, 0};
int rgb = {0, 0, 0};
int pins = {9, 10, 11};
int lts = 64;
int pointer = 0;
boolean isLoop = true;

void setup() {
Serial.begin(9600);
fade(0);
}

void loop() {
if(isComplete) {
    if(data.length() > 15){
      clearData();
    } else if(data == "clear"){
      clearData();
    } else if(data == "fade"){
      fade(0);
    } else if(data == "continue"){
      fade(pointer - 3);
    } else if (data == "white") {
      lightIndex(0);
    } else if (data == "red") {
      lightIndex(1);
    } else if (data == "green") {
      lightIndex(2);
    } else if (data == "blue") {
      lightIndex(3);
    } else if (data == "yellow") {
      lightIndex(4);
    } else if (data == "cyan") {
      lightIndex(5);
    } else if (data == "purple") {
      lightIndex(6);
    } else if (data == "black") {
      lightIndex(13);
    } else{
      parseData(0);
      parseData(1);
      parseData(2);
      
      lightRgb(rgb, rgb, rgb);
    }
    clearData();
}
}

// clear data
void clearData() {
data = "";
isComplete = false;
}

void serialEvent() {
while(Serial.available()){
    char c = (char)Serial.read();
    Serial.print(c);
    if(c == ',') {
      isComplete = true;
    } else {
      data+=c;
    }
    if(data.length() > 15){
      data = "";
      isComplete = false;
    }
}
}

// convert rgb string to integer
int parseData(int i) {
id = data.indexOf('r');
id = data.indexOf('g');
id = data.indexOf('b');
id = data.indexOf(',');
rgb = data.substring(id + 1, id).toInt();
return rgb;
}

void lightIndex(int i) {
rgb = val;
rgb = val;
rgb = val;
lightRgb(rgb, rgb, rgb);
}

// constrain rgb value and light rgb leds
void lightRgb(int r, int g, int b) {
// common vcc rgb led
analogWrite(pins, max(0, min(255, 255 - r)));
analogWrite(pins, max(0, min(255, 255 - g)));
analogWrite(pins, max(0, min(255, 255 - b)));
}

void fade(int i) {
int j=i;
data = "";
while(isLoop){
    j+=3;
    rgb = val;
    rgb = val;
    rgb = val;
    for(int i=1; i<=lts; i++) {
      serialEvent();
      if(data == "pause") goto toPause;
      lightRgb(rgb*i/lts, rgb*i/lts, rgb*i/lts);
      delay(50);
    }
    for(int i=lts; i>=1; i--) {
      serialEvent();
      if(data == "pause") goto toPause;
      lightRgb(rgb*i/lts, rgb*i/lts, rgb*i/lts);
      delay(50);
    }
    if(j == 36)
      j=0;
}
toPause:
{
    isLoop == false;
    pointer = j;
}
}

ent173 发表于 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. 注意每个命令之后需要加英文逗号","

wildwolf 发表于 2014-4-4 19:43:38

为什么用多重if而不用switch?

赵敏 发表于 2014-7-24 14:05:09

请教一下这个蓝牙是怎么和cheapduino连接的?什么型号的?
我最近刚刚上手cheapduino,苦于找不到也很小的蓝牙
页: [1]
查看完整版本: 多彩LED水晶球