views:

951

answers:

6
+4  A: 

The Arduino development environment is written in Java.

But the standard language you write a program for the Arduino platform is effectively C++.

The Arduino platform is based on an Atmel AVR chip. There is at least one Java VM for AVR chips. There are other languages available for the AVR such as Forth and BASIC (although I could only find commercial versions, so I'll if you want to find them, search for "AVR BASIC").

The Arduino uses a virtual COM port to communicate between the host computer and it. A virtual COM port emulates an old style serial line but is done with USB. You can use the Java communication API to then have a Java program running on the host computer communicate with your physical device.

R Samuel Klatchko
@R Samuel Klatchko: I'm curious, is it platform independent, say, linux, what about drivers? I've heard a lot of good reviews about Arduino... :)
tommieb75
The IDE is platform independent but the virtual COM port driver is not. That said, I believe recent versions of the Linux kernel have the necessary driver built in.
R Samuel Klatchko
+1 Fascinating stuff, especially the link to the NanoVM. Still digesting all of this, but it seems like the easiest thing, though it doesn't sound like it, is doing the Arduino part in the Arduino Language...?
Yar
I've been using Arduino for over a year now -- great cross platform support with Windows and Linux. Pick up the book "Getting Started with Arduino" it helped tremendously when I was getting started. If you know Java, the Arduino language is going to be a cinch to pick up.
JohnForDummies
A: 

Ok, computer-platform independant? What platforms are you targetting? That would depend on the driver and support for that said platform, what does the usb device do? Is it a mass storage device...You may have to look around and see if you can find a device driver that can talk to the device...

Hope this helps, Best regards, Tom.

tommieb75
Thanks for that, sorry if the question wasn't clear: the device is not built yet.
Yar
@yar: no problem! :)
tommieb75
A: 

I know for the serial port there were libraries that existed for interacting with it (rs232 library). Googling for java and USB returned several answers (the first was called jUSB). That would be the first type of thing I would be looking for.

Matt
Right, but then what would you do? Get out your soldering iron and improvise? I have no idea how to build a USB device either, though I do have people who can solder stuff for me and follow schematics (though I personally know nothing about it).
Yar
+1  A: 

Can you expand on your need for a custom device? It seems to me that designing hardware has a pretty high barrier to entry and that most applications I can think of would be better resolved by repurposing an existing piece of game controller hardware. If you really need new hardware, then i suggest you start by googling 'USB development kit' or 'USB development board' which will get you links like this, this and this.

As for working with USB hardware from Java, I've played around with the JUSB library a bit and it looks promising, but appears to be limited to Linux only because the Windows version of the native library half of the library hasn't been written. Alternatives can by found by googling 'HID java'.

Jherico
Thanks Jherico. The device would have some of these "endless rotary encoders with LED rings: These controls have no end points, so offer full 360 ̊ of movement. These controls offer speed dependent variable resolution, so moving the encoder slowly gives finer resolution than moving the encoder quickly." It would also have some "LED-backed buttons." That's about it for the first run.... Hope that helps a bit. Now that I actually write it, it sounds daunting.
Yar
+2  A: 

For some encoders and buttons, you probably want to implement a USB HID device. If you're going to produce more than a couple of them, you'll want to do a custom board. Check out V-USB, an open-source library for making USB HID devices using Atmel microcontrollers. They have a bunch of examples of projects that use this library.

You could probably make this look like a HID joystick, using the encoders to produce X/Y axis information and having the buttons act like buttons. They you could use standard Java gaming APIs to read the joystick values.

Ben Combee
Cool, thanks I'll look into this.
Yar
A: 

sample for java usb connection to freescale microcontroller:

http://javausbapi.blogspot.com/

jean88
having trouble understanding if this is relevant...?
Yar