BASIC4MCU | 질문게시판 | 답변 : 답변 : 손문일
페이지 정보
작성자 master 작성일2019-01-22 16:24 조회2,926회 댓글0건본문
//
#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>
SoftwareSerial mp3(2,3);
//
#include <Adafruit_NeoPixel.h>
#define PIN 12
Adafruit_NeoPixel strip=Adafruit_NeoPixel(60,PIN,NEO_GRB+NEO_KHZ800);
//
int v_cnt=0;
//
void setup(){
mp3.begin(9600);
SelectPlayerDevice(0x02); // Select SD card as the player device.
SetVolume(0x0E); // Set the volume,the range is 0x00 to 0x1E.
//
strip.begin(); strip.show(); // Initialize all pixels to 'off'
//
Serial.begin(9600); while(!Serial);
delay(100);
}
//--------------------------------------------------------------------------------------
//
uint8_t len=0,i,recv_cmd[8];
unsigned long t_mp3=0,t;
//
bool flag=0;
bool n_flag=0,m_flag=0,l_flag=0,mp3_flag=0; //--------------------------------//
//
void loop(){
t=millis();
if(digitalRead(13)){ // main 코드에서 불러옴(거리30보다 작은 경우)
if(flag==0){ flag=1;
n_flag=1; m_flag=1; l_flag=1; mp3_flag=1; //--------------------------------//
mp3.begin(9600); SelectPlayerDevice(0x02); v_cnt=0x0E; SetVolume(v_cnt); PlayResume();
}
}
else{ // if(distance>30)// 거리30보다 큰 경우------------------------------------------------------//
flag=0;
}
//
distanceneopixel_loop(); distancemp3_loop(); distancetriple_loop();
}
//---------------------------------------------------------------------------------------------
//
void distancemp3_loop(){
if(digitalRead(13)==0){
if(mp3_flag){
if(t-t_mp3>1000){ t_mp3=t;
if(--v_cnt==0){ mp3_flag=0; }
DecreaseVolume(); // 1초마다 볼륨 점점 작게
}
}
}
//
if(Serial.available()){
char chr=Serial.read(); // Serial.print(chr);
if(chr=='\n'){
switch(recv_cmd[0]){
case 'P':{
if(recv_cmd[1]=='m'){ /***Play music in "MP3" folder by index*example:*"Pm1"->./MP3/0001.mp3*/
PlayMP3folder(recv_cmd[2]-'0');
Serial.print("Play "); Serial.write(recv_cmd[2]); Serial.println(".mp3 in MP3 folder");
}
else if(recv_cmd[1]=='f'){ /***Play specify folder and music*example:*"Pf11"->./01/001***.mp3*/
SpecifyfolderPlay(recv_cmd[2]-'0',recv_cmd[3]-'0');
Serial.print("Play "); Serial.write(recv_cmd[3]); Serial.print("xxx.mp3"); Serial.print(" in folder "); Serial.write(recv_cmd[2]); Serial.println();
}
else{ /***Play music by default index*example:*"P1"->./***.mp3*/
SpecifyMusicPlay(recv_cmd[1]-'0');
Serial.print("Play xxx.MP3 by index "); Serial.write(recv_cmd[1]); Serial.println();
}
// Serial.println("Specify the music index to play");
break;
}
case 'p': PlayPause(); Serial.println("Pause the MP3 player"); break;
case 'R': PlayResume(); Serial.println("Resume the MP3 player"); break;
case 'N': PlayNext(); Serial.println("Play the next song"); break;
case 'L': PlayPrevious(); Serial.println("Play the previous song"); break;
case 'l': PlayLoop(); Serial.println("Play loop for all the songs"); break;
case 'I': IncreaseVolume(); Serial.println("Increase volume"); break;
case 'D': DecreaseVolume(); Serial.println("Decrease volume"); break;
}
//
len=0;
}
else{ recv_cmd[len++]=chr; }
}
// printReturnedData();
}
//---------------------------------------------------------------------------------------------
unsigned long t_neo=0;
unsigned int neo_cnt=0,fade=0,c0_cnt=0,c1_cnt=0,c2_cnt=0,c3_cnt=0;
//
void distanceneopixel_loop(){
if(n_flag){
if(t-t_neo>50){ t_neo=t;
if(neo_cnt<=255){
if(++c0_cnt>=1){ c0_cnt=0;
fade=neo_cnt;
strip.setPixelColor(5,strip.Color(0,0,fade));
strip.setPixelColor(0,strip.Color(0,0,fade));
strip.setPixelColor(1,strip.Color(0,0,fade));
strip.setPixelColor(2,strip.Color(0,0,fade));
strip.setPixelColor(3,strip.Color(0,0,fade));
strip.setPixelColor(4,strip.Color(0,0,fade));
strip.setPixelColor(5,strip.Color(0,0,fade));
strip.setPixelColor(6,strip.Color(0,0,fade));
strip.setPixelColor(7,strip.Color(0,0,fade));
strip.setPixelColor(8,strip.Color(0,0,fade));
}
}
else if(neo_cnt==256){
if(++c1_cnt>=1){ c1_cnt=0;
strip.setPixelColor(0,strip.Color(0,50,255));
strip.setPixelColor(1,strip.Color(0,100,255));
strip.setPixelColor(2,strip.Color(0,150,255));
strip.setPixelColor(3,strip.Color(0,200,255));
strip.setPixelColor(4,strip.Color(0,255,255));
strip.setPixelColor(5,strip.Color(0,255,255));
strip.setPixelColor(6,strip.Color(0,255,255));
strip.setPixelColor(7,strip.Color(0,255,255));
strip.setPixelColor(8,strip.Color(255,255,0)); //초록 //노랑
}
}
else if(neo_cnt<=511){ // for(int i=255; i>=0; i-=1)
if(++c2_cnt>=1){ c2_cnt=0;
fade=neo_cnt-256;
strip.setPixelColor(5,strip.Color(fade,255-fade,255-fade));
strip.setPixelColor(6,strip.Color(fade,255,255-fade));
}
}
else{ // if(neo_cnt<=767)
if(++c3_cnt>=1){ c3_cnt=0;
fade=767-neo_cnt;
strip.setPixelColor(5,strip.Color(fade,255-fade,255-fade));
strip.setPixelColor(6,strip.Color(fade,255,255-fade));
}
}
//
if(++neo_cnt>767){ neo_cnt=0; //-----------------------------------------//
if(digitalRead(13)==0){ n_flag=0;
strip.setPixelColor(0,strip.Color(255,50,0));
strip.setPixelColor(1,strip.Color(255,100,0));
strip.setPixelColor(2,strip.Color(255,150,0));
strip.setPixelColor(3,strip.Color(255,200,0));
for(int z=4;z<=8;z++)strip.setPixelColor(z,strip.Color(255,255,0)); //초록 //노랑
}
}
strip.show();
}
}
}
//---------------------------------------------------------------------------------------------
int fadingRGB_ledPin[3]={5,6,9}; // 핀 위치(G R B)
int fadeRGBValue[3]={0,0,0}; // 0부터 밝기 시작
int fadeRGBDir[3]={ 1,1,1}; // Led를 밝게함.0으로하면 처음에 꺼져있는듯...
unsigned long fadingRGB_previousMillis[3]={0,}; // millis 함수
unsigned long fadingRGB_interval[3]={120,120,120}; // 작업 간격
//
void distancetriple_loop(){
unsigned long currentMillis=millis();
if(l_flag){
for(int i=0; i<3; i++){ //아래 millis 함수의 i에 해당
if(currentMillis-fadingRGB_previousMillis[i]>=fadingRGB_interval[i]){
fadingRGB_previousMillis[i]=currentMillis;
if(fadeRGBDir[i]==1){ // led를 밝게함
if(fadeRGBValue[i]<=255){
fadeRGBValue[i]+=5; if(fadeRGBValue[i]>255){ fadeRGBValue[i]=255; fadeRGBDir[i]=0; }
}
}
else{
if(fadeRGBValue[i]>0){
fadeRGBValue[i]-=5;
if(fadeRGBValue[i]<=0){ fadeRGBValue[i]=0; fadeRGBDir[i]=1;
if(digitalRead(13)==0){ l_flag=0; }
}
}
}
if(i==1)analogWrite(fadingRGB_ledPin[i],fadeRGBValue[i]/4);
else analogWrite(fadingRGB_ledPin[i],fadeRGBValue[i]);
}
}
}
}
댓글 0
조회수 2,926등록된 댓글이 없습니다.