BASIC4MCU | 질문게시판 | 아두이노 mp3모듈 관련 질문입니다!
페이지 정보
작성자 이느님 작성일2021-07-15 20:28 조회13,055회 댓글4건본문
밑에 코드에서 저렇게 거리마다 노래소리를 다르게 하고싶은데 지금은 거리를 다시 떨어뜨려도 첫번째 나오는 노래가 멈추지 않습니다. !!
#include<SoftwareSerial.h>
#include<DFPlayer_Mini_Mp3.h>
int trigPin = 8;
int echoPin = 9;
void setup() {
Serial.begin(9600);
mp3_set_serial(Serial);
delay(1);
mp3_set_volume(10);
/*Serial2.begin(9600);
mp3_set_serial(Serial2);
delay(1);
mp3_set_volume(10);
*/
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
float duration, distance;
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = ((float)(340*duration)/10000)/2;
delay(100);
if(distance <= 5)
{
mp3_play(01);
/*if(play_state1 == HIGH) {
mp3_next();
}*/
}
else if(distance > 5 & distance <= 10)
{
mp3_play(02);
/*if(play_state2 == HIGH) {
mp3_next();
}*/
}
else if(distance > 10 & distance <= 20)
{
mp3_play(03);
}
}
댓글 4
조회수 13,055master님의 댓글
master 작성일
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
10ms 딜레이를 주지말고 10us 딜레이를 사용하세요
잘 알고 있겠지만 ms와 us는 1000배 차이입니다.
master님의 댓글
master 작성일
if(distance > 5 & distance <=10)
조건식에서 많이 사용하는 논리 AND는 & 가 아니고 && 입니다.
&는 산술 AND죠
master님의 댓글
master 작성일
Serial.begin(9600);
mp3_set_serial(Serial); delay(1); mp3_set_volume(10);
우노 등에서 시리얼은 업로드 와 시리얼모니터에서 사용하므로 mp3 등 다른 용도로 사용하지 않는 것이 좋습니다.
오동작 외에 고장 위험이 있습니다.
mp3 예제를 보면 소프트웨어 시리얼을 사용한 것이 있을테니 소프트웨어 시리얼로 mp3를 변경하세요
SoftwareSerial mySerial(10,11); // RX, TX
선언 일부가 빠져있습니다.
mySerial.begin (9600); 시리얼 초기화도 해야하고
mp3 관련 코드도 mySerial로 변경해야겠죠
master님의 댓글
master 작성일
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
SoftwareSerial mySerial(10,11); // RX, TX
//
int trigPin=8,echoPin=9;
//
float duration,distance;
int mode=0;
//
void setup(){
pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT);
Serial.begin(9600);
mySerial.begin(9600); mp3_set_serial(mySerial); delay(1); mp3_set_volume(10);
}
//
void loop(){
digitalWrite(trigPin,1); delayMicroseconds(10); digitalWrite(trigPin,0);
duration=pulseIn(echoPin,1);
distance=((float)(340*duration)/10000)/2;
Serial.println(distance); // 시리얼모니터로 거리확인
delay(100);
//
if (distance <= 5){ if(mode!=1){ mode=1; mp3_play(01); } }
else if(distance <=10){ if(mode!=2){ mode=2; mp3_play(02); } }
else if(distance <=20){ if(mode!=3){ mode=3; mp3_play(03); } }
}
mode 변수를 추가해서 같은 거리 범위 구간에서는 1회만 실행 하도록 변경 했습니다.
거리값을 준 후 음의 실행이 끝난 후에 거리값을 변경 해보시고
음이 실행되는 중간에 거리값을 변경하고 싶다면 현재 실행되는 음을 강제로 끊을 수 있는 방법이 있는지도 고민해보세요