I have been trying to find a USB Serial Library for Processing for Android that actually works but I am not having much luck.
The only one I found that I managed to make more or less work is the one found at
At least it compiles, uploads to both my android devices, one of them about 6 years old and the other quite recent, and I manage to send and receive serial over USB.
The problem is that when I exit the app on my phone, but it stays on the recent apps screen, it crashes when I call it again either from there, or from the Home Screen. If I close the app completely and restart it, it works again. I think this might be the library causing this, but could someone please have a look at this problem? I am a beginner in Processing and I have no idea how to debug this. It has been a steep learning curve until now.
also, do you know any other library that works better?
Thank you in advance for your help. Here is the Test code I am running.
import com.yourinventit.processing.android.serial.*;
//import processing.serial.*; // imports library for serial communication
Serial SerialPort; // defines Object for Serial
String ang="";
String distance="";
String data="";
int angle, dist;
void setup() {
size (1200, 700);
// myPort = new Serial(this,"COM4", 9600); // starts the serial communication
SerialPort = new Serial(this, Serial.list(this)[0], 9600);
SerialPort .bufferUntil('.'); // reads the data from the serial port up to the character '.' before calling serialEvent
background(0);
}
void draw() {
//for the blur effect
fill(0,5); //colour,opacity
noStroke();
rect(0, 0, width, height*0.93);
noStroke();
fill(0,255);
rect(0,height*0.93,width,height); // so that the text having angle and distance doesnt blur out
drawRadar();
drawLine();
drawObject();
drawText();
}
void serialEvent (Serial myPort) { // starts reading data from the Serial Port
// reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
data = myPort.readStringUntil('.');
data = data.substring(0,data.length()-1);
int index1 = data.indexOf(",");
ang= data.substring(0, index1);
distance= data.substring(index1+1, data.length());
angle = int(ang);
dist = int(distance);
System.out.println(angle);
}
void drawRadar()
{
pushMatrix();
noFill();
stroke(10,255,10); //green
strokeWeight(3);
translate(width/2,height-height*0.06);
line(-width/2,0,width/2,0);
arc(0,0,(width*0.5),(width*0.5),PI,TWO_PI);
arc(0,0,(width*0.25),(width*0.25),PI,TWO_PI);
arc(0,0,(width*0.75),(width*0.75),PI,TWO_PI);
arc(0,0,(width*0.95),(width*0.95),PI,TWO_PI);
line(0,0,(-width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
line(0,0,(-width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
line(0,0,(-width/2)*cos(radians(90)),(-width/2)*sin(radians(90)));
line(0,0,(-width/2)*cos(radians(120)),(-width/2)*sin(radians(120)));
line(0,0,(-width/2)*cos(radians(150)),(-width/2)*sin(radians(150)));
stroke(175,255,175);
strokeWeight(1);
line(0,0,(-width/2)*cos(radians(15)),(-width/2)*sin(radians(15)));
line(0,0,(-width/2)*cos(radians(45)),(-width/2)*sin(radians(45)));
line(0,0,(-width/2)*cos(radians(75)),(-width/2)*sin(radians(75)));
line(0,0,(-width/2)*cos(radians(105)),(-width/2)*sin(radians(105)));
line(0,0,(-width/2)*cos(radians(135)),(-width/2)*sin(radians(135)));
line(0,0,(-width/2)*cos(radians(165)),(-width/2)*sin(radians(165)));
popMatrix();
}
void drawLine() {
pushMatrix();
strokeWeight(9);
stroke(0,255,0);
translate(width/2,height-height*0.06);
line(0,0,(width/2)*cos(radians(angle)),(-width/2)*sin(radians(angle)));
popMatrix();
}
void drawObject() {
pushMatrix();
strokeWeight(9);
stroke(255,0,0);
translate(width/2,height-height*0.06);
float pixleDist = (dist/40.0)*(width/2.0); // covers the distance from the sensor from cm to pixels
float pd=(width/2)-pixleDist;
float x=-pixleDist*cos(radians(angle));
float y=-pixleDist*sin(radians(angle));
if(dist<=40) // limiting the range to 40 cms
{
//line(0,0,pixleDist,0);
line(-x,y,-x+(pd*cos(radians(angle))),y-(pd*sin(radians(angle))));
}
popMatrix();
}
void drawText()
{
pushMatrix();
fill(100,200,255);
textSize(25);
text("10cm",(width/2)+(width*0.115),height*0.93);
text("20cm",(width/2)+(width*0.24),height*0.93);
text("30cm",(width/2)+(width*0.365),height*0.93);
text("40cm",(width/2)+(width*0.45),height*0.93);
textSize(40);
text("YAinnoware",width*0.08,height*0.99);
text("Angle :"+angle,width*0.45,height*0.99);
if(dist<=40) {
text("Distance :"+dist,width*0.7,height*0.99);
}
translate(width/2,height-height*0.06);
textSize(25);
text(" 30°",(width/2)*cos(radians(30)),(-width/2)*sin(radians(30)));
text(" 60°",(width/2)*cos(radians(60)),(-width/2)*sin(radians(60)));
text("90°",(width/2)*cos(radians(91)),(-width/2)*sin(radians(90)));
text("120°",(width/2)*cos(radians(123)),(-width/2)*sin(radians(118)));
text("150°",(width/2)*cos(radians(160)),(-width/2)*sin(radians(150)));
popMatrix();
}
I updated the manifest file to be like yours, same for the device_filter file.
But then I had to import the library because the one on your code seem not to be the correct one.
the libraries.rar the same on my processing libraries folder that i used and it’s working with my example my system windows 7 processing 3 Android version 8.1.0
I have Processing 4.3.2 on windows 10. Could that be the reason why is not working?
Sorry for the stupid questions jafal, you know I am not very familiar with all this yet.
in general yes it could be but in this case i am not sure i am going to try your library with example included Arduino / Android on my system and see how it’s going on may you missed permission or something else…and i am going to post the result
I tested the “Simple Read” example that comes with the library and was able to receive numbers but also missed a lot of numbers and displayed this in between:
Data: nread not positive
There were no issues with closing and opening the app.
Note:
I was not able to import the library and added this to the sketch folder ( drag and drop onto sketch and it adds it to a code folder in the sketch): ProcessingAndroidSerial.jar
yeah, it doesn’t work if you put the whole folder in the processing “libraries” folder, you need to copy the contents of the folder paste them in the library folder.