Forum: Projekte & Code Turtlegrafik: Interpreter, Creator & Designer


von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Bei einem Projekt bei dem in einem Controller nicht mehr wirklich viel 
Flashspeicher vorhanden war, wollte ich dennoch auf einem verwendeten 
TFT-SPI Display noch etwas Grafik darstellen, was aufgrund der 
Speichergröße von Bitmaps nicht mehr möglich war.

Entsinnend an uralte Zeiten (sogar noch prä-MS-DOS) gab es etwas das 
sich Turtlegrafik nannte. Daran erinnernd habe ich einen (sehr) kleinen 
aber auch einfachen Interpreter für Mikrocontroller geschrieben, der 
Zeichenkommandos in einem String beinhaltet und entsprechend diese 
Zeichenkommandos auf dem Display zeichnet. Den grundsätzlichen 
Interpreter habe ich schon vor einer weile geschrieben, aber jetzt habe 
ich den doch wieder gebraucht (um ein stylisiertes Thermometer 
darzustellen) und fand es heute wie damals mühselig, di Grafikkommandos 
von Hand einzugeben. Also habe ich den Interpreter überarbeitet und 
-viel aufwändiger- ein HTML-Tool geschrieben, mit dem man Turtlegrafiken 
für meinen proprietären Interpreter generieren kann.

Bevor ich hier jetzt weiterschreibe, die Links, auf der das zu finden 
ist:
Beschreibung von Turtlegrafik grundsätzlich: 
https://www.jjflash.de/turtlegraphics.html

Link zum Creator und Generator: https://www.jjflash.de/turtledraw.html

Grundsätzlich wäre es jedoch ganz nett, ihr geht auf die Seite 
https://www.jjflash.de , dort gibt es die gesamte Webseite und man kann 
dort im Frame auch die Turtlebeschreibung und den Generator anklicken 
und das ganze im Contentfenster eines Framesets anschauen.

Die Beschreibung von Turtlegrafik findet ihr auch hier im Textanhang als 
reines Textdokument.

Den Interpreter habe ich hier ganz bewußt nicht als .h / .c Kombination 
eingestellt, weil es nicht klar ist, auf welcher Zielplattform er laufen 
soll.

Grundsätzlich kann der Interpreter mittels copy & paste in jeden 
Quelltext eingefügt werden. Damit der Interpreter arbeiten kann, 
benötigt es im Programm eine Funktion Putpixel. Der Prototyp von 
putpixel muß folgenden Prototyp haben:
1
void putpixel(int x, int y, uint16_t color);
x,y bezeichnet die Bildschirmkoordinate an der ein Pixel ausgegeben 
wird. 0,0 bezeichnet die linke obere Ecke
color bezeichnet einen 16-Bit Farbwert im Format RGB565, mit dem ein 
Pixel gezeichnet wird

Verwendungsbeispiel des Interpreters:

Zeichne ab absoluter Koordinate 50,30 ein Rechteck mit der RGB-Farbe 
rot= 255, grün= 128, blau= 20 und einer Breite von 60 Pixel mit einer 
Höhe von 40 Pixel. Auch wenn ein Rechteck mit Anweisung r 60,40 
gezeichnet werden könnte werden hier die Kommandos für r, l, u, d 
verwendet um die Anwendung des Interpreters zu zeigen

Code für Controller mit linearem Adressraum (nicht AVR):
1
  static const char rechteck[] = "P50,30 C255,128,20 r60 d40 l60 u40";
2
  cmd_parse(&rechteck[0]);
Obiger Code ist zwar auch auf einem AVR-Mikrocontroller ausführbar wenn 
die Source für NICHT-AVR verwendet wird, hat aber den Nachteil, dass 
trotz der Angabe von static const eine Kopie des Strings im RAM abgelegt 
wird. Aus diesem Grund soll die Source für AVR-Controller verwendet 
werden (die einem in progmem abgelegten String erwartet):
1
  static const char rechteck[] PROGMEM = "P50,30 C255,128,20 r60 d40 l60 40";
2
  cmd_parse(&rechteck[0]);

:-) weil das händische Erstellen einer Turtlegrafik aufwändig ist, hilft 
einem oben genannter Creator & Generator weiter.

Hier "just for fun" ein C-Arraystring, das von hier kopiert und beim 
Creator importiert werden kann:
1
char cmd[] = "P80,38 C255,179,102 K36 d4 C255,80,80 k20 M0,1 k20 C255,0,0 M0,1 k20 M-21,0 C255,179,102"
2
             "T42,-23 M36,-19 c15 K7 M-31,0 c15 K7 M-2,1 C91,91,255 K4 M31,0 K4 M-13,13 C231,63,20 K7"
3
             "M-2,1 C237,126,114 K4 c6 M-65,-26 K6 c2 M14,24 K4 c1 M-14,18 K3 M25,7 c8 K3 c4 M98,4 K9"
4
             "C189,95,0 M10,-25 K4 c5 M-24,-24 K7 c6 M26,-1 K5 M-134,-2 c14 K4 M14,24 c10 K2 M-14,18"
5
             "C149,149,255 K1 M25,7 c15 K2 M99,4 C255,128,128 K6 c14 M9,-25 M0,0 K3 M2,-25 C255,179,102"
6
             "K3 M-25,1 C255,128,255 K5";

Wer es brauchen kann, viel Spaß damit (ich hab da gestern beim Erstellen 
gerne damit gespielt).
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Wie mir mitgeteilt wurde, haben sich 2 Fehler im Interpretercode 
eingeschlichen, bzw. fehlt etwas.

Auf meinem System sind bei Benutzung von SPI-TFT Displays die Funktionen

- rgbfromvalue
- rgbfromega

immer vorhanden, aber in den ersten angehängten Dateien sind die nicht 
dabei. Hier also die beiden Dateien für linearen Adressraum und für 
AVR-Progmem hier im Anhang.

Sorry für den Bug!
von Horst (alteskind)


Lesenswert?

Hallo Ralph,

bisher war ich hier immer nur lesend dabei, hab jetzt mit deinem Creator 
rumgespielt und den find ich echt krass.

Warum ich mich jetzt angemeldet hab und schreib ist: kann ich das auch 
mit einem Arduino anzeigen? Ich bekomme das nicht hin!

Ich möchte gerne das Bild hier anzeigen lassen:

char cmd[] = "P0,0 c15 T159,79 M15,67 c2 K7 r12 K7 r13 K7 r13 K7 M-45,-1 
c15 T55,8 c6 M52,-1 T53,-1 c8 M4,-2"
             "T47,-27 C27,66,10M6,0 T11,-13 C205,207,56 u13 r11 M-6,7 c6 
l3 d1 c15 M15,-11 T10,6 M14,0 T8,6"
             "C27,66,10 M-15,7T12,1 M14,0 T10,1 c1 M-13,-1 u6 r10 l4 
d6M8,0 c1 u6 r8 l3 d6 M-42,-18 c4 m10,-10"
             "r27 m10,10 M-37,-9 T27,9 M-1,1 T29,8 M-1,1 T31,7 M-1,1 
t33,6 M-1,1 T35,5 M-1,1 T37,4 M-1,1"
             "T39,3 M-1,1 T41,2 M-1,1 T43,1 M-1,1 r45 c3 M-34,7 K5 c1 k5 
C114,81,21 M-43,21 T1,-23 C25,96,27"
             "M1,-29 K16 c2 M-9,5 K3 M17,-1 K3 M-5,4 K3 M4,0 K3 M-18,-9 
K2 c14 M1,5 K2 M13,2 K2 M8,-4 K2"
             "c4 M-5,7 K1 M-16,-3 K2 M55,-12 C65,6,6 T4,-8 M32,-17 c14 
C198,70,0 K10 c14 M-2,1 K7 C153,193,241"
             "M-58,-3 M-1,-2 K5 M5,0 K4 r8 K4 l25 K6 r5 K4";

Vielleicht haben ja andere auch Lust zu zeigen was sie gemalt haben und 
zeigen das hier, als echte Challenge oder so!
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Horst schrieb:
> Warum ich mich jetzt angemeldet hab und schreib ist: kann ich das auch
> mit einem Arduino anzeigen? Ich bekomme das nicht hin!

