Display - Balken - Spielerei - Demos

Hallo,

ich muß euch das mal zeigen. Weil ich freu mich wie ein Schneekönig darüber. Vielleicht wird ja noch Snake auf dem Display draus. :slight_smile: Funktionierende Demo erstmal.

erst wird das Poti kalibriert, weil mein analoger Knob nur von 255 bis 767 geht, mußte ich den mappen.
Danach wird nur noch gerechnet und das passende Zeichen dargestellt und ggf. gelöscht.

Verwendet ein 16x3 Zeichen EA-DOGM Display. Kann man jedoch durch weglassen von Y etc. auf 2 Zeilen anpassen.

Display_Joystick.ino (7.59 KB)

Hallo,

noch ein Bsp. mit feiner Vollbalkendarstellung.
Zum Bsp. für Equalizer oder analog Messwertdarstellung oder ähnlichem.
Demo reduziert auf eine Poti Achse. Damit auch auf 2 Zeilen Display möglich.
Viel Spaß. :slight_smile:

EA_DOGM_Balken_Demo.ino (7.71 KB)

Hallo,

eine weitere Demo.
Und ein Update der Vollbalkendarstellung. Bei Eingangswert 0 ist Balken komplett weg.
Ab Wert 1 sieht man den ersten Balken.

Mit der neuen Demo wird eine digitale Frequenzkurve dargestellt. Die fallende Flanke wandert hin und her je nach Eingangswert. Zum Bsp. für PWM um das Tastverhältnis darzustellen.

Viel Spaß.

EA-DOGM_Demo_Bild_1.png
EA-DOGM_Demo_Bild_2.png
EA-DOGM_Demo_Bild_3.png
EA-DOGM_Demo_Bild_4.png

EA-DOGM_Demos.zip (6.32 KB)

Also ich find's super!

Hallo,

freut mich. :slight_smile: Deshalb gibts noch ein rein optisches Update der letzten Frequenzanzeige. :wink:
Die steigende Flanke wird am Anfang und Ende dargestellt. Das könnte man jetzt noch auf die Spitze treiben das es auch innerhalb der 0. und 15. Zelle sichtbar wird, indem man mehr eigene Sonderzeichen definiert. Dann muß man den Zeichensatz zwischendurch umladen. Das kann aber jeder dann selbst einbauen wer möchte, denke ich. Sollen eigentlich nur Ideenansätze sein, was man so mit einem einfachen Display grafisch durchaus darstellen kann.

Die Anzeigenverzögerung Richtung “down” bzw. nach “links” habe ich noch drin gelassen. Kann jeder rausnehmen, falls sofort auf Sollwert reagieren werden soll.

EA-DOGM_Demo_Bild_5.png

EA_DOGM_Demo_PWM_Anzeige_v2.ino (12.2 KB)

Hallöle,

irgendwie freue ich mich für dich mit – hat mir doch dein Beitrag eine kleinen „Tritt“ verpasst, noch einmal mit den individuellen Zeichen auf meinem 16x2-Display zu experimentieren… Und heute morgen, noch halb verschlafen, ist mir das dann gelungen! Dank deiner Freude über deine Erfolge.

Wie auch immer- aber das regt mich schwer dazu an, via „DELPHI“ einen kleinen Zeichen-Generator zu basteln, mittels dem ich dann die einzelnen Blöcke „on the fly“ per serieller Schnittstelle an den µC übertragen könnte. Da ich die Kommunikation zwischen PC und Arduino schon gut im Griff habe, wird das sicherlich eine feine Spielwiese! Mal schauen wie weit ich damit komme. Denn speziell nerven mich bei Textübertragungen einige fehlende Sonderzeichen. Aber ich denke, das gehört bei mir bald der Vergangenheit an.

Beste Grüße
Rudi

display_16x2.jpg

Hallo,

freut mich für dich auch. :slight_smile: Manchmal fehlt wirklich nur ein kleiner Hinweis und weiter gehts.
Mußt nur beim lcd.write Befehl darauf achten, wenn Displayspeicherplatz 0 verwendet wird, den byte cast zu machen. Hat unser guter Serenifly rausgefunden. lcd.write((byte)0); Oder generell casten, dann wird es nicht vergessen.

Manchmal fehlt wirklich nur ein kleiner Hinweis und weiter gehts.

Ja genau! Manchmal hänge ich an diversen Sachen fest - und so ganz beiläufig, wenn ich mit Kollegen über vollkommen andere Themen diskutierte, entsteht im Hinterkopf noch ein neuer Gedanke zum "alten Problem" - und bringt die Lösung. Schaun mer ma wie es weiter geht :slight_smile:

Bis denne
Rudi

Öhm, was bedeutet in diesem Fall eigentlich das von dir erwähnte "Byte Cast" ??
Meine Zeichen-Kreationen wurden bisher genau so übertragen und angezeigt wie ich es geplant hatte, egal ob am Anfang oder mitten drin.

Wenn du lcd.write(0) machst kann sich der Compiler nicht entscheiden ob die einen Integer oder einen Null-Pointer übergeben willst (da lcd.write(char*) auch existiert)

@Serenifly:
Ach sooooo, ich verstehe!
Ja nee, is klar - daher mache ich das wahrscheinlich rein zufällig richtig, weil ich gerne an die diversen Variablen-Typen denke und entsprechend verarbeite. (Liegt vielleicht an meiner Pascal-/Delphi-Vergangenheit)
Aber recht herzlichen Dank für diese Info :slight_smile:
Rudi

Hallo,

mein Zeichengenerator heißt Excel. :slight_smile:

Zeichengenerator.png

grins Jawollja :slight_smile:
Warum soll ich es mir einfach machen, wenn ich es auch umständlich kann? lach

Ja, das ist in der Tat auch eine Möglichkeit, mit Sicherheit! Ich hatte mir das lediglich so gedacht, dass ich beim Senden von Texten aus Delphi heraus direkt einen (vorher) definierten (Teil-) Zeichensatz mitschicke (die 64 Byte Buffer-Größe berücksichtigend).

Vor einiger Zeit hatte ich mir dazu eine Matix mit 8x8 LEDs gebaut, die ich direkt am Arduino gemultiplext angeschlossen hatte. Diese Bytefolgen habe ich dann ebenso in Delphi als "große Laufschrift" vorgegeben und die einzelnen Strings in den µC geschoben. Das ergab die witzigsten Effekte, auch bei Spielereien wie Scrolling von oben nach unten oder hin und her usw. So oder ähnlich werde ich das bei Gelegenheit wahrscheinlich dann auch wieder machen.

Es eilt und brennt ja nix
Rudi

Den Zeichensatz könnte man ruhig auf dem Controller lassen. Man müsste nur die Sonderzeichen irgendwie kodieren (ähnlich wie man manche Zeichen auch in C mit \ maskieren muss). Und dann beim Parsen das auswerten und das entsprechende Zeichen aus dem PROGMEM ins custom character RAM des LCD kopieren.

Hmmmm, das ist ebenso ein interessanter Gedankengang!
Den werde ich demnächst mal untersuchen.
Danke für den Tipp
Rudi

Hallo,

ich habe die Sonderzeichen im Code hinterlegt, im Flash. Bei Bedarf lade ich die ins Display per Funktionsaufruf.
Wenn dein Zeichengenerator fertig ist, kannste den ruhig, wenn du magst, zur Verfügung stellen.
Parallel bastel ich auch noch in Excel rum, um dann je nach Grafik gleich eine fertige Byte Zeile zu erhalten für Copy & Paste, je nachdem wie die Grafik aussieht.

Da gibt es übrigens auch Online Tools dazu:

https://omerk.github.io/lcdchargen/

Hallo,

aha, hättest du mir mal eher sagen können. :slight_smile:
Jetzt habe ich meinen eigenen offline Excel Code Generator fertig. :slight_smile:
Durch Verkettung Copy & Paste fähig.

Danke dennoch für die netten Links.

Zeichengenerator.jpg

EA-DOGM_Zeichen-Code-Generator_2.zip (30 KB)

na dat is ja cool...

Durch die gelieferten Links spare ich mir viel Arbeit und Gehirnschmalz :slight_smile:

Supi!

Ich habe mich mal hingesetzt und einen Character-Generator geschrieben (in AutoIt).
Screenshot:

Im ZIP-Archiv (Anhang) befindet sich das ausführbare Programm. Wer jetzt Bedenken hat, weil ich ja noch nicht so lange hier im Forum aktiv bin (dafür habe ich volles Verständnis), für den poste ich hier auch den kompletten Quellcode:

#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description=Arduino Char-Generator
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Oscar (www.autoit.de)
#AutoIt3Wrapper_Res_SaveSource=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

Opt('GUIOnEventMode', 1)

Global $hGui = GUICreate('Arduino Char-Generator v1.0', 780, 460)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
GUISetBkColor(0xDDDDDD)
GUISetIcon(@ScriptName, 3, $hGui)

