BASIC4MCU | 질문게시판 | 초음파센서+네오픽셀+서보모터+grove mp3
페이지 정보
작성자 손문일 작성일2018-12-23 07:26 조회8,833회 댓글0건본문
안녕하세요. 마스터님
문제점
*서보 모터
- 서보모터 단독 코드일때는 잘 움직임
- 그러나 네오픽셀과 초음파 mp3 코드와 같이 있으면 이상 작동
- 전에 주신 코드는 작동을 잘하나 mp3코드가 들어오니 또 모터가 이상 작동을 합니다.
감사합니다.
탭으로 구성해서 코드가 나뉘어져 있습니다.
const int trigPin = 6;
const int echoPin = 7;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT); // trigPin을 출력으로
pinMode(echoPin, INPUT); // echoPin을 입력이다.
Serial.begin(9600);
distanceneopixel_setup();
distanceservo_setup();
distancemp3_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();
distancemp3_loop();
}
-----------------------------------------------------------------------------서보모터 코드 --------------------------------------------------------------------------------
#include <Servo.h>
Servo Biteservo; //servomotor 를 정의합니다.
int pos = 0; //서보 모터의 시작 지점을 선정합니다.
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);
}
}
}
---------------------------------------------------------------------------------------네오픽셀 코드------------------------------------------------------------------------
#include <Adafruit_NeoPixel.h>
#define PIN 11
Adafruit_NeoPixel strip=Adafruit_NeoPixel(60,PIN,NEO_GRB+NEO_KHZ800);
//
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);
}
}
------------------------------------------------------------------------------------MP3 코드--------------------------------------------------------------------------
#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>
static uint8_t recv_cmd[8] = {};
SoftwareSerial mp3(2, 3);
//
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.
}
void distancemp3_loop(){
if(distance<30){ //거리30보다 작은 경우
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();
}
댓글 0
조회수 8,833등록된 댓글이 없습니다.