das funktioniert auch mit Arduino, siehe Sketch im Anhang. Ich hab der 
Einfachheit halber die Adafruit-Library installiert und verwendet. In 
Arduino bei

- Werkzeuge - Bibliotheken verwalten

nach ST7735 suchen (je nachdem welches Display du hast) und installieren 
wenn nicht schon geschehen.

Die Verdrahtung kontrollieren, meine ist so verdrahtet:
1
#define TFT_CS     10           // PB2
2
#define TFT_RST    6            // PD6
3
#define TFT_DC     7            // PD7
4
5
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

Dann, ganz wichtig, wenn du den Source aus 
https://www.mikrocontroller.net/attachment/694895/turtledraw_avr.c 
genommen hast, mußt du das Array umbenennen, da der Interpreter den 
String in PROGMEM erwartet, der Generator aber kein PROGMEM-Array 
generiert:
1
  static const char cmd[] PROGMEM =

Dein korrekt eingefügter String heißt also:
1
static const char cmd[] PROGMEM = 
2
  "P0,0 c15 T159,79 M15,67 c2 K7 r12 K7 r13 K7 r13 K7 M-45,-1 c15 T55,8 c6 M52,-1 T53,-1 c8 M4,-2"
3
  "T47,-27 C27,66,10M6,0 T11,-13 C205,207,56 u13 r11 M-6,7 c6 l3 d1 c15 M15,-11 T10,6 M14,0 T8,6"
4
  "C27,66,10 M-15,7T12,1 M14,0 T10,1 c1 M-13,-1 u6 r10 l4 d6M8,0 c1 u6 r8 l3 d6 M-42,-18 c4 m10,-10"
5
  "r27 m10,10 M-37,-9 T27,9 M-1,1 T29,8 M-1,1 T31,7 M-1,1 t33,6 M-1,1 T35,5 M-1,1 T37,4 M-1,1"
6
  "T39,3 M-1,1 T41,2 M-1,1 T43,1 M-1,1 r45 c3 M-34,7 K5 c1 k5 C114,81,21 M-43,21 T1,-23 C25,96,27"
7
  "M1,-29 K16 c2 M-9,5 K3 M17,-1 K3 M-5,4 K3 M4,0 K3 M-18,-9 K2 c14 M1,5 K2 M13,2 K2 M8,-4 K2"
8
  "c4 M-5,7 K1 M-16,-3 K2 M55,-12 C65,6,6 T4,-8 M32,-17 c14 C198,70,0 K10 c14 M-2,1 K7 C153,193,241"
9
  "M-58,-3 M-1,-2 K5 M5,0 K4 r8 K4 l25 K6 r5 K4";

(ist irgendwie ein lustiges Bildchen).

Wenn du hier postest, solltest du gezeigten Code, auch wenn es ein Array 
ist, mit Formatierungsregeln des Forums: code ... /code (in eckigen 
Klammern eingeschlossen) markieren damit das auch korrekt angezeigt 
wird.
von Thomas W. (datenreisender)


Lesenswert?

Ralph S. schrieb:
> Entsinnend an uralte Zeiten (sogar noch prä-MS-DOS) gab es etwas das
> sich Turtlegrafik nannte. Daran erinnernd habe ich einen (sehr) kleinen
> aber auch einfachen Interpreter für Mikrocontroller geschrieben,

Da kommen natuerlich Erinnerungen wieder hoch, aus der Disco-Zeit. 1982 
hatte das Byte-Magazine eine Ausgabe ueber Turtle-Graphic gemacht:

https://archive.org/details/byte-magazine-1982-08/mode/2up

Turtlegraphics war ganz eng verknuepft mit Logo, der Programmiersprache. 
Die hat dann Smalltalk beeinflusst, und das war der Beginn der 
KI-Programmierung.
von Dieter S. (ds1)


Lesenswert?

Thomas W. schrieb:
>
> Turtlegraphics war ganz eng verknuepft mit Logo, der Programmiersprache.
> Die hat dann Smalltalk beeinflusst, und das war der Beginn der
> KI-Programmierung.

