Benutzte Hardware:
Arduino Uno ATmega 328 - compatibles Board von AZ-Delivery
ARD SDH 2,8 TD TFT-Display mit SD-Kartensteckplatz von Reichelt
Das Display hat 320 x 240 Pixel.
Ich möchte eine Reihe von Quadraten anzeigen. Jedes soll 13x13 Pixel groß sein.
Wenn das erste Quadrat an der Position 0,0 angezeigt wird und das nächste an der Position 14,0 müsste dazwischen ein Leerraum von einem Pixel bleiben.
Die weiteren Quadrate sollen jeweils 14 Pixel weiter (also 28,0 42,0 56,0 usw.)
gezeichnet werden.
Der Zwischenraum von einem Pixel ist jedoch nur zwischen den ersten beiden Quadraten sichtbar. Danach kommt es zu Überschneidungen.
Hier der Testsketch:
//////////////////////////////////////////////
// Test verschiedene //
// Grafik //
// //
/////////////////////////////////////////////
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define WEISS 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); //Pins für Display festlegen und Namen "tft"
#define Vierk (tft.drawRect(X, Y, X+13, Y+13, WEISS)) //Setzt einen Quadrat 13 Pixel an Position X,Y
void setup()
{
int X;
int Y;
tft.reset();
tft.begin(0x9341); //Diese Nummer ist für mein Display richtig!!!!
tft.setRotation(3);
tft.fillScreen(BLACK);
//14er Raster Vierecke
tft.fillScreen(BLACK);
Y = 0; //für alle
X = 0;
Vierk;
X = 14;
Vierk;
X = 28;
Vierk;
X = 42;
Vierk;
X = 56;
Vierk;
X = 70;
Vierk;
X = 84;
Vierk;
X = 98;
Vierk;
X = 112;
Vierk;
X = 126;
Vierk;
X = 140;
Vierk;
X = 154;
Vierk;
X = 168;
Vierk;
X = 182;
Vierk;
X = 196;
Vierk;
X = 210;
Vierk;
X = 224;
Vierk;
X = 238;
Vierk;
X = 252;
Vierk;
X = 266;
Vierk;
X = 280;
Vierk;
X = 294;
Vierk;
X = 308;
Vierk;
while (1);
}
void loop() {
// put your main code here, to run repeatedly:
}
Mach das gleiche im tft.setRotation(0)
Die Display sind 240 x 320 Pixel Auflösung es ist ein Porträt Display deshalb wird in der Lib umgerechnet und es kommt zum Umrechnungsfehler.
Guck dir das genau an dann wirst du feststellen das die 2 und 3 ist nicht 13 und13 nur 14 und 12.
Das Phänomen habe ich auch beobachtet, wen man die einzeln zeichnet ist alles iO. 1 Pxel hat 3 Farben RGB wen du 320 / 3 ist 106,6666 daher kommt zu Fehler
Ich hab nochmal weiter probiert. Auch wenn ich die Quadratgröße zu 8X8 ändere gibt es Überlagerungen obwohl die Schrittweite für das nächste Quadrat bei 14 Pixel bleibt.
Mir ist schon eingefallen bei den Beispielen egal welsche Lib das war, niemals wird genommen weniger als 3 Pixel abstand wen die das so wie du ,oder mit for Schleife machen
Baue das Morgen nach
Ja dicker Denkfehler, auch meinerseits gestern ;
#define Vierk (tft.drawRect(X, Y, X+13, Y+13, WEISS))
solche Konstruktion geht nur ein mall warum ?
drawRect(x, y, w, h, color)
Mach dein Probesketch so wie unten danach funktioniert es
//////////////////////////////////////////////
// Test verschiedene //
// Grafik //
// //
/////////////////////////////////////////////
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define BLAU 0x001F
#define ROT 0xF800
#define GRUEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define GELB 0xFFE0
#define WEISS 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); //Pins für Display festlegen und Namen "tft"
#define Vierk (tft.drawRect(X, Y, 13, 13, WEISS)) //Setzt einen Quadrat 13 Pixel an Position X,Y
void setup()
{
int X;
int Y;
tft.reset();
tft.begin(0x9341); //Diese Nummer ist für mein Display richtig!!!!
tft.setRotation(3);
tft.fillScreen(BLACK);
//14er Raster Vierecke
tft.fillScreen(BLACK);
Y = 0; //für alle
X = 0;
Vierk;
X = 14;
Vierk;
X = 28;
Vierk;
X = 42;
Vierk;
X = 56;
Vierk;
X = 70;
Vierk;
X = 84;
Vierk;
X = 98;
Vierk;
X = 112;
Vierk;
X = 126;
Vierk;
X = 140;
Vierk;
X = 154;
Vierk;
X = 168;
Vierk;
X = 182;
Vierk;
X = 196;
Vierk;
X = 210;
Vierk;
X = 224;
Vierk;
X = 238;
Vierk;
X = 252;
Vierk;
X = 266;
Vierk;
X = 280;
Vierk;
X = 294;
Vierk;
X = 308;
Vierk;
while (1);
}
void loop() {
// put your main code here, to run repeatedly:
}
Diesmal war es nicht das Display sondern meine eigene Blödheit. Die Quadrate wurden ja jedesmal größer.
Der Fehler war entstanden, weil ich vorher Dreiecke konstruiert habe als Windpfeile (16 Stück für 16 verschiedene Windrichtungen). Dann sollten die nur noch schnell Rahmen bekommen...