캐릭보드 mp3

by 김도현 | 2017-06-30 16:55

재료

  • 캐릭보드 싱글박스 1개

오늘도 두 개의 캐릭보드가 대화하는 것을 만들지 못했습니다.

그 이유는 바로 소리가 안나왔기 때문이죠.


아두이노에서 소리가 안 나오는 이유는 여러가지가 있을 수 있습니다.

1. PCB 내에서 충돌이 일어난다,

2. 모듈이 불량이다.

3. 폴더를 잘못 지정했다.

4. 코드가 잘못됐다.

5. 음원이 고음질이라 우리의 스피커가 못견딘다.

6. 작성자가 잘못했다.

...


그래서 저는 디버깅을 결심했습니다!

디버깅 하는 방법은 여러가지가 있겠습니다만, 크게 2가지로 나누자면

1. 코드 검사

2. 모듈 별 검사

정도가 있겠습니다.

코드 검사의 경우 기본적으로 컴파일을 하면 Syntax error가 잡힙니다.

하지만 Logical error의 경우 답이 없습니다. 따라서 이를 확인하기 위해 우리는 Serial 창을 활용해야 합니다.



1. 코드 검사

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
 
SoftwareSerial mp3Serial(1213);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, PIN, NEO_GRB + NEO_KHZ800);
 
int red = 0;
int green = 0;
int blue = 0;
 
void setup() {
  strip.begin();
  Serial.begin(9600);
  mp3Serial.begin(9600);
  mp3_set_serial (mp3Serial);
  delay(1);
  mp3_set_volume (20);
  red = 255;
  green = 255;
  blue = 255;
  randomSeed(analogRead(A0));
}
void make_color() {
    red = random(256);
    blue = random(256);
    green = random(256);
}
void loop() {
  make_color();
  for (int i = 0; i < 5; i++) {
    strip.setPixelColor(i, strip.Color(red, green, blue));
    strip.show();
  }
  Serial.println("Ready");
  mp3Serial.listen();
  if (mp3Serial.isListening()) {
    Serial.println("Play");
    mp3_play(1);
    delay(7000);
    mp3_stop();
  }
  delay(100);
}

 

다음은 소리가 나오는 코드입니다.

소리가 제대로 나오는지 확인하기 위해 LED의 색상도 음악이 바뀔 때마다 변경될 수 있도록 작성했습니다.


정상적으로 잘 실행이 된다면 음악이 재생이 될 때마다 LED 컬러가 변경되어야 합니다.

그리고 노란색으로 하이라이팅 된 39, 42번째 줄에서 출력이 발생합니다. 따라서 다음을 확인할 수 있습니다.


우측 상단에 보시면 시리얼 모니터 버튼이 있습니다. 

이 버튼을 누르면 다음과 같이 시리얼 출력 값들을 확인할 수 있습니다.


음악 재생 전에  Ready와 Play가 나타나는 걸 보니 코드의 문제는 아닌가봅니다.

그래서 보드의 문제인가 싶어서 다른 보드를 가지고 비교해보기로 했습니다.



2. 모듈 검사

모듈 검사란 모듈 별로 나누어 유닛 테스트를 하는 것을 의미합니다. 

저는 한 캐릭보드는 소리가 잘 나오는데 다른 하나가 나오지 않아서 각 모듈을 바꿔서 껴보기로 했습니다.

저번에 만든 그로테스크한 캐릭보드입니다.

이것 저것 서로 바꿔 끼워보니 SD카드에 문제가 있군요.

SD 카드 리더기로 확인해줍니다.

SD카드가 컴퓨터에서 인식이 잘 되는 것을 보아 카드의 문제가 아닙니다.





3. 환경 설정

결과적으로 저의 문제는 SD카드에 음악을 넣을 때, mp3 폴더를 따로 만들지 않고 최상위 폴더에 넣어서 문제가 생긴 것이였습니다.

이렇게 mp3 폴더를 만들고 그 안에 음악을 넣어주시면 됩니다.


 

자 이제 음악이 나옵니다.

하지만 또 문제가 있군요. 음악이 나오다가 지지직 소리와 함께 더이상 나오지 않습니다.

그래서 다른 음악과 비교를 해보니, 짧은 음악들은 대체로 다 잘 나오는 것 같습니다.


그래서 음악이 길어서 문제인가 싶어 음악을 잘라서 넣어보았습니다.

웹에서 음악을 편집할 수 있습니다.

하이라이트 부분만 남기고 짧게 줄인 다음 다시 SD 카드에 넣었습니다.


하지만 결과는 마찬가지로 실패입니다.

도대체 원인이 뭘까요?

그래도 소리가 나오는 것을 확인하였으니 이제 다음 단계로 넘어갈 수 있습니다.


다음 시간에는 찝찝함을 남긴 채 두 캐릭보드를 만들어 보겠습니다.


댓글 0

MADE BY

김도현

프로그래밍