Logo gibt es seit 1967, Lisp seit 1958. Siehe z.B. hier:

https://de.wikipedia.org/wiki/Lisp
von Ralph S. (jjflash)


Lesenswert?

Thomas W. schrieb:
> Da kommen natuerlich Erinnerungen wieder hoch, aus der Disco-Zeit. 1982
> hatte das Byte-Magazine eine Ausgabe ueber Turtle-Graphic gemacht:
>
> https://archive.org/details/byte-magazine-1982-08/mode/2up

daran merkt man, wie alt man ist...

Dieter S. schrieb:
> Logo gibt es seit 1967, Lisp seit 1958. Siehe z.B. hier:
>
> https://de.wikipedia.org/wiki/Lisp

und manche Sachen sind dann älter als man selbst
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

So, für die, die unbedingt Arduino machen wollen, habe ich das jetzt 
einmal umgebaut zu einer Library, damit das in Arduino auch schön 
aufgeräumt aussieht (Library im Anhang, zu installieren über den 
Bibliotheksverwalter. War relativ leicht, weil ich mich in letzter Zeit 
häufiger mit Libraryerstellung für Arduino (allerdings für einen anderen 
Controller) beschäftigt habe.

Ein Programm sieht jetzt so aus:
1
/* -------------------------------------------------------
2
                        logodraw_demo.c
3
                        
4
     Demoprogramm zum Turtlegrafik-Interpreter
5
6
     14.04.2025  R. Seelig
7
   ------------------------------------------------------ */
8
9
#include <Adafruit_GFX.h>
10
#include <Adafruit_ST7735.h>
11
#include "turtledraw.h"
12
13
// tft-Objekt für das Display erzeugen
14
#define TFT_CS     10           // PB2
15
#define TFT_RST    6            // PD6
16
#define TFT_DC     7            // PD7
17
18
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
19
20
// Objekt für den Turtlegrafik - Interpreter erzeugen
21
TURTLE turtle(tft);
22
23
24
static const char cmd[] PROGMEM = 
25
  "P0,0 c15 T159,79 M15,67 c2 K7 r12 K7 r13 K7 r13 K7 M-45,-1 c15 T55,8 c6 M52,-1 T53,-1 c8 M4,-2"
26
  "T47,-27 C27,66,10M6,0 T11,-13 C205,207,56 u13 r11 M-6,7 c6 l3 d1 c15 M15,-11 T10,6 M14,0 T8,6"
27
  "C27,66,10 M-15,7T12,1 M14,0 T10,1 c1 M-13,-1 u6 r10 l4 d6M8,0 c1 u6 r8 l3 d6 M-42,-18 c4 m10,-10"
28
  "r27 m10,10 M-37,-9 T27,9 M-1,1 T29,8 M-1,1 T31,7 M-1,1 t33,6 M-1,1 T35,5 M-1,1 T37,4 M-1,1"
29
  "T39,3 M-1,1 T41,2 M-1,1 T43,1 M-1,1 r45 c3 M-34,7 K5 c1 k5 C114,81,21 M-43,21 T1,-23 C25,96,27"
30
  "M1,-29 K16 c2 M-9,5 K3 M17,-1 K3 M-5,4 K3 M4,0 K3 M-18,-9 K2 c14 M1,5 K2 M13,2 K2 M8,-4 K2"
31
  "c4 M-5,7 K1 M-16,-3 K2 M55,-12 C65,6,6 T4,-8 M32,-17 c14 C198,70,0 K10 c14 M-2,1 K7 C153,193,241"
32
  "M-58,-3 M-1,-2 K5 M5,0 K4 r8 K4 l25 K6 r5 K4";
33
34
35
void setup()
36
{
37
  uint16_t color;
38
  
39
  tft.initR(INITR_BLACKTAB);
40
  color= tft.color565(0, 0, 0);        // schwarz
41
  tft.fillScreen(color);               
42
  tft.setRotation(1);                  // vertikale Displayausrichtung
43
  tft.setTextSize(1);  
44
45
  color= tft.color565(255, 255, 0);    // gelb
46
  tft.setTextColor(color);     
47
  tft.setCursor(10,119);
48
  tft.print("www.mikrocontroller.net");
49
  turtle.cmd_parse(cmd);
50
}
51
52
void loop() 
53
{
54
}
von Markus B. (dalotel)


Lesenswert?

Habs zwar noch nicht ausprobiert, aber werde das in Kürze gebrauchen.
Deshalb von mir schon mal im Voraus vielen Dank für deine Arbeit.
Super Sache, sowas kann man immer wieder mal gebrauchen.
von Horst (alteskind)


Lesenswert?

Ich habe jetzt deine Arduino Library ausprobiert und es läuft nicht. Wie 
kann das sein? Hat das irgendwer außer Ralph schon getest?

Kann es sein dass mein Display defekt ist? Allerdings leuchtet es hell 
ohne erkennbaren Inhalt. Es ist ein 128x160 Display. Die Verdrahtung mit 
DIO, CLK etc. habe ich sehr oft kontrolliert und die stimmt.

Das Beispiel aus der Arduino Library compiliert und überträgt auch in 
meinen Arduino. Auf keinem meiner beiden Boards funktioniert es. Die 
Boards selbst sind intakt, ich kann an jedem Anschluß der beteiligt ist 
eine LED blinken lassen.

Auf dem Display steht: 1.8 SPI 128x160 und 1.8 TFT MODULE. Auf der 
Unterseite stehen sehr kleine Tabellen und ILI9163.

Ich muß dazu sagen, dass ich das Display noch nie zum Funktionieren 
gebracht habe (warum es immer wieder in der Schublade lag). Vielleicht 
sollte ich es wegwerfen.
von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Horst schrieb:
> Auf dem Display steht: 1.8 SPI 128x160 und 1.8 TFT MODULE. Auf der
> Unterseite stehen sehr kleine Tabellen und ILI9163.

Ach herjeh, das ist ja ein "uralt" Display (was nicht heißen muß, dass 
das schlecht ist).

Meine Demo zum Turtlegrafikinterpreter verwendet ein ST7735 Display mit 
"Treiber" von Adafruit, wie man hier sehen kann:
1
// tft-Objekt für das Display erzeugen
2
#define TFT_CS     10           // PB2
3
#define TFT_RST    6            // PD6
4
#define TFT_DC     7            // PD7
5
6
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

Ein ST7735 Display ist dem ILI9163 sehr ähnlich, auch in den 
Steuerkommandos, aber eben nur sehr ähnlich. Die Initsequenzen sind 
jedoch komplett unterschiedlich, was der Grund sein dürfte, warum das 
bei dir nicht funktioniert.

Horst schrieb:
> Das Beispiel aus der Arduino Library compiliert und überträgt auch in
> meinen Arduino.

Die Arduino-Libraries hast du scheinbar schon korrekt installiert, sonst 
würde dein Code nicht compilieren. Meines Wissens nach hat Adafruit nie 
ein ILI9163 Display vertrieben, was wohl der Grund dafür sein dürfte, 
dass es auch keinen Arduino-Treiber dafür gibt.

Jetzt habe ich in meinem Sammelsurium noch ein ILI9163 Display gefunden 
und auf die Schnelle (wirklich auf die Schnelle) die originale Adafruit 
Library  für ST7735 mit den Initsequenzen des ILI9163 versehen und eine 
"neue" Library daraus erstellt. Damit funktionieren augenscheinlich die 
Funktionen des originalen Treibers auch auf einem ILI9163 Display. Die 
Library findest du hier im Anhang und mußt du wie bei Arduino üblich 
über die Bibliothekenverwaltung installieren. Danach sollte auch dein 
Display, so es keinen Defekt hat, funktionieren.

Dein Sketch für den Turtlegrafikinterpreter sieht dann so aus (nur die 
Instanziierung des Displaytreibers geändert):
1
/* -------------------------------------------------------
2
                        logodraw_demo_ili9163.c
3
                        
4
     Demoprogramm zum Turtlegrafik-Interpreter
5
6
     15.04.2025  R. Seelig
7
   ------------------------------------------------------ */
8
9
#include <Adafruit_GFX.h>
10
#include <Adafruit_ILI9163.h>
11
#include "turtledraw.h"
12
13
// tft-Objekt für das Display erzeugen
14
#define TFT_CS     10           // PB2
15
#define TFT_RST    6            // PD6
16
#define TFT_DC     7            // PD7
17
18
Adafruit_ILI9163 tft = Adafruit_ILI9163(TFT_CS, TFT_DC, TFT_RST);
19
20
// Objekt für den Turtlegrafik - Interpreter erzeugen
21
TURTLE turtle(tft);
22
23
24
static const char cmd[] PROGMEM = 
25
  "P0,0 c15 T159,79 M15,67 c2 K7 r12 K7 r13 K7 r13 K7 M-45,-1 c15 T55,8 c6 M52,-1 T53,-1 c8 M4,-2"
26
  "T47,-27 C27,66,10M6,0 T11,-13 C205,207,56 u13 r11 M-6,7 c6 l3 d1 c15 M15,-11 T10,6 M14,0 T8,6"
27
  "C27,66,10 M-15,7T12,1 M14,0 T10,1 c1 M-13,-1 u6 r10 l4 d6M8,0 c1 u6 r8 l3 d6 M-42,-18 c4 m10,-10"
28
  "r27 m10,10 M-37,-9 T27,9 M-1,1 T29,8 M-1,1 T31,7 M-1,1 t33,6 M-1,1 T35,5 M-1,1 T37,4 M-1,1"
29
  "T39,3 M-1,1 T41,2 M-1,1 T43,1 M-1,1 r45 c3 M-34,7 K5 c1 k5 C114,81,21 M-43,21 T1,-23 C25,96,27"
30
  "M1,-29 K16 c2 M-9,5 K3 M17,-1 K3 M-5,4 K3 M4,0 K3 M-18,-9 K2 c14 M1,5 K2 M13,2 K2 M8,-4 K2"
31
  "c4 M-5,7 K1 M-16,-3 K2 M55,-12 C65,6,6 T4,-8 M32,-17 c14 C198,70,0 K10 c14 M-2,1 K7 C153,193,241"
32
  "M-58,-3 M-1,-2 K5 M5,0 K4 r8 K4 l25 K6 r5 K4";
33
34
35
void setup()
36
{
37
  uint16_t color;
38
  
39
  tft.initR(INITR_BLACKTAB);
40
  color= tft.color565(0, 0, 0);        // schwarz
41
  tft.fillScreen(color);               
42
  tft.setRotation(1);                  // vertikale Displayausrichtung
43
  tft.setTextSize(1);  
44
45
  color= tft.color565(255, 255, 0);    // gelb
46
  tft.setTextColor(color);     
47
  tft.setCursor(10,119);
48
  tft.print("www.mikrocontroller.net");
49
  turtle.cmd_parse(cmd);
50
}
51
52
void loop() 
53
{
54
}

Kann es sein, dass du noch nie etwas mit TFT-Displays gemacht hast, bzw. 
noch nie eines zum Funktionieren gebracht hast? :-) immer schön daran 
denken, dass das, was aus China kommt und gleich aussieht nicht immer 
auch gleich ist!
von Christoph M. (mchris)


