Programmera Arduino med Java - Linux

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

Hej!

Jag har några frågor. För att styra Arduino med Java så krävs det att man har RXTX-biblioteket installerat. För Linux så måste man göra det manuellt. Man följer bara dessa steg.
•Download the last version of the rxtx java library at http://rxtx.qbang.org/wiki/index.php/Download.
•Extract the package, open extracted files, go to Linux and choose the folder which correspond to your system configuration.
•Copy all the files from the previous folder to /jre/lib/[machine type] (i386 for instance).
•Copy RXTXcomm.jar from the main folder to /jre/lib/ext.
Efter man har gjort det så är det dags att komplimera denna kod:

Kod: Markera allt

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");
	}
}
Dock måste man ändra PORT_NAMES och COM så det passar ens dator.
Koden sparas som "SerialTest.java" För Linux så komplimerar man så här "javac SerialTest.java".

Efter det så kör jag koden "java SerialTest.java".
Då undrar jag om denna kod(som omvandlas till binärt) kommer skickas till arduino?
Ska man bara tilläga i koden vilka ingångar och utgångar som är vad?

Eller är det så att efter jag har kört denna kod så är det bara skriva javakod i arduinoIDE istället för C++ eller C kod?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av TomasL »

Nej, det är väl enbart för att du skall kunna använda PC'n för att prata, så koden ligger i PCn, och körs där.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Programmera Arduino med Java - Linux

Inlägg av sodjan »

Du kan aldrig köra Java på en Arduino.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

TomasL skrev:Nej, det är väl enbart för att du skall kunna använda PC'n för att prata, så koden ligger i PCn, och körs där.
Så det går inte omvandla javakod till binärt som man sedan skickas till arduinon?
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46976
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av TomasL »

nej, absolut inte.
Varför skulle man vilja det.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Programmera Arduino med Java - Linux

Inlägg av sodjan »

> Så det går inte omvandla javakod till binärt som man sedan skickas till arduinon?

Du kan aldrig köra Java på en Arduino.

(Jag har för mig att jag nyss skrev just det...)
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

TomasL skrev:nej, absolut inte.
Varför skulle man vilja det.
Väldigt ofta finns det två val:
1. Kunna använda ett språk som passar till utveckling av uC, spel, program osv.
2. Lära sig flera olika språk.

Jag väljer så klart 1.

Men jag ska svara på din fråga.
Jag skulle helst vilja kunna köra styra arduinon med java, precis som man gör med C++ och C.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

sodjan skrev:> Så det går inte omvandla javakod till binärt som man sedan skickas till arduinon?

Du kan aldrig köra Java på en Arduino.

(Jag har för mig att jag nyss skrev just det...)
Jag vet. Man kan inte heller köra C på en Arduino heller.
Allt handlar om binärkod.
Användarvisningsbild
swesysmgr
Inlägg: 14951
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Programmera Arduino med Java - Linux

Inlägg av swesysmgr »

Vill du köra Java i din mikrodator då får du välja hårdvara som är anpassad för att göra det. T.ex. till vissa versioner av AVR32 finns det en färdig Java-VM som hårdvaran är anpassad för och som borde rulla med hyggliga prestanda.

Att försöka pressa in Java i en 8-bitars mikrodator är säkert teoretiskt möjligt men jag tror den är för klen och har alldeles för lite ramminne för att du skall få något slags acceptabel prestanda.

Välj dyrare hårdvara som är byggd för Java från början eller lär dig Processing eller C och kör arduino/avr.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

Men är det inte binärkod man skickar till arduinon, och inte C eller C++?
Om det är binärkod så kan man ju använda vilket språk som helst, så länge det finns en kompliator och bibliotek så man kan prata med just arduinon?
Användarvisningsbild
swesysmgr
Inlägg: 14951
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Programmera Arduino med Java - Linux

Inlägg av swesysmgr »

Al_Bundy skrev:
sodjan skrev:> Så det går inte omvandla javakod till binärt som man sedan skickas till arduinon?

Du kan aldrig köra Java på en Arduino.

(Jag har för mig att jag nyss skrev just det...)
Jag vet. Man kan inte heller köra C på en Arduino heller.
Allt handlar om binärkod.
Fast det där är ju fel, själklart kan du kompilera C och viss C++ kod och ladda in och köra den på din arduino-hårdvara. Jag tror däremot inte du kan däremot inte göra det med hjälp av din arduino-miljö på din pc/mac, språket liknar C men kräver deras egna bibliotek för att kunna köras.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Programmera Arduino med Java - Linux

Inlägg av sodjan »

Nu får du faktiskt ge dig...
Om du vill köra Arduino så använder du de verktyg som erbjuds.

Och igen, du kan *inte* köra Java på en Arduino.
Användarvisningsbild
swesysmgr
Inlägg: 14951
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: Programmera Arduino med Java - Linux

Inlägg av swesysmgr »

Al_Bundy skrev:Men är det inte binärkod man skickar till arduinon, och inte C eller C++?
Om det är binärkod så kan man ju använda vilket språk som helst, så länge det finns en kompliator och bibliotek så man kan prata med just arduinon?
Jo visst men Java kompileras till bytekod som körs på en Java-VM, inte till binärkod som körs direkt på metallen som med C för mikrodatorer.

Att köra java direkt på mikrodatorn utan något OS var en jättehet idé för 10-15 år sedan som aldrig riktigt slog igenom, det borde finnas många olika färdiga lösningar för detta att välja på.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Programmera Arduino med Java - Linux

Inlägg av Al_Bundy »

"Jo visst men Java kompileras till bytekod som körs på en Java-VM, inte till binärkod som körs direkt på metallen som med C för mikrodatorer."

Oj då!
Då förstår jag! Tackar! Bästa svaret i tråden.

Varför använder då Arduinoskaparna java för att skapa ArduinoIDE? Varför inte C eller C++?
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: Programmera Arduino med Java - Linux

Inlägg av Kaggen »

Förut fanns javelin stamp, en microcontroller som kunde köra java. Vet dock inte om den är aktuell längre. Finns ett utvecklingskit på elfa för blygsamma 1800:-

Dock är syntaxen i C inte så hemskt olik java. Finns if, else o.s.v i båda. Dock fungerar ju arrays och variabler lite olika.

Är bara att kavla upp ärmarna och lära sig. Finns gott om exempel för arduino.
Skriv svar