답변 : 초음파센서+네오픽셀+서보모터+grove mp3
페이지 정보
작성자 master 작성일18-12-23 08:40 조회4,109회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-23 오전 8:45:31
// by Ok-Hyun Park
//
#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>
SoftwareSerial mp3(2,3);
//
#include <Adafruit_NeoPixel.h>
#define PIN 11
Adafruit_NeoPixel strip=Adafruit_NeoPixel(60,PIN,NEO_GRB+NEO_KHZ800);
//
#include <Servo.h>
Servo Biteservo; //servomotor 를 정의합니다.
//
const int trigPin=6,echoPin=7;
int distance=0;
//
void setup(){
pinMode(trigPin,OUTPUT); // trigPin을 출력으로
pinMode(echoPin,INPUT); // echoPin을 입력이다.
//
strip.begin(); strip.show(); // Initialize all pixels to 'off'
//
Biteservo.attach(9); //신호를 받을부분의 핀을 선정합니다.
//
Serial.begin(9600);
mp3.begin(9600);
while(!Serial);
Serial.println("Grove-Serial MP3 Demo");
Serial.println(
"Input command: \r\n\r\n"
"P[]play music by default index\r\n"
"Pm[]play music in MP3 folder by index\r\n"
"Pf[][]play music by specify folder and index\r\n"
"p Pause\r\n"
"R Resume\r\n"
"N Next\r\n"
"L Previous\r\n"
"l Loop\r\n"
"I Increase volume\r\n"
"D Decrease volumern\r\n");
delay(100);
SelectPlayerDevice(0x02); // Select SD card as the player device.
SetVolume(0x0E); // Set the volume,the range is 0x00 to 0x1E.
}
//--------------------------------------------------------------------------------------
//
unsigned long t,t_trig=0;
//
void loop(){
t=millis();
if(t-t_trig>100){ t_trig=t;
digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW);
distance=pulseIn(echoPin,HIGH)/58.2;
//Serial.print("Distance: "); Serial.print(distance); Serial.println("cm");
}
distanceneopixel_loop();
distanceservo_loop();
distancemp3_loop();
}
//----------------------서보모터 코드------------------------------
unsigned long t_servo=0;
unsigned int servo_cnt=0,pos=0;
//
void distanceservo_loop(){
if(distance<30){
if(t-t_servo>10){ t_servo=t;
if(servo_cnt<100){ } // delay(1000);
else if(servo_cnt<=280){ pos=servo_cnt-100; Biteservo.write(pos); } // for(pos=0; pos<180; pos+=1){ Biteservo.write(pos); delay(10); } //서보의 위치 0~180도 각을 정의합니다.
else if(servo_cnt<=380){ } // delay(1000);
else if(servo_cnt<=561){ pos=561-servo_cnt; Biteservo.write(pos); } // for(pos=180; pos>=1; pos-=1){ Biteservo.write(pos); delay(10); } // 180도에서 0도까지 내려갑니다.
if(++servo_cnt>561)servo_cnt=0;
}
}
else{ pos=0; servo_cnt=0; Biteservo.write(pos); Serial.println("AAAA"); } // 30 이상이면 0도로 이동
}
//----------------------네오픽셀 코드------------------------------
unsigned long t_neo=0;
unsigned int neo_cnt=0,fade=0;
//
void distanceneopixel_loop(){
if(distance<30){
if(t-t_neo>10){ t_neo=t;
if(neo_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<=256){ // for(int i=0; i<=255; i+=1)
fade=neo_cnt-1;
strip.setPixelColor(5,strip.Color(fade,255-fade,255-fade));
strip.setPixelColor(6,strip.Color(fade,255,255-fade));
}
else if(neo_cnt<=511){ // for(int i=255; i>=0; i-=1)
fade=511-neo_cnt;
strip.setPixelColor(5,strip.Color(fade,255-fade,255-fade));
strip.setPixelColor(6,strip.Color(fade,255,255-fade));
}
strip.show();
if(++neo_cnt>511)neo_cnt=0;
}
}
else{ // if(distance>30)
if(t-t_neo>10){ t_neo=t;
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));
strip.setPixelColor(4,strip.Color(255,255,0));
strip.setPixelColor(5,strip.Color(255,255,0)); strip.setPixelColor(6,strip.Color(255,255,0));
strip.setPixelColor(7,strip.Color(255,255,0)); strip.setPixelColor(8,strip.Color(255,255,0)); //초록 //노랑
strip.show();
}
}
}
//----------------------MP3 코드------------------------------
uint8_t len=0,i,recv_cmd[8];
unsigned long t_mp3=0;
bool flag=0;
//
void distancemp3_loop(){
if(distance<30){ // 거리30보다 작은 경우
if(flag==0){ flag=1; PlayResume(); }
}
else{ // if(distance>30)// 거리30보다 큰 경우
flag=0;
if(t-t_mp3>1000){ t_mp3=t; 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();
}
댓글 : 0
조회수 : 4,109
등록된 댓글이 없습니다.