Lesenswert?

Eigentlich sollte ein Demo ja auf dem Wokwi-Simulator laufen:
https://wokwi.com/projects/320027251914572370
von Horst (alteskind)


Lesenswert?

Hallo Ralph und "holla die Waldfee", das hat jetzt wirklich mit deiner 
ILI9163 Library funktioniert und ich kann meinen Grafikstring auf den 
Display sehen.

Natürlich habe ich schon etwas mit Displays gemacht Textdisplay und auch 
s/w Oled Display mit I2c, aber ein Farbdisplay hatte ich bisher noch nie 
zum Funktionieren gebracht.

Ich freu mich und vielen Dank für Deine Arbeit,

Horst
von Ralph S. (jjflash)


Lesenswert?

Horst schrieb:
> Hallo Ralph und "holla die Waldfee", das hat jetzt wirklich mit deiner
> ILI9163 Library funktioniert und ich kann meinen Grafikstring auf den
> Display sehen.

Freut mich sehr, dass das bei dir jetzt funktioniert hat.

Mit der Adafruit_ILI9163 wirst du dann jetzt wohl auch einiges anderes 
mit dem Display anstellen können.

Viele Grüße,
Ralph
von Lutz S. (lutzs)


Angehängte Dateien:

Lesenswert?

Interessantes Projekt, vielen Dank.

