Danke noch einmal an alle beteiligten !
Ich gebe an der Stelle auf - mir die fehlt einfach die Intelligenz für das
“umprogrammieren” anderen Fonts auf das GFX Format.
Mittlerweile habe ich ein Onlienetool gefunden, welches ttf Schriften in die GFX Fonts konvertiert.
die Schrifthöhe kann frei gewählt werden und die Fonts sind direkt importierbar.
Freie ttf Schriften gibt es im Web mehr als genug.
Auf dieser Weise habe ich dann auch ein Siebensegment Font für meine Anwendung erstellen
können.
Noch eine Frage an die Profis :
gibt es für die Arduinos auch eine Bibliothek die Framebuffer bei TFT ( 3,5") ünterstützt ?
Die GFX von Adafriut kann das nicht.
Ich habe auch noch mit einen Flackern bei der Aktualisierung der Werte auf das Display zu kämpfen.
Es soll eine einfache Anzeige der Strom / Spannung / Leistung für älteres Labornetzteil werden, wo das
Anzeigemodul ausgefallen ist.
Herzstück ist ein INA 219 und ein Arduino plus 3,5" TFT Display.
Alles war noch in der “Bastelkiste” vorhanden und ich wollte es gern dafür verwenden.
Hier der Code zur ersten Info (rudimentär und noch nicht “schön” und abgeschlossen).
#include <Wire.h>
#include <INA219.h> // by GitHub
#include <Adafruit_GFX.h> // Core graphics library
#include <MCUFRIEND_kbv.h> // Hardware-specific library
MCUFRIEND_kbv tft;
#include <Fonts/FreeSans30pt7b.h>
//color definitions
#define BLACK 0x0000 /* 0, 0, 0 */
#define NAVY 0x000F /* 0, 0, 128 */
#define DARKGREEN 0x03E0 /* 0, 128, 0 */
#define DARKCYAN 0x03EF /* 0, 128, 128 */
#define MAROON 0x7800 /* 128, 0, 0 */
#define PURPLE 0x780F /* 128, 0, 128 */
#define OLIVE 0x7BE0 /* 128, 128, 0 */
#define LIGHTGREY 0xC618 /* 192, 192, 192 */
#define DARKGREY 0x7BEF /* 128, 128, 128 */
#define BLUE 0x001F /* 0, 0, 255 */
#define GREEN 0x07E0 /* 0, 255, 0 */
#define CYAN 0x07FF /* 0, 255, 255 */
#define RED 0xF800 /* 255, 0, 0 */
#define MAGENTA 0xF81F /* 255, 0, 255 */
#define YELLOW 0xFFE0 /* 255, 255, 0 */
#define WHITE 0xFFFF /* 255, 255, 255 */
#define ORANGE 0xFDA0 /* 255, 180, 0 */
#define GREENYELLOW 0xB7E0 /* 180, 255, 0 */
#define PINK 0xFC9F
#define GREY 0x8410
INA219 ina;
float old_value1,old_value2,old_value3;
void setup() {
// Serial.begin(115200);
// Default INA219 address is 0x40
ina.begin();
old_value1 = ina.readBusVoltage(); // Update old_value only if it is changed
old_value2 = ina.readShuntCurrent(); // Update old_value only if it is changed
old_value3 = ina.readBusPower(); // Update old_value only if it is changed
// Configure INA219
ina.configure(INA219_RANGE_32V, INA219_GAIN_320MV, INA219_BUS_RES_10BIT, INA219_SHUNT_RES_10BIT_1S);
// Calibrate INA219. Rshunt = 0.1 ohm, Max excepted current = 2A
ina.calibrate(0.104, 2); // adjust
uint16_t ID = tft.readID();
if (ID == 0xD3) ID = 0x9481;
tft.begin(ID);
tft.setRotation(1);
tft.fillScreen(BLACK);
tft.setTextColor(GREENYELLOW);
tft.setFont(&FreeSans30pt7b);
tft.setTextSize(1);
tft.setCursor(230, 120);
tft.print(" W ");
tft.setCursor(230, 200);
tft.print(" A ");
tft.setCursor(230, 280);
tft.print(" V ");
}
void loop()
{
ina.readBusVoltage();
ina.readShuntCurrent();
ina.readBusPower();
if (ina.readBusVoltage() != old_value1)
{
tft.fillRect(30,145, 225, 60,BLACK);
tft.setCursor(30 ,280);
tft.print(ina.readBusVoltage(),2);
}
if (ina.readShuntCurrent() != old_value2)
{
tft.fillRect(30,145, 210, 60,BLACK);
tft.setCursor(30, 200);
tft.print(ina.readShuntCurrent(),2);
}
if(ina.readBusPower() != old_value3)
tft.fillRect(30,65, 210, 60,BLACK);
tft.setCursor(30,120);
tft.print(ina.readBusPower(),2);
}
}
So fürs Erste “läuft” das erst einmal - aber die Ausgabe auf dem Display ist noch nicht optimal.
Die “Geisterschrift” habe ich durch Unterlegen eines schwarzen Rechtecks unterdrücken können.
Das geht so weit - aber das Flackern ist doch etwas nervig zumal bei nicht stabiler Eingangsgröße
die Anzeige auch entsprechend aktualisiert wird bzw. dann auch flackert.
Die Ausgabe auf das Display habe ich schon auf zwei Nachkommastellen begrenzt - bringt aber nichts.
Anscheinend wird “intern” mit noch mehr Nachkommastellen gerechnet (mehr als die Zwei bis Drei für das Dispaly) und das erklärt auch das Flackern der Anzeige obwohl die angezeigte Werte auf dem Display stabil sind.
Kann ich auch Variablen : old_value1 - old_value3 auf max. 2 oder 3 Nachkommastellen begrenzen ?
Wenn ja wie ?
Noch eine Idee ?
Nochmals vielen Dank und viele Grüße !