|
|
当我在进行诗朗诵配乐制作时,音乐和人的配合让我很恼火。
我于是花了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
|