Auf meinem Tisch lag gerade ein ESP32 mit einem OLED-Display 480x240, 
das für ein anderes Projekt über die TFT_eSPI Library angesteuert wurde. 
Die erforderlichen Änderungen im Programm beschränkten sich auf die 
ersten Zeilen für die Definition des Displays und die Befehle in 
setup(). Alles andere funktionierte sofort.

Im Anhang die main.cpp Datei für Arduino mit PlatformIO und VSCode.
von Lutz S. (lutzs)



Lesenswert?

Bin da durch Zufall noch auf ein Problem gestossen: durch Fehlbedienung 
im Editor hatte ich einen Kreis mit Radius 0 erzeugt, der dann durch 
einen Kreis mit Radius 13 überschrieben wurde (siehe Screenshot).

Eigentlich kein Problem, allerdings führte der Befehl K0 dazu, dass 
anschliessend im Programm nichts mehr gezeichnet wurde.

Habe das erst mal abgefangen, vielleicht gibt es aber auch eine bessere 
Lösung:

     case 'k' :
       {
         str = cmd_getonearg(str, &arg1);
         if (arg1 > 0)
           drw_circle(drw_aktx, drw_akty, arg1, drw_color);
         break;
       }

     case 'K' :
       {
         str = cmd_getonearg(str, &arg1);
         if (arg1 > 0)
           drw_fillcircle(drw_aktx, drw_akty, arg1, drw_color);
         break;
       }

