BASIC4MCU | 질문게시판 | 아두이노 코딩 질문입니다.
페이지 정보
작성자 기하문주 작성일2020-06-05 22:25 조회2,816회 댓글0건본문
#define BUTTON 2
#define BUTTON1 3
#define Echo 7
#define Trig 8
#define RED 11
#define GREEN 9
#define BLUE 10
#define speakerPin 12
#define LED 6
int length = 28;
char notes[] = "GGAGcB GGAGdc GGxecBA yyecdc";
int beats[] = { 2, 2, 8, 8, 8, 16, 1, 2, 2, 8, 8,8, 16, 1,
2,2,8,8,8,8,16, 1,2,2,8,8,8,16 };
int tempo = 500;
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = {'C', 'D', 'E', 'F', 'G', 'A', 'B',
'c', 'd', 'e', 'f', 'g', 'a', 'b',
'x', 'y' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014,
956, 834, 765, 593, 468, 346, 224,
655 , 715 };
int SPEE = 5;
for (int i = 0; i < 17; i++) {
if (names[i] == note) {
int newduration = duration/SPEE;
playTone(tones[i], newduration);
}
}
} // 소리
void setup(){
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
pinMode(speakerPin, OUTPUT);
}
void loop(){
int a = 0;
int BNT2 = digitalRead(2); //작동
int BNT3 = digitalRead(3); //중지
int R = analogRead(A0);
int speed = map(R, 0, 1023, 0, 255);
int J = analogRead(A1);
int light = map(J, 0, 1023, 0, 100);
int count=0;
if(BNT2==HIGH){
count++;}
while(!count==0){
int BNT2 = digitalRead(2);
int BNT3 = digitalRead(3);
int R = analogRead(A0);
int speed = map(R, 0, 1023, 0, 255);
int J = analogRead(A1);
int light = map(J, 0, 1023, 0, 100);
int i;
digitalWrite(Trig, LOW); //트리거 초기화
digitalWrite(Echo, LOW); //에코 초기화
delayMicroseconds(2); //잠시 대기
digitalWrite(Trig, HIGH); //트리거 on 초음파 발사
delayMicroseconds(50); //충분한(초음파가 다시 돌아올) 시간동안 대기
digitalWrite(Trig, LOW); //트리거 초기화
unsigned long duration1 = pulseIn(Echo, HIGH);
float distance = ((float)(340 * duration1) / 10000) / 2;
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
if(distance < 100){
analogWrite(RED, 255);
}else if(distance < 200){
analogWrite(GREEN, 255);
}else if(distance < 300){
analogWrite(BLUE, 255);
}
if(light<25){
digitalWrite(6,HIGH);
}else{
digitalWrite(6,LOW);
}
analogWrite(5,speed);
analogWrite(4,10);
if(digitalRead(BUTTON) == HIGH){
for (int i = 0; i < length; i++) {
if (notes[i] == ' ') {
delay(beats[10*i] * tempo); // rest
}
else {
playNote(notes[i], beats[i]/5 * tempo);
}}
}// 소리
if(BNT3 == HIGH){
/*noTone(speakerPin);*/ // <<< 이상...
count=0;}
}
analogWrite(5,0);
analogWrite(4,0);
}
이렇게 코딩을 해봤는데요
버튼을 누르면 시작하게 끔 설정했느데 버튼을 누르면 피에조 스피커에서 소리가 끝나고 반응을 하는데
그래서 소리를 중간에 끄려고 밑에 noTone 코딩을 추가했는데 noTone 코딩을 넣으면 1초뒤에 소리가 사라지고 나머지 코딩도 오작동하는것 같습니다.. 혹시 noTone을 넣지 않고 노래하는도중에 끊는 버튼을 누르면 멈추게 할 수 있는 방법이 있나요??...
댓글 0
조회수 2,816등록된 댓글이 없습니다.