Hallo m.a.r.v.i.n,
vielen Dank für die Auskunft, ich hätte nicht gedacht, dass es so einfach ist. Bei RXTX ist ja noch die Datei rxtxParallel.dll dabei, die man angeblich auch noch mitkopieren soll.
Gruß,
robo
Mittlerweile habe ich es schon geschafft, mein erstes Java-Programm zu schreiben, welches testen kann, ob der ASURO da ist. Es kann auch die Werte des Linken Liniensensors auslesen.
Hier also meine erste Java-Klasse ( bin ja Java-Anfänger )
Code:
/**
* Java Testprogramm zur Kommunikation mit dem ASURO Roboter
*
* Programm zur einfachen Kommunikation des PC mit dem ASURO
* über die Infrarot Schnittstelle
*
* Kommandos:
*
* t: Testkommando, Asuro sendet xASUROy zurück
* l: Abfrage des linken Liniensensors, Asuro sendet xZAHLy zurück
*
*
* @author robo.fr ( Nickname ) christoph(at)roboterclub-freiburg.de
*
* Feb.2008
*
*/
public class Test
{
private static boolean debug = true;
// Nachbau von Msleep aus der AsuroLibV261 für Java
// ( leider müssen Methoden in Java klein geschrieben werden )
public static void msleep(int millisekunden)
{
long stop,current;
java.util.Date zeit=new java.util.Date();
stop=zeit.getTime()+millisekunden;
current=0;
while(current<stop)
{
java.util.Date zeit2=new java.util.Date();
current=zeit2.getTime();
}
}
// sende das Testzeichen 't' zum ASURO und warte auf die
// korrekte Antwort: "xASUROy"
// falls der ASURO richtig antwortet, return true
public static boolean testCommand(Rs232 port)
{
port.read(); // Empfangsbuffer leermachen durch lesen
port.write((byte)'t'); // Testkommando senden
msleep(200);
String text=port.read();
if(debug) System.out.println(text);
if(text.contains("x") && text.contains("y"))
{
//if((text.indexOf("ASURO")-text.indexOf('x'))==1)
if(text.indexOf("xASUROy")!=-1)
{
if(debug) System.out.println("Test OK");
return true; // Test OK, der ASURO antwortet korrekt
}
}
if(debug) System.out.println("No ASURO");
return false;
}
// Wert des linken Liniensensors lesen
public static double read_line_left(Rs232 port)
{
port.read(); // Empfangsbuffer leermachen durch lesen
port.write((byte)'l'); // Liniensensor Lesekommando
msleep(500);
String text=port.read();
if(debug) System.out.println(text);
double x;
if(text.contains("x") && text.contains("y"))
{
String s=text.substring(text.indexOf("x")+1,text.indexOf("y"));
x=Double.parseDouble(s);
if(debug) System.out.println(x);
return x; // Test OK, der ASURO antwortet korrekt
}
if(debug) System.out.println("No Number");
x=Double.NaN; // return Not a Number
return x;
}
public static void main(String[] args)
{
int n;
RS232 port1=new Rs232();
port1.ports_available();
port1.open("COM10") ;
port1.write("test");
testCommand(port1);
testCommand(port1);
for(n=0;n<50;n++)
{
read_line_left(port1);
}
port1.close() ;
System.out.println("beendet");
}
}
/***************************************************************************
*
* (c) 2008 robo.fr (Nickname) , christoph(at)roboterclub-freiburg.de
*
***************************************************************************
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation version 2 of the License, *
* If you extend the program please maintain the list of authors. *
* ( if there is no real name, the nick name has to be mentioned )
* If you want to use this software for commercial purposes and you *
* don't want to make it open source, please contact the authors for *
* licensing. *
***************************************************************************/
Zur Entwicklung verwende ich Eclipse. Da gibt es ein Fenster, das heist Javadoc. Kann man damit automatisch eine Dokumentation erstellen? Wie muss ein einfacher Syntax aussehen?
Hier das ganze Projekt als Zip-File, falls es jemand ausprobieren will.
An die Java-Profis: Was könnte ich den alles besser machen?
Lesezeichen