Turtlegrafik: Interpreter, Creator & Designer

OP #8035779
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).

Angehängte Dateien:
OP #8036019
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!

Angehängte Dateien:
#8036060
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!

OP #8036082
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.

Angehängte Dateien:
Gast #8036090
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.

OP #8036110
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

OP #8036112
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
}
Angehängte Dateien:
#8036605
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.

OP #8036705
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!

Angehängte Dateien:
#8037454
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

OP #8038307
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

#8039832
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.

Angehängte Dateien:
#8039925
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:

1
 case 'k' :
2
   {
3
     str = cmd_getonearg(str, &arg1);
4
     if (arg1 > 0)
5
       drw_circle(drw_aktx, drw_akty, arg1, drw_color);
6
     break;
7
   }
8

9
 case 'K' :
10
   {
11
     str = cmd_getonearg(str, &arg1);
12
     if (arg1 > 0)
13
       drw_fillcircle(drw_aktx, drw_akty, arg1, drw_color);
14
     break;
15
   }

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
OP #8039985
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!

OP #8040017
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren