Jaja, ich weis schon: mit langer Erfahrung in der nicht-objektorientierten Programmierung hat man etwas Probleme mit der Denkweise.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
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