정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노와 프로세싱 통신을 하여 음악재생을 하고싶습니다.
오박사 | 2015-07-30

안녕하세요 우연히 구글 검색중 알게되어 많이 배워가는 아두이노 초심자입니다..

아두이노 mega로 버튼을 누르면 해당 버튼에 저장된 소리를 내는 '런치패드' 같은 기계를 만드려고하는데

일단 프로젝트에 있는 종이 피아노 게시글을 보고 따라해보았습니다.

 

스케치

#include <CapacitiveSensor.h>

//CapacitiveSensor라이브러리를 사용하여 좌표값을 지정하여 객체생성
CapacitiveSensor   cs_2_3 = CapacitiveSensor(2,3);       
CapacitiveSensor   cs_2_4 = CapacitiveSensor(2,4);       
CapacitiveSensor   cs_2_5 = CapacitiveSensor(2,5);       


int Do;
int Re;
int Mi;


byte ch = '9';

void setup()                   
{
   cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF);
   Serial.begin(9600);
}

void loop()                   
{
    //손가락이 접촉되었을때 값을 측정. 접촉이 없을 경우 0을 반환하고 접촉이 있을 경우 0보다 큰값을 반환한다
    long total1 =  cs_2_3.capacitiveSensor(30);
    long total2 =  cs_2_4.capacitiveSensor(30);
    long total3 =  cs_2_5.capacitiveSensor(30);
 
    //각 건반마다 특정값 이상으로 출력될 경우 그 건반 상태를 1로 변경(신체와 접촉 상태)
    //접촉이 없을 경우 건반 상태를 0으로 변경
    if(total1 > 20)  Do = 1;
    else             Do = 0;
   
    if(total2 > 20)  Re = 1;
    else             Re = 0;
   
    if(total3 > 20)  Mi = 1;
    else             Mi = 0;
   
    //시리얼 통신을 통해 프로세싱으로 전송
    Serial.write(ch);
    Serial.write(Do);
    Serial.write(Re);
    Serial.write(Mi);
   
    delay(15);  //안정성을 위해 지연시간을 준다
}

 

프로세싱

import processing.serial.*;
import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;

Minim minim = new Minim(this);

AudioSample playDo;
AudioSample playRe;
AudioSample playMi;

int wait;

int Do;
int Re;
int Mi;


Serial myPort;

void setup(){
  println(Serial.list());
  myPort = new Serial(this, Serial.list()[0],9600);
  playDo = minim.loadSample("DO.mp3");
  playRe = minim.loadSample("RE.mp3");
  playMi = minim.loadSample("ME.mp3");
 
 

}

void draw(){
 
  if(myPort.available() >=1) {     
    if(myPort.read() == '9') {
      Do = myPort.read();
      Re = myPort.read();
      Mi = myPort.read();
  
    
    }
  }

  background(255);
  print(Do);
  print(" ");

  print(Re);
  print(" ");
 
  print(Mi);
  print(" ");

  if(Do > 0)
    playDo.trigger();
  if(Re > 0)
    playRe.trigger();
  if(Mi > 0)
    playMi.trigger(); 
 
}

 

일단 3개의 음만 재생되도록 했는데 컴파일이 제대로 되는것을 보아 코드자체는 문제가 없는(?)듯 한데요

회로도 잘 만든것 같습니다. 그런데 눌러도 반응이 없네요

 

아 또 프로세싱 컴파일을 하면

COM4
==== JavaSound Minim Error ====
==== Don't know the ID3 code WXXX

==== JavaSound Minim Error ====
==== Don't know the ID3 code PRIV

==== JavaSound Minim Error ====
==== Don't know the ID3 code PRIV

==== JavaSound Minim Error ====
==== Don't know the ID3 code TOPE

==== JavaSound Minim Error ====
==== Don't know the ID3 code WXXX

==== JavaSound Minim Error ====
==== Don't know the ID3 code TOPE

==== JavaSound Minim Error ====
==== Don't know the ID3 code WXXX

==== JavaSound Minim Error ====
==== Don't know the ID3 code TOPE

이런 오류가 뜨고 시작합니다.

 

도와주세요!!

 

프로필사진

수박쨈 2015-07-31 09:06:57

음원파일을 받으셨나요? 음원파일을 안받으셔서 생기는 에러 같습니다.  

음원파일을 받으셔서 프로세싱파일의 위치에 넣어주시면 됩니다.

 

음원파일 내려받기 <-링크

프로필사진

오박사 2015-07-31 14:35:46

음원파일 받았습니다. 따로 제가 한번 다운받은것도 사용해보고 게시물에 잇는 피아노 음원도 사용해 봤는데 안되네요

보니깐 프로세싱 밑에 000000000000000000000000000000하고 값이 나오는데 눌렀을때 0이 1로 바껴야 하지않나요?

반응이 없네요 다른 소스로 프로세싱하고 아두이노 통신을 할때 예를 들어 마우스를 움직일때 LED의 밝기를 조절하는 소스코드를

통신은 되는것같은데 정작 LED는 무반응이네요 회로도 맞는데 말이죠 통신시 필요한 것이 무엇무엇이 있나요??

프로필사진

오박사 2015-07-31 14:36:11

답답해서 미칠노릇입니다...

 

이전글   |    아두이노 MPU6050센서 이용 질문 2015-07-30
다음글   |    블루투스를 이용해서 안드로이드로 센서값 전송을 실습하려고 합니다.... 2015-07-31