Allgemein solltest du dir die Objektorientierung mal etwas näher anschauen -- einfach alle Methoden static zu machen entspricht eigentlich nicht dem Gedanken der objektorientierten Programmierung
Jaja, ich weis schon: mit langer Erfahrung in der nicht-objektorientierten Programmierung hat man etwas Probleme mit der Denkweise.
Aber um es zu lernen habe ich jetzt eine Zwischenklasse "AsuroKommandos" eingeführt. Damit wird das Main Programm ziemlich gut lesbar:
int n;
AsuroKommandos asuro=new AsuroKommandos();
asuro.schnittstelleOeffnen("COM10");
for(n=0;n<10;n++) asuro.verbindungOk() ; // Prüfen und zeigen, ob Verbindung
for(n=0;n<10;n++) asuro.liniensensorLinks(); // Liniensensor anzeigen
asuro.schnittstelleSchliessen();
Allerdings: Ich frage mich, warum ich überhaupt die AsuroKommandos als Objekt benötige. Die Kommanos gibt es ja nur einmal. Ich könnte 100 AsuroKommandos-Objekte erzeugen, aber ich kann nur eines gebrauchen.
Hier die zugehörige AsuroKommandos Klasse:
Code:
/**
* Kommandos zur Kommunikation mit einem ASURO
*
* 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 AsuroKommandos
{
private static boolean debug = true;
private RS232 irSchnittstelle=new Rs232();
public void AsuroKommandos()
{
irSchnittstelle.ports_available();
}
public void schnittstelleOeffnen(String port)
{
irSchnittstelle.open(port) ;
}
public void schnittstelleSchliessen()
{
irSchnittstelle.close() ;
if(debug) System.out.println("beendet");
}
// Nachbau von Msleep aus der AsuroLibV261 für Java
// ( leider müssen Methoden in Java klein geschrieben werden )
public 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();
}
}
/**
* public boolean verbindungOk()
*
* sende das Testzeichen 't' zum ASURO und warte auf die
* korrekte Antwort: "xASUROy"
* falls der ASURO richtig antwortet, return true
*
* @author robo.fr ( Nickname ) christoph(at)roboterclub-freiburg.de
*
* Feb.2008
*
*/
public boolean verbindungOk()
{
irSchnittstelle.read(); // Empfangsbuffer leermachen durch lesen
irSchnittstelle.write((byte)'t'); // Testkommando senden
msleep(200);
String text=irSchnittstelle.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;
}
/**
* public double liniensensorLinks(
*
* Wert des linken Liniensensors lesen
*
* @author robo.fr ( Nickname ) christoph(at)roboterclub-freiburg.de
*
* Feb.2008
*
*/
public double liniensensorLinks()
{
irSchnittstelle.read(); // Empfangsbuffer leermachen durch lesen
irSchnittstelle.write((byte)'l'); // Liniensensor Lesekommando
msleep(500);
String text=irSchnittstelle.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;
}
}
Lesezeichen