10 Zeichen pro Zeile: Zellenbreite am Geraet gemessen, Zeilen zentriert

Die RS232-Strecke ESP32 -> MAX3232 -> Anzeige ist am Geraet bestaetigt; damit
war "probe.py pitch" moeglich und hat die offene Zeichenbreiten-Frage geklaert.

Das Ergebnis korrigiert eine Annahme: Bisher stand CHARS_PER_LINE = 9, abgezaehlt
am Zeilenumbruch. Gemessen wurde damit aber der Auto-Vorschub der Sperrschrift
(7 px), nicht die Zeichenbreite. Die Zeichenmatrix ist 6 px breit -- zehn Ziffern,
einzeln auf x = i*6 gesetzt, stehen sauber getrennt nebeneinander.

- display._emit_line positioniert jedes Zeichen selbst, statt den Auto-Vorschub
  laufen zu lassen. CHARS_PER_LINE = 10, CELL_WIDTH = 6.
- Die Deklination passt dadurch in voller Form: +38°47'01" statt +38°47'01.
- show_lines sendet ein Telegramm je Zeile. Mit Einzelpositionierung kaemen beide
  zusammen auf 224 der erlaubten 230 Bytes -- zu wenig Reserve fuer den
  Dauerbetrieb. Die Reihenfolge bleibt unten vor oben (Home-Zelle).
- Zeilen werden zentriert (CENTER_LINES, LINE_X). Der Zeichenblock bleibt dabei
  gleich breit und an derselben Stelle, damit keine Reste stehen bleiben.
- probe.py kommt mit aufs Geraet: Die Anzeige haengt jetzt am ESP32, nur von dort
  laesst sich die Geometrie noch ausmessen.

Die Tests pruefen nicht mehr auf zusammenhaengenden Text im Telegramm -- den gibt
es nicht mehr -- sondern rechnen ueber die Cursor-Sequenzen zurueck, was wirklich
auf welcher Zelle landet. 97 Tests gruen, Kette am Geraet im Sekundentakt bestaetigt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-27 15:56:15 +02:00
parent 42fc7f52d4
commit 4f7375add3
8 changed files with 292 additions and 106 deletions
+2 -1
View File
@@ -81,7 +81,8 @@ class TestClientGegenMock(unittest.TestCase):
def test_get_coordinates_und_formatierung(self):
ra_raw, dec_raw = self.client.get_coordinates()
self.assertEqual(coords.format_ra(ra_raw, high_precision=True), "18h36m56s")
self.assertEqual(coords.format_dec(dec_raw, high_precision=True), "+38°47'01")
# Seit CHARS_PER_LINE = 10 passt die volle Form mit abschliessendem ".
self.assertEqual(coords.format_dec(dec_raw, high_precision=True), "+38°47'01\"")
def test_produktname(self):
self.assertEqual(self.client.query(lx200.GET_PRODUCT), mount_mock.PRODUCT)