BASIC4MCU | 질문게시판 | 초음파센서+네오픽셀+서보모터+grove mp3
페이지 정보
작성자 손문일 작성일2018-12-20 23:04 조회12,170회 댓글5건첨부파일
본문
안녕하세요. 마스터님
그동안 코드 정리를 해보았습니다.
코드 설명 =
초음파 센서에
네오픽셀+서보모터+GROVE MP3
파일 설명 =
초음파센서+네오픽셀
초음파센서+서보모터
초음파센서+GROVE MP3
각 각 파일로 압축해서 넣었습니다. (추가로 GROVE mp3 라이브러리도 포함)
도움을 구하고자하는 부분=
3개의 코드가 서로 합쳐져서 각자 독립적으로 움직이는 코드가 필요합니다.
초음파 센서의 값에 따라 모터와 네오픽셀 mp3가 서로 독립적으로 간섭 없이 작동이 되어야 합니다.
아래는 위 사항대로 시도해본 에러가 있는 슈퍼 루프 구조 입니다. TT..TT
감사합니다.
#include <Adafruit_NeoPixel.h>
#define PIN 11
Adafruit_NeoPixel strip=Adafruit_NeoPixel(60,PIN,NEO_GRB+NEO_KHZ800);
//
const int trigPin = 6;
const int echoPin = 7;
long duration;
int distance;
//
#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>
static uint8_t recv_cmd[8] = {};
SoftwareSerial mp3(2, 3);
//
#include <Servo.h>
Servo Biteservo; //servomotor 를 정의합니다.
int pos = 0; //서보 모터의 시작 지점을 선정합니다.
//
void setup() {
pinMode(trigPin, OUTPUT); // trigPin을 출력으로
pinMode(echoPin, INPUT); // echoPin을 입력이다.
Serial.begin(9600);
distanceneopixel_setup();
distancemp3_setup();
distanceservo_setup();
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
delay(1000);
distanceneopixel_loop();
distanceservo_loop();
}
void distanceneopixel_setup(){
strip.begin();
strip.show(); // Initialize all pixels to 'off'
void distanceneopixel_loop();{
if(distance<30){
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)); //노랑
strip.show(); delay(10);
for(int i=0; i<=255; i+=1){
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(i,255-i,255-i));
strip.setPixelColor(6,strip.Color(i,255,255-i));
strip.setPixelColor(7,strip.Color(0,255,255)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10);
}
for(int i=255; i>=0; i-=1){
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(i,255-i,255-i));
strip.setPixelColor(6,strip.Color(i,255,255-i));
strip.setPixelColor(7,strip.Color(0,255,255)); //초록
strip.setPixelColor(8,strip.Color(255,255,0)); //노랑
strip.show(); delay(10);
}
}
else if(distance>30){
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(); delay(10);
}
}
//
void distancemp3_setup(){
mp3.begin(9600);
Serial.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.
}
if(distance<30){ //거리30보다 작은 경우
IncreaseVolume(); // 볼륨을 크게 하면서
PlayResume();} // 뮤직 스타트
if(distance>30){ //거리30보다 큰 경우 볼륨 점점 작게
DecreaseVolume(); // 아두이노에 무리가 안가는지 궁금
}
uint8_t len = 0;
uint8_t i;
if(Serial.available())
{
char chr = '\0';
while(chr != '\n') // Blockly read data from serial monitor
{
chr = Serial.read();
// Serial.print(chr);
recv_cmd[len++] = chr;
}
}
if(len > 0)
{
// Print reveiced data
// Serial.print("Received cmd: ");
// for(i = 0; i < len; i++) {
// Serial.print(recv_cmd[i]);
// Serial.print(" ");
// }
// Serial.println();
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;
default:
break;
}
// clean data buffer
for(i = 0; i < sizeof(recv_cmd); i++) {
recv_cmd[i] = '\0';
}
}
delay(100);
// printReturnedData();
}
void distanceservo_setup() {
Biteservo.attach(9); //신호를 받을부분의 핀을 선정합니다.
}
void distanceservo_loop() {
if(distance<30){
delay(1000);
for(pos = 0; pos < 180; pos+=1) //서보의 위치 0~180도 각을 정의합니다.
{
Biteservo.write(pos);
delay(10);
}
delay(1000);
for(pos = 180; pos >= 1; pos-=1) // 180도에서 0도까지 내려갑니다.
{
Biteservo.write(pos);
delay(10);
}
}
}
댓글 5
조회수 12,170master님의 댓글
master 작성일현재 잘 안되는 부분이 어떤 것들이 있나요?
손문일님의 댓글
손문일 작성일
지금 현재 저 코드가 에러가 나요...
C:\Users\sonmunil\Documents\Arduino\2018_12_20_copulation\2018_12_20_copulation.ino: In function 'void setup()':
2018_12_20_copulation:26:21: error: 'distancemp3_setup' was not declared in this scope
distancemp3_setup();
^
C:\Users\sonmunil\Documents\Arduino\2018_12_20_copulation\2018_12_20_copulation.ino: In function 'void loop()':
2018_12_20_copulation:44:25: error: 'distanceneopixel_loop' was not declared in this scope
distanceneopixel_loop();
^
C:\Users\sonmunil\Documents\Arduino\2018_12_20_copulation\2018_12_20_copulation.ino: In function 'void distanceneopixel_setup()':
2018_12_20_copulation:106:25: error: a function-definition is not allowed here before '{' token
void distancemp3_setup(){
^
exit status 1
'distancemp3_setup' was not declared in this scope
코드 에러는 이렇게 표시되네요.
손문일님의 댓글
손문일 작성일
첨부 파일에 3개의 코드가 있습니다.
3개의 코드를 합치고 각 각 독립적으로 작동되게 하려고 슈퍼루프 구조로 짰는데 안되네요..
master님의 댓글
master 작성일
distanceneopixel_setup() 함수안에 다른 함수가 섞여있습니다.
//
void distanceneopixel_setup(){
strip.begin();
strip.show(); // Initialize all pixels to 'off'
void distanceneopixel_loop();{ // () 다음에 ; 세미콜론도 삭제해야 하지만 여기에 함수가 선언되면 안됩니다.
master님의 댓글
master 작성일
함수1(){
}
함수2(){
}
이렇게 작성해야 하는데
함수1(){
함수2(){
}
}
이렇게 복사가 된 형태입니다.
함수 안에서 다른 함수를 선언하지 못합니다.