自制电子色子-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9581|回复: 7

自制电子色子

[复制链接]
发表于 2016-3-7 12:09 | 显示全部楼层 |阅读模式
本帖最后由 henrypcw 于 2016-3-7 12:12 编辑

闲来无事做了一个电子色子, 和女儿一起玩飞行棋.
所需材料如下:
1. arduino pro mini  一块
2. 倾斜开关             一个
3. 蜂鸣器                 一个
4. ws2812 LED灯     九颗

gjhgkkhjkhjl.jpg
IMG_20160307_111529.jpg

IMG_20160307_111716.jpg

IMG_20160307_111459.jpg


[mw_shl_code=cpp,true]
#include <FastLED.h>

//LED数量
#define NUM_LEDS 9
//ws2812的数据针脚
#define PIN 6
//蜂鸣器针脚
#define BeepPin 4
//倾斜开关针脚
#define inPin 9

CRGB leds[NUM_LEDS];
CRGB Dice[6][9]={{CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Red,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black},
{CRGB::Aqua,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Aqua},
{CRGB:imeGreen,CRGB::Black,CRGB::Black,CRGB::Black,CRGB:imeGreen,CRGB::Black,CRGB::Black,CRGB::Black,CRGB:imeGreen},
{CRGB::Black,CRGB::Blue,CRGB::Black,CRGB::Blue,CRGB::Black,CRGB::Blue,CRGB::Black,CRGB::Blue,CRGB::Black},
{CRGB::Black,CRGB::Green,CRGB::Black,CRGB::Green,CRGB::Green,CRGB::Green,CRGB::Black,CRGB::Green,CRGB::Black},
{CRGB::Orange,CRGB::Orange,CRGB::Orange,CRGB::Black,CRGB::Black,CRGB::Black,CRGB::Orange,CRGB::Orange,CRGB::Orange}};
boolean bb=false;
boolean AA=false;
int count=0;
int AC=0;
static unsigned long  printTime=0;
char r=0;
int runLen=0;

void setup(){
  pinMode(inPin, INPUT);
  pinMode(BeepPin, OUTPUT);
  FastLED.addLeds<WS2812B, PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(20);
  randomSeed(analogRead(A0)+millis());
  printTime=getTick(0,true);
}
void setAll(int rc,int gc,int bc){
  for(int i = 0 ; i < NUM_LEDS; i++ ){
    if(rc>=0) leds.r=rc;
    if(gc>=0) leds.g=gc;
    if(bc>=0) leds.b=bc;
  }
  FastLED.show();
}
void setI(int i,int rc,int gc,int bc){
  if(i<0||i>=NUM_LEDS) return;
  if(rc>=0) leds.r=rc;
  if(gc>=0) leds.g=gc;
  if(bc>=0) leds.b=bc;
}
void setICRGB(int i,CRGB cr){
  if(i<0||i>=NUM_LEDS) return;
  leds=cr;
}
void setAllCRGB(CRGB cr){
  for(int i = 0 ; i < NUM_LEDS; i++ ){
    leds=cr;
  }
  FastLED.show();
}
void setAllList(CRGB *cr){
  for(int i = 0 ; i < NUM_LEDS; i++ ){
    leds=cr;
  }
  FastLED.show();
}
void loop() {
  if(count>1){
    AA=true;
    printTime=getTick(0,true);
    count=0;
  }else{
    if(digitalRead(inPin)==HIGH&&!bb&&!AA){
      count++;
      bb=true;
    }else if(digitalRead(inPin)==LOW)
      bb=false;
  }
  if(AA&&getTick(printTime,false)>120){
    runLen=0;
  do{
    runLen+=random(50)+random(runLen);
    r=random(6);
    setAllList(Dice[r]);
    if(runLen<500) delay(runLen);
  }while(runLen<500);
  beep(r);
    AA=false;
    count=0;
    bb=false;
  }
}
void beep(char c){
  switch(c){
    case 0:
      beep_short(1,50,50);
    break;
    case 1:
      beep_short(2,200,20);
      break;
    case 2:
      beep_short(3,200,20);
      break;
    case 3:
      beep_short(4,100,20);
      break;
    case 4:
      beep_short(5,100,20);
      break;
    case 5:
      beep_short(1,100,200);
      break;
  }
}
void beep_short(int n,int len,int l){
  for(int j=0;j<n;j++){
    for(int i=0;i<2;i++){
      digitalWrite(BeepPin, HIGH);
      delay(l);
      digitalWrite(BeepPin, LOW);
      delay(l);
    }
    delay(len);
  }
}
unsigned long getTick(unsigned long pMMillis,boolean getNow) {
  if(getNow) return millis();
  unsigned long currentMillis = millis();
  if(currentMillis < pMMillis) {
    return (currentMillis+(4294967295 - pMMillis + 1));
  }else
    return (currentMillis-pMMillis);
}[/mw_shl_code]


发表于 2016-6-2 18:40 | 显示全部楼层
henrypcw 发表于 2016-5-30 15:11
现在工作比较忙,没时间整理呢.

电路很简单,你看看图片和程序里的脚位定义来焊接就行 ...

麻烦请教一下,焊接用到的是什么线呢,还有如果接好电路之后的话该怎么连接电源?抱歉打扰了
发表于 2016-5-30 12:06 来自手机 | 显示全部楼层
楼主求详细教程谢谢!做的超棒
 楼主| 发表于 2016-5-30 15:11 | 显示全部楼层
jackywgl 发表于 2016-5-30 12:06
楼主求详细教程谢谢!做的超棒

现在工作比较忙,没时间整理呢.

电路很简单,你看看图片和程序里的脚位定义来焊接就行
发表于 2016-6-2 18:37 | 显示全部楼层
henrypcw 发表于 2016-5-30 15:11
现在工作比较忙,没时间整理呢.

电路很简单,你看看图片和程序里的脚位定义来焊接就行 ...

求楼主帮个忙感激不尽    我是高中学生 有通技课作业 自己看不懂代码 ...靠4张图好像无法完成这个项目,您能稍微给点补充提示啊或者其他的图片之类的吗?谢谢了,抱歉您在百忙之中还要抽空来回答
发表于 2016-6-13 10:29 来自手机 | 显示全部楼层
楼主 我没有fast LED.h的文件 做不了啊 求这个文件
 楼主| 发表于 2016-6-14 10:32 | 显示全部楼层
jackywgl 发表于 2016-6-13 10:29
楼主 我没有fast LED.h的文件 做不了啊 求这个文件

fast LED库下载这附件,放到arduinoSRC/libraries目录 FastLED.zip (129.25 KB, 下载次数: 25)





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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:39 , Processed in 0.243885 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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