Hej,

mam problem z przetwarzaniem danych w programie Processing i odpowiednią informacją zwrotną w postaci wibracji.

Od początku: mamy program w Processingu z dwoma obiektami, np. okrąg. Kursorem przesuwamy jeden obiekt, a po najechaniu na drugi ( na przeszkodę), użytkownik powinien poczuć wibrację.

Do prototypu wykorzystano bluetooth BLUEFRUINT EZ- LINK, Aduino UNO i silniczek, który przedstawia poniższy link:

http://learningaboutelectronics.com/images/Vibration-motor-circuit.png

Wszystko jest OK. o ile program zawiera dwa obiekty.
Jeżeli dodaję kolejny, to samo przesuwanie okręgu już się zacina, a wibracja następuje z opóźnieniem, słabsza, nieregularna. Sygnał staje się kompletnie bezużyteczny, a celem było zbadanie odbioru przy różniej częstotliwości wibracji...

Wiem, że program można na pewno napisać lepiej, ale dopiero zaczynam zabawę z tym i nie bardzo wiem jak mam to ugryźć.

Bedę wdzięczna za każdą podpowiedź, radę.

Kod poniżej to kilka obiektów i to co się dzieje to istny dramat.

import processing.serial.*;
Serial myPort;

int blueX = 1287;
int blueY = 655;
float blackX, blackY;

int AX, AY;
int BX, BY;
int CX, CY;
int DX, DY;
int EX, EY;
int FX, FY;
int GX, GY;
int HX, HY;

float blueSize = 30;
float blackSize = 40;
int ASize = 50;
int BSize = 30;
int CSize = 75;
int DSize = 75;
int ESize = 120;
int FSize = 75;
int GSize = 27;
int HSize = 75;

color bluecolor;
color blueActive;
color blackcolor;
color Acolor;
color Bcolor;
color Ccolor;
color Dcolor;
color Ecolor;
color Fcolor;
color Gcolor;
color Hcolor;
color colorActiveObstacle;

boolean Overblue = false;
boolean Overblack = false;
boolean OverA = false;
boolean OverB = false;
boolean OverC = false;
boolean OverD = false;
boolean OverE = false;
boolean OverF = false;
boolean OverG = false;
boolean OverH = false;

void setup()
{
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
size(500, 500);

bluecolor = color(#0000FF);
blueActive = color(#CC00FF);
blackcolor = color(000000);
colorActiveObstacle = color(34);

Acolor = color(225);
Bcolor = color(225);
Ccolor = color(225);
Dcolor = color(225);
Ecolor = color(225);
Fcolor = color(225);
Gcolor = color(225);
Hcolor = color(225);

blackX = 20;
blackY = 20;

blueX = 450;
blueY = 450;

AX = 200;
AY = 40;

BX = 320;
BY = 60;

CX = 430;
CY = 150;

DX = 300;
DY = 80;

EX = 250;
EY = 180;

FX = 100;
FY = 100;

GX = 1240;
GY = 130;

HX = 300;
HY = 500;
}

void draw()
{
background(78);
if(mousePressed)
{
fill(blueActive);
blueX = mouseX;
blueY = mouseY;
// myPort.write('H');
} else {
fill(bluecolor);
myPort.write('L');
}
ellipse(blueX, blueY, blueSize, blueSize);

fill(blackcolor);
ellipse(blackX, blackY, blackSize, blackSize);

if(overA(AX,AY, ASize))
{
fill(Acolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {
fill(Acolor);
myPort.write('L');
}
ellipse(AX, AY, ASize, ASize);

if(overB(BX,BY, BSize))
{
fill(Bcolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {
myPort.write('L');
fill(Bcolor);
}
ellipse(BX, BY, BSize, BSize);

if(overC(CX,CY, CSize))
{
fill(Ccolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {

myPort.write('L');

fill(Ccolor);
}
ellipse(CX, CY, CSize, CSize);

if(overD(DX,DY, DSize))
{
fill(Dcolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {

myPort.write('L');
fill(Dcolor);
}
ellipse(DX, DY, DSize, DSize);

if(overE(EX,EY, ESize))
{
fill(Ecolor);
// fill(colorActiveObstacle);
myPort.write('H');
} else {

myPort.write('L');
fill(Ecolor);
}
ellipse(EX, EY, ESize, ESize);

if(overF(FX,FY, FSize))
{
fill(Fcolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {

myPort.write('L');
fill(Fcolor);
}
ellipse(FX, FY, FSize, FSize);

if(overG(GX,GY, GSize))
{
fill(Gcolor);
//fill(colorActiveObstacle);
myPort.write('H');
} else {

fill(Gcolor);
myPort.write('L');
fill(Gcolor);
}
ellipse(GX, GY, GSize, GSize);

if(overH(HX,HY, HSize))
{
fill(Gcolor);
myPort.write('H');
} else {

myPort.write('L');
fill(Hcolor);
}
ellipse(HX, HY, HSize, HSize);
}

boolean overA(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 60) {
return true;
} else {
return false;
}
}
boolean overB(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 50) {
return true;
} else {
return false;
}
}
boolean overC(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 73) {
return true;
} else {
return false;
}
}
boolean overD(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 73) {
return true;
} else {
return false;
}
}
boolean overE(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 95) {
return true;
} else {
return false;
}
}
boolean overF(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 73) {
return true;
} else {
return false;
}
}
boolean overG(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 50) {
return true;
} else {
return false;
}
}
boolean overH(int x, int y, int diameter) {
float disX = x - mouseX;
float disY = y - mouseY;
if (sqrt(sq(disX) + sq(disY)) < 73) {
return true;
} else {
return false;
}
}