Global $aidCharBits[160]
For $iCount = 0 To 3
 For $iRow = 0 To 7
 For $iCol = 0 To 4
 $aidCharBits[$iCount * 40 + $iRow * 5 + $iCol] = GUICtrlCreateCheckbox('0', 30 + $iCol * 32 + $iCount * 180, 30 + $iRow * 32, 32, 32, $BS_PUSHLIKE)
 GUICtrlSetOnEvent(-1, '_ChangeCheckbox')
 Next
 Next
Next

Global $aidSetBit[4][2]
For $iCount = 0 To 3
 $aidSetBit[$iCount][0] = GUICtrlCreateButton('0', 30 + $iCount * 180, 10, 48, 20)
 GUICtrlSetFont(-1, 14, 800, 0, 'Courier New')
 GUICtrlSetOnEvent(-1, '_SetBits')
 GUICtrlSetTip(-1, 'Clear all bits')
 $aidSetBit[$iCount][1] = GUICtrlCreateButton('1', 142 + $iCount * 180, 10, 48, 20)
 GUICtrlSetFont(-1, 14, 800, 0, 'Courier New')
 GUICtrlSetOnEvent(-1, '_SetBits')
 GUICtrlSetTip(-1, 'Set all bits')
Next
Global $aidBitRow[4], $aidC2CB[4]
For $iCount = 0 To 3
 GUICtrlCreateLabel($iCount + 1, 106 + $iCount * 180, 10, 10, 20, $SS_RIGHT)
 GUICtrlSetFont(-1, 14, 800, 0, 'Courier New')
 GUICtrlCreateLabel($iCount + 1, 14, 304 + $iCount * 40, 10, 25, $SS_RIGHT)
 GUICtrlSetFont(-1, 14, 800, 0, 'Courier New')
 $aidBitRow[$iCount] = GUICtrlCreateInput('{ B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 };', 30, 300 + $iCount * 40, 700, 25, BitOR($ES_READONLY, $ES_CENTER))
 GUICtrlSetFont(-1, 12, 400, 0, 'Courier New')
 GUICtrlSetBkColor(-1, 0xFFFFCC)
 $aidC2CB[$iCount] = GUICtrlCreateButton('CB', 735, 300 + $iCount * 40, 36, 25)
 GUICtrlSetTip(-1, 'Copy to Clipboard')
 GUICtrlSetOnEvent(-1, '_CopyToClipboard')
Next

GUISetState()
WinWaitClose($hGui)
Exit

Func _CloseGui()
 GUIDelete($hGui)
EndFunc

Func _SetBits()
 Local $iCount = Int((@GUI_CtrlId - $aidSetBit[0][0]) / 2), $iState = Mod((@GUI_CtrlId - $aidSetBit[0][0]), 2)
 For $iRow = 0 To 7
 For $iCol = 0 To 4
 GUICtrlSetData($aidCharBits[$iCount * 40 + $iRow * 5 + $iCol], $iState)
 GUICtrlSetState($aidCharBits[$iCount * 40 + $iRow * 5 + $iCol], $iState = 1 ? $GUI_CHECKED : $GUI_UNCHECKED)
 Next
 Next
 _ReadBitRow($iCount)
EndFunc

Func _ChangeCheckbox()
 Local $idCheckbox = @GUI_CtrlId - $aidCharBits[0]
 Local $iState = BitAND(GUICtrlRead($aidCharBits[$idCheckbox]), $GUI_CHECKED)
 GUICtrlSetData($aidCharBits[$idCheckbox], $iState)
 Local $iCount = Int($idCheckbox / 40)
 _ReadBitRow($iCount)
EndFunc

Func _ReadBitRow($iCount)
 Local $sBitRow = '{ '
 For $iRow = 0 To 7
 $sBitRow &= 'B'
 For $iCol = 0 To 4
 $sBitRow &= BitAND(GUICtrlRead($aidCharBits[$iCount * 40 + $iRow * 5 + $iCol]), $GUI_CHECKED)
 Next
 $sBitRow &= ', '
 Next
 $sBitRow = StringTrimRight($sBitRow, 2) & ' };'
 GUICtrlSetData($aidBitRow[$iCount], $sBitRow)
EndFunc

Func _CopyToClipboard()
 Local $iCount = (@GUI_CtrlId - $aidC2CB[0]) / 4
 ClipPut(GUICtrlRead($aidBitRow[$iCount]))
EndFunc

Der Code ist in der Programmiersprache "AutoIt" geschrieben. AutoIt ist Freeware und gibt es unter folgender URL zum downloaden: AutoIt. Damit könnt ihr dann aus dem Quelltext eine eigene Exedatei erstellen.

Arduino_Char_Gen.zip (426 KB)