极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10490|回复: 5

【教程】诗朗诵定时器---从此音乐和领诵无缝对接。

[复制链接]
发表于 2014-6-5 21:48:27 | 显示全部楼层 |阅读模式
当我在进行诗朗诵配乐制作时,音乐和人的配合让我很恼火。
我于是花了3小时做了这个定时器。
这个装置是红外遥控的。
它可以以一个全彩LED的颜色变化记录排练诗朗诵的过程,可以遥控重放(以颜色变化)也可以按一个键把记录的数据通过串口发回电脑。

硬件如下:
  arduino pro mini
  红外接收头
  面包板
  共阳极全彩LED
  电阻3个(自己配吧,配到20mA)
  灯罩(选装)
  红外遥控板(3x7键盘这种)

连接如下:
   RED 9
   GRE 10
   BLUE 11
   红外 2

建议像我一样给遥控板上贴一层纸,写上字。

注:跳线是为了接电源方便

使用方法:
在这里,我把键盘按做下角为(1,1)这样叫坐标。
  1.记录:
   按键(3,5)再按最右上角的键(3,7)确认
   (按其他键返回)
   等待EEPROM清除(红》》》紫)这时按键(3,6)开始计时
   按数字1-7来定时。
  我的设置如下:
                    case 1:Serial.print("leader1  red");break;
                    case 2:Serial.print("leader2  yellow");break;
                    case 3:Serial.print("leader3  blue");break;
                    case 4:Serial.print("leader4  purple");break;
                    case 5:Serial.print("all      green");break;
                    case 6:Serial.print("boys  blue");break;
                    case 7:Serial.print("girls    white");break;
   2.重放:
   通电后按键(3,6)开始(默认为绿色)
   他就会按照上一次的重现颜色(可以当信号灯)
   3.导出:
   链接电脑后按最左上角键(1,7)
   灯变蓝,串口上会出现记录
  1.【时间】  【人】
  2.【时间】  【人】
  3.【时间】  【人】
   。。。。。。。。

ctrl+c复制进剪贴板,粘贴到文档中

你一下子就会发现合成背景音乐是多么愉快。
O(∩_∩)O谢谢

程序如下:
[pre lang="arduino" line="1" file="timer-king"]#include <EEPROM.h>

#include <IRremote.h>
#define RED 9
#define GRE 10
#define BLUE 11
#define takef(X) (256-X)

#define arrynum 80

int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN);

decode_results results;

unsigned char red=0;
unsigned char gre=0;
unsigned char blue=0;
char main_mode=0;

void upled(void){
  analogWrite(9,red);
  analogWrite(10,gre);
  analogWrite(11,blue);
}
unsigned long times;  //begin
unsigned long timen;

union data {
  int v;
  unsigned char dchar[2];
} dvalue;

/****************/
void writeint(unsigned int va,unsigned int add){
  dvalue.v = va;
  unsigned char *dpointer;
  dpointer = dvalue.dchar;
  for(int i = 0; i < 2; i++) {
    EEPROM.write(i+add,*dpointer);
    dpointer++;
  }
}
/************************/
unsigned int readint(unsigned int add){
  for(int i = 0; i < 2; i++) dvalue.dchar = EEPROM.read(i+add);
  return dvalue.v;
}
/***************/
unsigned int timeee[arrynum];
unsigned char statuse[arrynum];
unsigned int position=0;
////////////////////
void writelog(unsigned char statu)
{
  if(position>arrynum*3){
    position=arrynum*3;
          red=200;
          gre=255;
          blue=255;
          upled();
  }
  unsigned int timep=int(timen/100);
  writeint(timep,position);
  EEPROM.write(position+2,statu);
  position+=3;
}
void readlog(void)
{
  for(int i=0;i<=arrynum;i++)
  {
    timeee=readint(i*3);
    statuse=EEPROM.read(i*3+2);
  }
}
void loadled(unsigned char statu)
{
  switch(statu)
   {
      case 1:    //1
          red=0;
          gre=255;
          blue=255;
          upled();
          break;
      case 2:    //2
          red=0;
          gre=0;
          blue=255;
          upled();
          break;
       case 3:    //3
          red=255;
          gre=0;
          blue=0;
          upled();
          break;
       case 4:    //4
          red=0;
          gre=255;
          blue=0;
          upled();
          break;
       case 5:    //5
          red=255;
          gre=0;
          blue=255;
          upled();
          break;
       case 6:    //6
          red=255;
          gre=255;
          blue=0;
          upled();
          break;
       case 7:    //7
          red=60;
          gre=40;
          blue=0;
          upled();
          break;
      
    }
}

