BASIC4MCU | 질문게시판 | 아두이노 코딩 관련 질문
페이지 정보
작성자 13204 작성일2020-11-02 13:06 조회2,981회 댓글1건본문
안녕하세요. 제가 요즘 센서의 일정 거리 내에 사람이 있다면 일단 소리가 5초동안 나고 그 다음에 사람이 있으면 계속 소리가 나고 만약 사람이 없다면 소리가 안 나게 하는 코딩을 하고 있습니다. 그런데 소리가 5초동안 난 뒤에 계속 있으면 처음 나오던 노래가 계속 반복되고, 5초 뒤에 사람이 없으면 그제서야 노래 뒷부분이 나옵니다. 어떻게 해야 이 문제를 해결할 수 있을까요?
#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;
#define O_RGB_R 10
#define O_RGB_G 5
#define O_RGB_B 3
#define SD_ChipSelectPin 4
int triggerPin=7,echopin=6;
//
int sec=0;
long distance;
//
void setup(){
Serial.begin(9600);
pinMode(triggerPin,OUTPUT);
pinMode(echopin,INPUT);
pinMode(O_RGB_R, OUTPUT);
pinMode(O_RGB_G, OUTPUT);
pinMode(O_RGB_B, OUTPUT);
Serial.begin (9600);
digitalWrite(O_RGB_R, LOW);
digitalWrite(O_RGB_G, LOW);
digitalWrite(O_RGB_B, LOW);
tmrpcm.speakerPin = 9;
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized:
Serial.println("SD fail");
return;
}
tmrpcm.volume(3);
}
void writeRGB(bool R, bool G, bool B) {
digitalWrite(O_RGB_R, R);
digitalWrite(O_RGB_G, G);
digitalWrite(O_RGB_B, B);
}
//
void loop(){
digitalWrite(triggerPin,1); delayMicroseconds(10); digitalWrite(triggerPin,0);
//
distance=pulseIn(echopin,HIGH)/58; distance=distance>100?100:distance;
if(distance<100){
sec++; writeRGB(HIGH, LOW, LOW); tmrpcm.play("2220.wav");
delay(10000);
}
else{
if(sec){
if(++sec>5){sec=0; writeRGB(LOW, LOW, HIGH); tmrpcm.play("001.wav"); }
}
}
//
delay(1000);
}
댓글 1
조회수 2,981master님의 댓글
master 작성일
#include <pcmConfig.h>
#include <pcmRF.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;
#define O_RGB_R 10
#define O_RGB_G 5
#define O_RGB_B 3
#define SD_ChipSelectPin 4
int triggerPin=7,echopin=6;
//
int sec=0;
long distance;
bool flag=0; // 시작 조건은 감지안함
//
void setup(){
Serial.begin(9600);
pinMode(triggerPin,OUTPUT); pinMode(echopin,INPUT);
pinMode(O_RGB_R, OUTPUT); pinMode(O_RGB_G, OUTPUT); pinMode(O_RGB_B, OUTPUT);
digitalWrite(O_RGB_R, LOW); digitalWrite(O_RGB_G, LOW); digitalWrite(O_RGB_B, LOW);
tmrpcm.speakerPin = 9;
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is present and can be initialized:
Serial.println("SD fail");
return;
}
tmrpcm.volume(3);
}
//
void writeRGB(bool R, bool G, bool B) { digitalWrite(O_RGB_R, R); digitalWrite(O_RGB_G, G); digitalWrite(O_RGB_B, B); }
//
void loop(){
digitalWrite(triggerPin,1); delayMicroseconds(10); digitalWrite(triggerPin,0);
//
distance=pulseIn(echopin,HIGH)/58; distance=distance>100?100:distance;
if(distance<100){
sec++;
if(flag==0){ flag=1;
writeRGB(HIGH, LOW, LOW); tmrpcm.play("2220.wav");
}
}
else{
if(sec){
if(++sec>5){ sec=0; writeRGB(LOW, LOW, HIGH); tmrpcm.play("001.wav"); if(flag)flag=0; }
}
}
//
delay(1000);
}