Forum: Projekte & Code Arduino Library für Electronic Assembly DOG Grafik Displays


von Bernhard M. (bernhard84)


Lesenswert?

Hallo,

ich habe eine Arduino Library für die Electronic Assembly DOG Grafik 
Displays geschrieben.

Bzw. ich habe die Library, die es vom Hersteller hier 
https://www.lcd-module.com/support/application-note/arduino-meets-ea-dog.html 
gibt, genommen, zusammengefasst, korrigiert und erweitert.

Meine Library gibt es auf github: 
https://github.com/generationmake/DogGraphicDisplay

Sie sollte vom Format auch soweit passen, dass man sie direkt in die 
Arduino-Software einbauen kann und auch die Beispiele an der richtigen 
Stelle erscheinen.

Die Library verwendet den intern Display-Speicher. Somit kann nicht auf 
jedes einzelne Pixel zugegriffen werden, sondern immer nur auf 8 
übereinanderliegende Pixel gleichzeitig und beim schreiben werden dann 
auch immer diese 8 überschrieben. Ich denke, das Prinzip ist bekannt, da 
es bei den meisten einfachen kleinen monochromen Displays so gehandhabt 
wird. Vorteil ist, dass man im Mikrocontroller weniger Speicher benötigt 
und nicht dauernd Daten zum Display gesendet werden müssen. 
Dementsprechend ist auch die Library ausgelegt, dass man nicht in jede 
Zeile schreiben kann, sondern immer nur beginnend bei jeder achten. EA 
bezeichnet das als Page und habe ich in der Library auch so beibehalten.

Meine Ergänzungen haben sich darauf beschränkt, dass ich die Library so 
umgeschrieben habe, dass sie nicht nur mit AVR, sondern zum Beispiel 
auch mit ESP32 oder SAMD controllern funktoniert. Außerdem habe ich die 
bisher getrennten Libraries für DOGM128/DOGM132 und DOGS102 in einer 
zusammengeführt, da die Controller ja sehr ähnlich sind. Schließlich 
habe ich die String-Funktion erweitert, dass der Text zum Beispiel auch 
invertiert oder zentriert dargestellt werden kann. Außerdem kann man bei 
den Strings eine bliebige Position (Offset, positiv, negativ) eingeben, 
sodass man längere Texte horizontal durch das Bild scrollen kann.

Zum Testen habe ich dann auch noch ein Arduino-Shield gebaut, das auch 
mit 3,3V Arduinos kompatibel ist. Die Daten dazu befinden sich hier: 
http://arduhmi.generationmake.de/

Über Kommentare, Anmerkungen und Fragen zur Library würde ich mich 
freuen.

Bernhard

von Jo mei (Gast)


Lesenswert?

Bernhard M. schrieb:
> Über Kommentare, Anmerkungen und Fragen zur Library würde ich mich
> freuen.

Na gut:

- Eine Klassendefinition sollte einen Konstruktor und einen
Destruktor beinhalten, machen heutige Compiler scheinbar
selbst automatisch ohne äusseres Zutun ... früher wurde
der Programmierer dazu gezwungen (?). Den Konstruktor
(bzw. dessen Aufruf) könnte man dann auch zur Initialsierung
verwenden.

- die Sourcen-Formatierung ist miserabel, Blanks und Tabs
wild gemischt. Eine "anständige" Formatierung hat zwei oder
4 Leerzeichen pro Einrückung, und genau nullkommanull Tabs.
Tabs sind immer scheisse sobald die Öffentlichkeit an einer
Source teilhaben darf. Starke Einrückungen verlangen nach
einem immer breiteren Bildschirm. In der Beschränkung liegt
der Meister.

Besonders "nützlich" sind Tabs bei Funktionsdeklarationen:
1
  void view                (byte direction);

Ist das nicht toll?

von Christoph M. (mchris)


Lesenswert?

>- die Sourcen-Formatierung ist miserabel, Blanks und Tabs
>wild gemischt.

Auf GitHub sieht der Code ziemlich sauber aus( Lob ).
Man kann aber Autoformatfunktion der Arduino-IDE

ctrl-t

verwenden, um alles einheitlich zu kriegen.

von Bernhard M. (bernhard84)


Lesenswert?

Guten Abend,

danke für die Anmerkungen.

Ich habe das jetzt soweit eingearbeitet. Alle Tabs sind jetzt durch zwei 
Leerzeichen ersetzt, so wie es bei Arduino üblich ist.

Außerdem habe ich Konstruktor und Destruktor eingebaut. Auch wenn sie 
nicht viel machen und bei Arduino wohl auch nicht so üblich sind.

Dafür habe ich noch eine begin- und eine end-Funktion eingefügt, so wie 
es bei Arduino üblich ist ( 
https://www.arduino.cc/en/Reference/APIStyleGuide ). Die 
initialize-Funktion kann damit wohl mittelfristig ersetzt werden.

Bernhard

von Christoph M. (mchris)


Lesenswert?

Insgesammt mach alles einen sehr sauberen, struktuierten Eindruck.

Was mich ein wenig wundert, ist die Klassendefinition im Header-File:
1
class dogGraphicDisplay

normalerweise sollten Klassen immer mit einem Großbuchstaben beginnen.

von Bernhard M. (bernhard84)


Lesenswert?

Guten Morgen Christoph,

da hast du natürlich recht. In dem Objektorientierten und 
Library-Schreiben bin ich halt noch nicht ganz so tief drin.

Ich habs geändert ...

Bernhard

von Jo mei (Gast)


Lesenswert?

Bernhard M. schrieb:
> Ich habe das jetzt soweit eingearbeitet.

Sehr gut. Ein Unterschied wie Tag und Nacht!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.