add positionfinding sofware written in processing
This commit is contained in:
parent
1f0d2d4fea
commit
5e6cc2eeac
|
@ -0,0 +1,176 @@
|
|||
/**
|
||||
* Simple Read
|
||||
*
|
||||
* Read data from the serial port and change the color of a rectangle
|
||||
* when a switch connected to a Wiring or Arduino board is pressed and released.
|
||||
* This example works with the Wiring / Arduino program that follows below.
|
||||
*/
|
||||
|
||||
|
||||
import processing.serial.*;
|
||||
|
||||
Serial myPort; // Create object from Serial class
|
||||
int analoglow; // Data received from the serial port
|
||||
int analoghigh; // Data received from the serial port
|
||||
int newdata=0;
|
||||
|
||||
int screenwidth=1024;
|
||||
int screenheight=768;
|
||||
|
||||
int xstart;
|
||||
int ystart;
|
||||
int xend;
|
||||
int yend;
|
||||
|
||||
int testpart=1; //0=finished, 1=left, 2=right, 3=up, 4=down
|
||||
|
||||
int readingA=0;
|
||||
int readingB=0;
|
||||
|
||||
int stopsize=30; //minimum rect height and width
|
||||
int minvaluedistance=50; //how far analog values need to be apart
|
||||
|
||||
void setup()
|
||||
{
|
||||
size(1024, 768);
|
||||
|
||||
xstart=0;
|
||||
ystart=0;
|
||||
xend=width;
|
||||
yend=height;
|
||||
|
||||
printArray(Serial.list());
|
||||
//String portName = Serial.list()[35];
|
||||
String portName="/dev/ttyUSB0";
|
||||
myPort = new Serial(this, portName, 115200);
|
||||
}
|
||||
|
||||
void draw()
|
||||
{
|
||||
if ( myPort.available() > 0) { // If data is available,
|
||||
String inBuffer = trim(myPort.readString());
|
||||
if (inBuffer != null) {
|
||||
//println(inBuffer);
|
||||
String[] list = split(inBuffer, ';');
|
||||
//print("list=");
|
||||
//printArray(list);
|
||||
if (list.length>=2){
|
||||
analoglow=parseInt(list[0]);
|
||||
analoghigh=parseInt(list[1]);
|
||||
//print("->");
|
||||
//print(analoglow);
|
||||
//print(",");
|
||||
//println(analoghigh);
|
||||
newdata+=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (newdata>=3){ //wait some reading
|
||||
newdata=0; //reset counter
|
||||
|
||||
int reading=analoglow; //use only one analog value
|
||||
|
||||
switch(testpart){
|
||||
case 1: //left
|
||||
readingA=reading;
|
||||
print("A="); println(readingA);
|
||||
testpart++; //next part
|
||||
break;
|
||||
case 2: //right
|
||||
readingB=reading;
|
||||
print("B="); println(readingB);
|
||||
//apply to positions
|
||||
if (readingA>readingB+minvaluedistance){ //left part was brighter
|
||||
xend=xstart+(xend-xstart)/2;
|
||||
println("Left");
|
||||
testpart++; //next part
|
||||
}else if(readingB>readingA+minvaluedistance){
|
||||
xstart=xstart+(xend-xstart)/2;
|
||||
println("Right");
|
||||
testpart++; //next part
|
||||
}else{
|
||||
print("No definitely better part found: ");
|
||||
print(readingA); print(" vs. "); println(readingB);
|
||||
float randommove=random(-(xstart-xend)/20,(xstart-xend)/20);
|
||||
while (abs(randommove)<1){
|
||||
randommove*=2;
|
||||
}
|
||||
xstart+=randommove; //move rect a bit
|
||||
xend+=randommove;
|
||||
testpart--;
|
||||
}
|
||||
break;
|
||||
case 3: //up
|
||||
readingA=reading;
|
||||
print("A="); println(readingA);
|
||||
testpart++; //next part
|
||||
break;
|
||||
case 4: //down
|
||||
readingB=reading;
|
||||
print("B="); println(readingB);
|
||||
if (readingA>readingB+minvaluedistance){ //upper part was brighter
|
||||
yend=ystart+(yend-ystart)/2;
|
||||
println("Up");
|
||||
testpart++; //next part
|
||||
}else if(readingB>readingA+minvaluedistance){
|
||||
ystart=ystart+(yend-ystart)/2;
|
||||
println("Down");
|
||||
testpart++; //next part
|
||||
}else{
|
||||
print("No definitely better part found: ");
|
||||
print(readingA); print(" vs. "); println(readingB);
|
||||
float randommove=random(-(ystart-yend)/20,(ystart-yend)/20);
|
||||
while (abs(randommove)<1){
|
||||
randommove*=2;
|
||||
}
|
||||
ystart+=randommove; //move rect a bit
|
||||
yend+=randommove; //move rect a bit
|
||||
testpart--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (testpart>4){
|
||||
testpart=1;
|
||||
}
|
||||
|
||||
print("Testing Part:");
|
||||
println(testpart);
|
||||
}
|
||||
|
||||
if (yend-ystart<=stopsize){
|
||||
testpart=0; //stop
|
||||
}
|
||||
|
||||
|
||||
|
||||
background(0); // Set background to white
|
||||
clear();
|
||||
fill(255);
|
||||
rectMode(CORNERS);
|
||||
switch(testpart){ //draw current segment
|
||||
case 1: //left
|
||||
rect(xstart, ystart, xstart+(xend-xstart)/2, yend);
|
||||
break;
|
||||
case 2: //right
|
||||
rect(xstart+(xend-xstart)/2, ystart, xend, yend);
|
||||
break;
|
||||
case 3: //up
|
||||
rect(xstart, ystart, xend, ystart+(yend-ystart)/2);
|
||||
break;
|
||||
case 4: //down
|
||||
rect(xstart, ystart+(yend-ystart)/2, xend, yend);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue