PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sensordaten auslesen Arduino One eclipse java



aloC-acoC
14.06.2013, 12:00
Hi, Ich versuche gerade mit der eclipse IDE für java, die Kommunikation zu meinen Arduino aufzubauen...

http://playground.arduino.cc/Interfacing/Java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;


public class SerialTest implements SerialPortEventListener {
SerialPort serialPort;
/** The port we're normally going to use. */
private static final String PORT_NAMES[] = {
"/dev/tty.usbserial-A9007UX1", // Mac OS X
"/dev/ttyUSB0", // Linux
"COM3", // Windows
};
/**
* A BufferedReader which will be fed by a InputStreamReader
* converting the bytes into characters
* making the displayed results codepage independent
*/
private BufferedReader input;
/** The output stream to the port */
private OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 9600;

public void initialize() {
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}

try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);

// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();

// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}

/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}

/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
System.out.println(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}

public static void main(String[] args) throws Exception {
SerialTest main = new SerialTest();
main.initialize();
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Started");
}
}

Das klappt auch, aber wie lese ich nun Daten von einem Sensor auf den Analog-Port A0 aus?
Und wie verwende ich eine der beispiel-libarys?

Wenn ich den Artikel richtig verstanden habe (mein Englisch ist nicht das beste) muss ich zuerst den Arduino Programmieren (mit der mitgelieferten Software) und kann dann die Sensordaten auslesen, stimmt das?


Gruß aloC-acoC

shedepe
15.06.2013, 17:14
Ja das hast du richtig verstanden.
Du brauchst zum einen ein Programm auf dem Mikrocontroller, das den Port A0 ausliest und via Uart sendet. Zum anderen brauchst du auf dem PC ein Programm das die Daten auf der Seriellenschnittstelle ausliest und anzeigt.

Zum Thema wie man auf dem Arduino Analog werte einliest und Daten via UART weiterschickt, gibt es allerdings mehr als genug Beispiele im Internet.

aloC-acoC
24.06.2013, 09:18
Ok, danke ;)

Ist es eigentlich möglich verschiedene Funktionen auf dem Arduino zu haben, die man dann via Java aufrufen kann?
Also quasi eine Funktion "onLoad" die beim starten des Programmes aktiviert wird (ist ja standard), eine Funktion "getData()" welche einmalig die Daten ausliest und eine "getData(time)" welche die Daten über eine bestimmte Zeit ausliest?
Ich würde das ungern über den Java Listener regeln.