아두이노와 프로세싱을 연동하여 이미지가 변하는 작품을 하고있습니다.
처음에는 (지구)이미지 1에서 7장 까지가 계속 반복적으로 보여집니다.
버튼 1을 누르면 21부터 30장이 보인다음 (우주)이미지 40부터 46장까지 보이도록 하려고 하는데요 (이미지파일의 숫자는 임의로 정한거입니다)
처음에 코드를 짤때에는 시리얼 통신 없이 짜보아서 버튼1 대신 마우스 프레스드를 이용했습니다. 마우스가 눌리면 21장이 실행되고 그다음에 40장이 보이도록이요 근데 이걸 시리얼통신으로 가져오니 반응을 하지않습니다. 반응을 아예 안하는건 아닌데요.
아두이노 시리얼모니터에서는 잘작동하는게보이는데 프로세싱모니터로보면 제대로 그 값을 받아오질 못하고, 값을 받아와도 작동을 안되거나
한참 후에 두장 정도보이다가 그냥 계쏙 첫 이미지들만 보여주네요
시리얼통신간의 문제인거같단 생각에 아두이노 딜레이와 이미지 변환속도 (fps)을 조절을 해보아도 해결책이 나지않습니다.
어떻게 해야할까요?
다음은 코드입니다.
import processing.serial.*;
Serial myPort;
String val;
int count, count2, count3, maxSeq, maxSeq2, a, space, earth;
float fps, time;
PImage img, img2;
void setup() {
printArray(Serial.list());
//Serial
String portName = Serial.list()[1];
myPort = new Serial(this,portName,9600);
fps = 100;
time = 0;
count = 1;
count2 = 21;
count3 = 40;
maxSeq = 7;
maxSeq2 = 46;
a=0;
space = 0;
earth = 1;
size(800, 800);
}
void draw() {
if (myPort.available() > 0) {
if ( (val = myPort.readStringUntil(ENTER)) != null ) val = trim(val);
else return;
if (val != null) {
println(val);
}
}
if ( count == maxSeq + 1)
{
count = 1;
}
if ( count3 == maxSeq2 + 1)
{
count3 = 40;
}
if (space == 0 && earth == 1) {
if ( millis()-time > fps )
{
background(255);
time = millis();
img = loadImage(count+".jpg"); // 처음 이미지
img2=loadImage(count2+".jpg"); // 두번째 이미지
noTint();
image( img, 100, 100, width/2, height/2);
count++;
if ("2High".equals(val)) { // 버튼이 눌리면..// Low도 해보고 High도 해봤어요
if (count2 < 31) {
tint(255, a);
image( img2, 100, 100, width/2, height/2);
a = a+70;
count2++;
if (count2 == 30) { // 다음 이미지(40~46)로 넘어가기위해 값 변화를 줬습니다.
space = 1;
earth = 0;
}
}
} else { // 중간에 버튼이 떨어지면 작동 안하도록했어요
count2 = 21;
a = 0;
}
}
// fps=mouseX;
}
//space //
if (space == 1 && earth == 0) { // 40~46 이미지 재생)
if ( millis()-time > fps )
{
background(255);
time = millis();
img = loadImage(count3+".jpg");
img2=loadImage(count2+".jpg");
noTint();
image( img, 100, 100, width/2, height/2);
count3 ++;
//println(fps);
}
if (mousePressed) { // 시리얼통신 전에 마우스로 작동시키던거를 실험삼아 한번더 작동시킨겁니다 아마 시리얼통신 문제가 해결되면 버튼 2로 만들거같아요 근데 얘는 마우스떄도 작동을 안해서 고민중입니다.. ㅠㅠ
if (count2 < 31) {
tint(255, a);
image( img2, 100, 100, width/2, height/2);
a = a+70;
count2++;
if (count2 == 30) {
space = 0;
earth = 1;
}
}
} else {
count2 = 21;
a = 0;
}
}
}
|