정보나눔

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

[프로세싱] 아두이노(메가2560)와 프로세싱의 연동문제 질문
김비 | 2015-10-14

//아두이노 코드

int pin[]={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,49,50,51,52,53};
int B[36];
int ch=9;
void setup(){
Serial.begin(9600);
for(int i=0;i<36;i++)
pinMode(pin[i], INPUT);
}

////////////////////////////////////////////

void loop() {  
for(int i=0;i<36;i++){
if(digitalRead(pin[i]) == HIGH){
B[i]=1;
}
else{
B[i]=0;
}
}
  Serial.write(ch);
  for(int i=0;i<36;i++){
  Serial.write(B[i]);
  }
  delay(300);
}

=============================================================

============================================================= 

//프로세싱 코드


import processing.serial.*;
 Serial Port;
 
 int [] B = new int [36];
 
 void setup(){
   println(Serial.list());
   Port = new Serial(this,Serial.list()[2],9600);
   size(400,600);
   background(128);
 }
 
 void draw(){
   if(Port.available() > 0){
     if(Port.read() == 9){
       for(int i=0;i<36;i++){
         B[i]=Port.read();
         }
       }
     }
     
//////////////////////////////////////////
// for(int x=0;x<6;x++){
//   for(int y=0;y<6;y++){
//       rect(55+(50*y),40+(70*x),40,60,1,1,1,1);
//   }
// }
//////////////////////////////////////////
 
 for(int i=0;i<36;i++){
 print(B[i],"");
 if(i==5||i==11||i==17||i==23||i==29){
 println();
 }}
 println();println();println();println();println();println();
 }

=============================================================

안녕하세요. 저는 아두이노와 버튼 36개를 연결해서 런치패드라는 물건을 만들어보고있습니다.

사이트에 있는 '종이피아노만들기'를 참조해서 코드를 짜 보았는데요.

일단은 아두이노에서 36개의 신호를 보내어 프로세싱에서 그 값을 받고 배열에 넣는것까지 만들어 봤습니다.

하지만 프로세싱에서 결과값을 보니

 

위와 같이 신호가 제멋대로 받고 나가버립니다.(-1값이 제멋대로 나옵니다.)

아두이노에 딜레이값을 조정하거나 Port.read();를 중간에 한줄 더 써 넣으면 위처럼 안정이 되긴 하는데

너무 느려지고 제가 생각하는 코드상으로는 오류가 뜰 수 밖에 없는 것인지라 문제가 됩니다.

이걸 해결해야 minim라이브러리를 사용하겠는데 이 문제를 해결할 수가 없습니다.

답변 부탁드립니다.

 

그리고 프로세싱에서 신호를 받는것이 너무 느린데 이것도 해결할수가 없습니다.

속도문제도 해결할 방안이 있을까요?

 

 

ps.

Port = new Serial(this,Serial.list()[2],9600);에서 포트번호는 제대로 확인했습니다.

또한 프로세싱으로 

신호를 받는것을 확인했지만 너무 느립니다...

---------------

 if(Port.available() > 0){
     if(Port.read() == 9){
       for(int i=0;i<36;i++){
         B[i]=Port.read();
         }
       }
     }

 if(Port.available() > 0){
     if(Port.read() == 9){
       for(int i=0;i<36;i++){
         B[i]=Port.read();
         }
           Port.read();
       }
     }

로 바꾸면 일단은 작동은 합니다.

 

이전글   |    아두이노 와이파이 쉴드를 이용해서 프로세싱과의 연동은 어떻게 하나요? ... 2015-10-14
다음글   |    weather cube 에 대해 질문드립니다 2015-10-14