c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

[ct-bot] ct-Sim: Testbot Display Bugfix und Anzeige der Sensordaten

Absender: Stefan Geuken
Datum: Do, 16.03.2006 13:43:45


Hallo,

ich habe einen Patch erstellt, der zwei Dinge beinhaltet:

- Bugfix: Der CtBot Konstruktor hat das Display nicht initialisiert
- Der integrierte Testbot zeigt seine Daten auf dem Display an

Gruß
Stefan


Index: Changelog.txt
===================================================================
RCS file: /ctbot/ct-Sim/Changelog.txt,v
retrieving revision 1.6
diff -u -r1.6 Changelog.txt
--- Changelog.txt	5 Mar 2006 17:05:28 -0000	1.6
+++ Changelog.txt	16 Mar 2006 13:58:28 -0000
@@ -1,5 +1,9 @@
 CHANGELOG fuer c't-Sim
 ======================
+2006-03-16  Stefan Geuken (mail@xxxxxxxxxxxxxxxx)
+- Bugfix: Der CtBot Konstruktor hat das Display nicht initialisiert
+- Der integrierte Testbot zeigt seine Daten auf dem Display an
+
 2006-03-03	Heinrich Peters (Heinrich-Peters@xxxxxxx)
 - LCD-Ausgabe überarbeitet
 - LEDs werden jetzt im Simulator angezeigt
Index: ctSim/ctSim/Model/CtBot.java
===================================================================
RCS file: /ctbot/ct-Sim/ctSim/ctSim/Model/CtBot.java,v
retrieving revision 1.5
diff -u -r1.5 CtBot.java
--- ctSim/ctSim/Model/CtBot.java	5 Mar 2006 17:05:28 -0000	1.5
+++ ctSim/ctSim/Model/CtBot.java	16 Mar 2006 13:58:28 -0000
@@ -323,9 +323,8 @@
 	 *            Die initiale Blickrichtung
 	 */
 	public CtBot(Point3f pos, Vector3f head) {
-		super();
-		world = Controller.getWorld();
-		createBranchGroup();
+		this();
+
 		Vector3f vec = new Vector3f(pos);
 		vec.z += getHeight()/2 + getGroundClearance();
 		setPos(vec);
Index: ctSim/ctSim/Model/CtBotSim.java
===================================================================
RCS file: /ctbot/ct-Sim/ctSim/ctSim/Model/CtBotSim.java,v
retrieving revision 1.4
diff -u -r1.4 CtBotSim.java
--- ctSim/ctSim/Model/CtBotSim.java	22 Feb 2006 16:24:55 -0000	1.4
+++ ctSim/ctSim/Model/CtBotSim.java	16 Mar 2006 13:58:29 -0000
@@ -41,6 +41,7 @@
  * @author Benjamin Benz (bbe@xxxxxxxx)
  * @author Peter Koenig (pek@xxxxxxxx)
  * @author Lasse Schwarten (lasse@xxxxxxxxxxxxx)
+ * @author Stefan Geuken (mail@xxxxxxxxxxxxxxxx)
  */
 
 abstract public class CtBotSim extends CtBot {
@@ -326,6 +327,66 @@
 			int deltaX = meter2Dots(angleDiff * vecMs.length());
 			this.setSensMouseDX(deltaX);
 		}
+        
+        this.updateLcdText();
+	}
+    
+    /**
+     * Aktualisiert den Text, der auf dem LCDisplay angezeigt wird anhand der aktuellen
+     * Sensordaten.
+     */
+    protected void updateLcdText()
+    {
+      // display_printf("P=%03X %03X D=%03d %03d ",sensLDRL,sensLDRR,sensDistL,sensDistR);
+      this.setLcdText(0, 0, 
+        "P=" + formatNumberStr(Integer.toHexString(this.getSensLdrL()).toUpperCase(), 3) + " "  + formatNumberStr(Integer.toHexString(this.getSensLdrR()).toUpperCase(), 3) + 
+        " D=" + formatNumberStr(Integer.toString(this.getSensIrL()), 3) + " "   + formatNumberStr(Integer.toString(this.getSensIrR()), 3));
+
+      // display_printf("B=%03X %03X L=%03X %03X ",sensBorderL,sensBorderR,sensLineL,sensLineR);
+      this.setLcdText(0, 1, 
+        "B=" + formatNumberStr(Integer.toHexString(this.getSensBorderL()).toUpperCase(), 3) + " "  + formatNumberStr(Integer.toHexString(this.getSensBorderR()).toUpperCase(), 3) + 
+        " L=" + formatNumberStr(Integer.toHexString(this.getSensLineL()).toUpperCase(), 3) + " "   + formatNumberStr(Integer.toHexString(this.getSensLineR()).toUpperCase(), 3));        
+
+      // display_printf("R=%2d %2d F=%d K=%d T=%d ",sensEncL % 10,sensEncR %10,sensError,sensDoor,sensTrans);
+      String sensEncL = String.valueOf(this.getSensEncL() % 10);
+      if (this.getSensEncL() >= 0)
+        sensEncL = " " + sensEncL;
+      String sensEncR = String.valueOf(this.getSensEncR() % 10);
+      if (this.getSensEncR() >= 0)
+        sensEncR = " " + sensEncR;
+      
+      this.setLcdText(0, 2, 
+        "R=" + sensEncL + " "  + sensEncR + 
+        " F=" + Integer.toString(this.getSensError()) + 
+        " K=" + Integer.toString(this.getSensDoor()) +
+        " T=" + Integer.toString(this.getSensTrans()));
+
+      // display_printf("I=%04X M=%05d %05d",RC5_Code,sensMouseX,sensMouseY);
+      this.setLcdText(0, 3, 
+        "I=" + formatNumberStr(Integer.toHexString(this.getSensRc5()).toUpperCase(), 4) + 
+        " M="  + formatNumberStr(Integer.toString(this.getSensMouseDX()), 5) + " " + formatNumberStr(Integer.toString(this.getSensMouseDY()), 5));
+    }
+    
+    /**
+     * Hilfsroutine, die einen String abschneidet oder mit Nullen (0) auffüllt
+     * bis die übergebene konstante Länge erreicht ist.
+     * @param numberStr
+     *              Der String, der gekürzt/verlängert werden soll.
+     * @param length
+     *              Die Ziellänge des Ergebnisstrings
+     * @return
+     */
+    private static String formatNumberStr(String numberStr, int length)
+    {
+      if (numberStr == null)
+        return null;
+     
+      if (numberStr.length() < length)
+        return "0000000000".substring(0,length-numberStr.length()) + numberStr;
+      else if (numberStr.length() > length)
+        return numberStr.substring(numberStr.length()-length, numberStr.length());
+      else
+        return numberStr;
 	}
 
 	/**