void setup()
{
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  upled();
  while(1){
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    switch(results.value)
    {
      case 0xFF906F:    //EQ
      irrecv.resume();
         main_mode=1;   //settinng
          red=0;
          gre=160;
          blue=255;
          upled();
          break;
       case 0xFFE21D:    //CH+
         if(main_mode==1){
          irrecv.resume();
          red=0;
          gre=255;
          blue=255;
          upled();
          for (int i = 0; i < 3*arrynum+3; i++)
               EEPROM.write(i, 0);
          red=0;
          gre=255;
          blue=125;
          upled();
          goto redelay;
         }
         break;
      case 0xFFC23D:    //start/stop
      irrecv.resume();
         main_mode=0;   //playing
          red=255;
          gre=0;
          blue=255;
          upled();
          readlog();
         goto start;
       case 0xFFA25D:    //CH-
      irrecv.resume();
         main_mode=0;   //playing
          red=255;
          gre=255;
          blue=0;
          upled();
          readlog();
          for(int i=0;i<=arrynum;i++)
            {   if(timeee!=0){
                Serial.println("");
                Serial.print(i);
                Serial.print("==");
                Serial.print("time:");
                int j=timeee/600;
                Serial.print(j,DEC);
                Serial.print(":");
                j=(timeee%600)/10;
                Serial.print(j,DEC);
                Serial.print(".");
                j=timeee%10;
                Serial.print(j,DEC);
                Serial.print("  person:  ");
                  switch(statuse)
                  {
                    case 1:Serial.print("leader1  red");break;
                    case 2:Serial.print("leader2  yellow");break;
                    case 3:Serial.print("leader3  blue");break;
                    case 4:Serial.print("leader4  purple");break;
                    case 5:Serial.print("all      green");break;
                    case 6:Serial.print("boys");break;
                    case 7:Serial.print("girls");break;
                    }
            }
            }
           break;
      case 0xFFFFFFFF:
           break;
       default:
         main_mode=0;   //playing
          red=0;
          gre=0;
          blue=0;
          upled();
    }
   
    irrecv.resume();
   }
  }
  redelay:;
  while(1){
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    if(results.value==0xFFC23D)   ////start/stop
      {
          red=255;
          gre=0;
          blue=255;
          upled();
        irrecv.resume();
        goto start;
      }
    irrecv.resume();
   }
  }
  start:;
  times=millis();
}

void loop() {
  timen=millis()-times;
  unsigned char status=0;
  if(main_mode==1)    //logging
  {
    if (irrecv.decode(&results))
    {
    Serial.println(results.value, HEX);
    switch(results.value)
    {
      case 0xFF30CF:    //1
      status=1;
      writelog(status);
      loadled(status);
          break;
      case 0xFF18E7:    //2
      status=2;
      writelog(status);
      loadled(status);
          break;
       case 0xFF7A85:    //3
      status=3;
      writelog(status);
      loadled(status);
          break;
       case 0xFF10EF:    //4
      status=4;
      writelog(status);
      loadled(status);
          break;
       case 0xFF38C7:    //5
      status=5;
      writelog(status);
      loadled(status);
          break;
        case 0xFF5AA5:    //6
      status=6;
      loadled(status);
      writelog(status);
          break;
        case 0xFF42BD:    //7
      status=7;
      loadled(status);
      writelog(status);
          break;
      case 0xFFFFFFFF:
          break;
       default:
          red=255;
          gre=255;
          blue=255;
          upled();
          break;
    }
    irrecv.resume(); // Receive the next value
   }
   
  }
  else if(main_mode==0)   //playing
  {
    unsigned int timeq=int(timen/100);
    if(timeee[position]==timeq)
    {
      loadled(statuse[position]);
      position++;
    }
  }
}[/code]

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2014-6-6 12:48:06 | 显示全部楼层
没看懂干什么用的。。。。
回复 支持 反对

使用道具 举报

发表于 2014-6-6 13:08:14 | 显示全部楼层
做自己爱做的事。
回复 支持 反对

使用道具 举报

发表于 2014-6-9 11:16:20 | 显示全部楼层
请问您那灯罩去哪买的????可给我链接吗???谢谢~~~
回复 支持 反对

使用道具 举报

发表于 2014-6-9 11:39:16 | 显示全部楼层
humhumhum 发表于 2014-6-9 11:16
请问您那灯罩去哪买的????可给我链接吗???谢谢~~~

那是个人体红外传感器的外壳……
回复 支持 反对

使用道具 举报

发表于 2014-6-9 12:33:51 | 显示全部楼层
friskit 发表于 2014-6-9 11:39
那是个人体红外传感器的外壳……

非常感谢~~~~~我去找找
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 03:20 , Processed in 0.048235 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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