Das hier verwendete Display war übrigens OLED mit ILI9341, 320 x 240 
Pixel.

Pindefinition in der der Datei User_setup.h:

#define TFT_MISO 12
#define TFT_MOSI 13
#define TFT_SCLK 14
//#define TFT_CS   15
#define TFT_DC    2
#define TFT_RST   4
: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Lutz S. schrieb:
> Bin da durch Zufall noch auf ein Problem gestossen: durch Fehlbedienung
> im Editor hatte ich einen Kreis mit Radius 0 erzeugt, der dann durch
> einen Kreis mit Radius 13 überschrieben wurde (siehe Screenshot).

Oha... eigentlich dürfte im Generator ein k0 oder auch K0 gar nicht 
auftauchen. :-) wie  hast du denn das erreicht!

Deine Lösung um das Abzufangen werde ich übernehmen!
von Lutz S. (lutzs)


Lesenswert?

Das war wirklich Zufall, ich hatte nach dem Rechteck einen Kreis 
zeichnen wollen und zwei Mal auf denselben Punkt geklickt statt die Maus 
entsprechend der Größe zu verschieben.
: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Lutz S. schrieb:
> Das war wirklich Zufall, ich hatte nach dem Rechteck einen Kreis
> zeichnen wollen und zwei Mal auf denselben Punkt geklickt statt die Maus
> entsprechend der Größe zu verschieben.

Puuuuuh, da muß ich dann noch einmal das Java-Script durchgehen, wie das 
passieren kann (und das abfangen).
von Ralph S. (jjflash)


Lesenswert?

@Lutz

So, ich habe mir das jetzt angesehen und das "Problem" ist, dass bei 
einem Klick auf den Ausgangspunkt (bei Circle und bei Rectangle), ein 
einzelner Pixel auf diesen Ausgangspunkt gesetzt wird.

Diesen Sonderfall habe ich im Interpreter des Controllers nicht bedacht 
und ich denke, dass ich das heute abend beheben werde und dann hier 
einstellen.

Deine Lösung bei k0 und K0 das eben nicht zu zeichnen ist eine 
Möglichkeit. Damit das aber konsistent mit dem Generator ist, werde ich 
das so abändern, dass eben genau ein solcher einzelner Pixel gezeichnet 
wird.

By the way: ich freue mich, dass Du den Generator getestet hast.
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.