Ciao a tutti,
Sto cercando di comunicare con Arduino (una serial Port) da Eclipse!
L´arduino manda istante per istante 3 grandezze via seriale.
Le classi che ho implementato sono le seguenti:
Dove DisplayFrame é :codice:public class Main { public static void main(String[] args) throws InterruptedException { new DisplayFrame("Window 1").setVisible(true); Thread.sleep(200); new InterfaceOne("Button 1").setVisible(true); new DisplayFrame("Window 2").setVisible(true); } }
Ecodice:import javax.swing.JFrame; public class DisplayFrame extends javax.swing.JFrame { public DisplayFrame(String name){ this.setTitle(name); this.setSize(600,600); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); javax.swing.JPanel panel= new javax.swing.JPanel(); panel.setBounds(100,100,500,500); processing.core.PApplet sketch = new CircleSketch(); panel.add(sketch); this.add(panel); sketch.init(); this.setVisible(true); } }
codice:import processing.core.*; import processing.serial.*; public class CircleSketch extends PApplet { Serial myPort; int linefeed = 10; // Linefeed in ASCII int numSensors = 2; // we will be expecting for reading data from four sensors double sensors[]=new double[3]; // array to read the 4 values double pSensors[]=new double[3]; // array to store the previuos reading, usefur for comparing // actual reading with the last one double deLength=0; double xPos=0; public void setup() { int baudRate=9600; size(400,1023); smooth(); // List all the available serial ports in the output pane. // You will need to choose the port that the Wiring board is // connected to from this list. The first port in the list is // port #0 and the third port in the list is port #2. println(Serial.list()); System.out.println("creating myPort..."); myPort = new Serial(this, Serial.list()[1], baudRate); System.out.println("myPort created..."); // read bytes into a buffer until you get a linefeed (ASCII 10): myPort.bufferUntil(linefeed); background(0); // Dark Blue BackGround } public void draw() { serialEvent(myPort); } void serialEvent(Serial myPort) { // read the serial buffer: String myString = myPort.readStringUntil(linefeed); int cycle=0; // if you got any bytes other than the linefeed: if (myString != null) { //cycle=cycle+1; /*System.out.println("MYSTRING1:"); System.out.println(myString);*/ //myPort.write(">C"); // trim(stringa)Removes whitespace characters from the beginning // and end of a String. In addition to standard whitespace characters // such as space, carriage return, and tab, this function also removes // the Unicode "nbsp" character. myString = trim(myString); System.out.println("MyString_:"); System.out.println(myString); // split the string at the commas // and convert the sections into doubles: pSensors = sensors; //sensors = double(split(myString, ',')); String[] sensString=myString.split(","); System.out.println("sensString[0]:"); System.out.println(sensString[0]); // Replace with a for cycle as soon as possible sensors[0]=Double.parseDouble(sensString[0]); //System.out.println("sensors[0]"); //System.out.println(sensors[0]); sensors[1]=Double.parseDouble(sensString[1]); sensors[2]=Double.parseDouble(sensString[2]); //System.out.println(sensors[0]); double yPos = height - sensors[2]; // draw the line in a pretty color: stroke(200); line((float)xPos, height, (float)xPos, (float)yPos); // at the edge of the screen, go back to the beginning: if (xPos >= width) { xPos = 0; // clear the screen by resetting the background: background(0); } else { // increment the horizontal position for the next reading: xPos++; } // print out the values you got: for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) { //print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t"); } // add a linefeed after all the sensor values are printed: //println(); } else { System.out.println("MESSAGE NOT RECEIVED"); } } }
Tutto funziona bene, ho peró 2 cose che non capisco:
1) perché tra i vari output ho anche MESSAGE NOT RECEIVED ? Anche se Arduino invia continuamente? Questo é dovuto a una non precisa sincronizzazione di Arduino con Eclipse?
2) All´improvviso nella esecuzione del programma, nella CONSOLE di Eclipse ho:
codice:MyString_: 0.00,0,0 sensString[0]: 0.00 MyString_: 0.00,0,0 sensString[0]: 0.00 MESSAGE NOT RECEIVED gnu.io.PortInUseException: serial madness at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:452) at processing.serial.Serial.<init>(Unknown Source) at processing.serial.Serial.<init>(Unknown Source) at CircleSketch.setup(CircleSketch.java:31) at processing.core.PApplet.handleDraw(PApplet.java:2280) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) at processing.core.PApplet.run(PApplet.java:2176) at java.lang.Thread.run(Unknown Source) Exception in thread "Animation Thread" java.lang.RuntimeException: Error inside Serial.<init>() at processing.serial.Serial.errorMessage(Unknown Source) at processing.serial.Serial.<init>(Unknown Source) at processing.serial.Serial.<init>(Unknown Source) at CircleSketch.setup(CircleSketch.java:31) at processing.core.PApplet.handleDraw(PApplet.java:2280) at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243) at processing.core.PApplet.run(PApplet.java:2176) at java.lang.Thread.run(Unknown Source) MyString_: 0.00,0,0 sensString[0]: 0.00 MyString_:
E´ un´errore che ho solo una volta. Vorrei sapere a cosa é dovuto! Cosa si intende per Serial madness?
Grazie mille per l´aiuto!

Rispondi quotando