Go Down

Topic: Communication with Java to my ardruino (Read 726 times) previous topic - next topic

I have been googling and reading allot and i am just not coming right,

What i want to do..

I want to be able to send a command to my arduino in the format of

(motor,state)  motor being an int (0-4) and state ( -1(backwards) , 0 (off) , 1 (forwards)

K now that part is not so important,

All i am looking for is a SIMPLE understandable example of java code, ( i am no pro at java, did it at school but nothing to crazy)

Than can simply transmit data to the arduino via serial cable, I have tried about 5 different examples and they all weird ass complicated java and they just output random data (very fast)

Is communication over the ether shield easier that serial? in regards to the packets and TCP and them being delivered etc. 
Or is it still going to use serial over the Ethernet connection.

Some help and guidance would be appreciated.

Here is the code that i currently have,

Now how do i add a "sendData" method?
Code: [Select]
import java.io.InputStream;
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[] = {"COM3" };
/** Buffered input stream from the port */
private InputStream 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();

// iterate through, looking for the port
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;

if (portId == null) {
System.out.println("Could not find COM port.");

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

// set port parameters

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

// add event listeners
} catch (Exception e) {

* 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) {

* 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 {
int available = input.available();
byte chunk[] = new byte[available];
input.read(chunk, 0, available);

// Displayed results are codepage dependent
System.out.print(new String(chunk));
} catch (Exception e) {
// Ignore all the other eventTypes, but you should consider the other ones.

public static void main(String[] args) throws Exception {
SerialTest main = new SerialTest();


You may not invent you own protocol, but use Firmata protocol: http://arduino.cc/playground/Interfacing/Firmata
It has some drawbacks (it is binary and can't be used to type in console), but it has some advantages also, f.e. processing and java implementation: https://github.com/4ntoine/Firmata and it already has arduino firmware, so you don't need to write your own.


You may not invent you own protocol

Yes you can, who says you can not?


You may not invent you own protocol

Yes you can, who says you can not?



I'm sorry, i did not express myself correctly. Yes, you may invent your own protocol and it may be better.
But you don't have to, because there are already existing solutions and why not use them, if they correspond to your goals.

Go Up