Hallo,
ich habe hier einen Arduino Uno Wifi (mit integriertem ESP) und zusätzlich ein TFT Touche Display.
Die Ansteuerung des Touch-Displays funktioniert inzwischen:
// --------------------------
// TFT Bibliotheken einbinden
// --------------------------
#include <stdint.h>
#include "TFTLCD.h"
#include "TouchScreen.h"
#include <Wire.h>
#include <UnoWiFiDevEd.h>
// -----------------------------
// Defines für die Konfiguration
// -----------------------------
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define YP A3 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 9 // can be a digital pin
#define XP 8 // can be a digital pin
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
#define MINPRESSURE 10
#define MAXPRESSURE 1000
// ---------------------------------
// einige Standard-Farben definieren
// ---------------------------------
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
// ---------------------------
// definieren der GUI-Elemente
// ---------------------------
#define Button1_X 20
#define Button1_Y 60
#define Button1_W 130
#define Button1_H 70
#define Button1_C BLUE
#define Button2_X 170
#define Button2_Y 60
#define Button2_W 130
#define Button2_H 70
#define Button2_C BLUE
#define Button3_X 20
#define Button3_Y 150
#define Button3_W 130
#define Button3_H 70
#define Button3_C BLUE
#define Button4_X 170
#define Button4_Y 150
#define Button4_W 130
#define Button4_H 70
#define Button4_C BLUE
// TFT und Touch Objekte anlegen
TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
int iButton;
// ----------------------
// Programm initialiseren
// ----------------------
void setup(void) {
tft.reset();
tft.initDisplay();
tft.setRotation(1);
tft.fillScreen(BLACK);
drawButtons();
pinMode(13, OUTPUT);
Wifi.begin();
}
// -------------
// Main-Schleife
// -------------
void loop(void) {
int x;
int y;
digitalWrite(13, HIGH);
Point p = ts.getPoint();
digitalWrite(13, LOW);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
// Anpassen der analogen Messwerte auf die Display-Größe
// durch das Rotieren der Anzeige ist x und y vertauscht!
y = map(p.x, TS_MINX, TS_MAXX, 0, tft.height());
x = map(p.y, TS_MINY, TS_MAXY, 0, tft.width());
// Prüfen, ob ein Button gedrückt wurde
if ( (x>Button1_X) && (x<Button1_X+Button1_W) && (y>Button1_Y) && (y<Button1_Y+Button1_H) ){
downButton(1);
}
if ( (x>Button2_X) && (x<Button2_X+Button2_W) && (y>Button2_Y) && (y<Button2_Y+Button2_H) ){
downButton(2);
}
if ( (x>Button3_X) && (x<Button3_X+Button3_W) && (y>Button3_Y) && (y<Button3_Y+Button3_H) ){
downButton(3);
}
if ( (x>Button4_X) && (x<Button4_X+Button4_W) && (y>Button4_Y) && (y<Button4_Y+Button4_H) ){
downButton(4);
}
} else {
iButton = 0;
}
}
// ----------------------
// Button-Klick auswerten
// ----------------------
void downButton(int Button){
if (iButton!=Button){
tft.fillRect(1, 1, 300, 50, BLACK);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.setCursor(10,10);
tft.print(Button);
iButton=Button;
}
}
// ----------------
// Buttons zeichnen
// ----------------
void drawButtons(){
tft.fillRoundRect(Button1_X, Button1_Y, Button1_W, Button1_H, 10, Button1_C);
tft.fillRoundRect(Button2_X, Button2_Y, Button2_W, Button2_H, 10, Button2_C);
tft.fillRoundRect(Button3_X, Button3_Y, Button3_W, Button3_H, 10, Button3_C);
tft.fillRoundRect(Button4_X, Button4_Y, Button4_W, Button4_H, 10, Button4_C);
tft.setTextColor(WHITE);
tft.setTextSize(5);
tft.setCursor(Button1_X + Button1_W/2 -10, Button1_Y + 15);
tft.println("1");
tft.setCursor(Button2_X + Button2_W/2 -10, Button2_Y + 15);
tft.println("2");
tft.setCursor(Button3_X + Button3_W/2 -10, Button3_Y + 15);
tft.println("3");
tft.setCursor(Button4_X + Button4_W/2 -10, Button4_Y + 15);
tft.println("4");
}
Das Problem ist nun, dass ich Wifi nicht nutzen kann. Ich habe im Beispiel oben nach der Initalisierung des TFT Wifi.begin() aufgerufen ... dadurch wird das Display aber weiß. Wenn ich Wifi.begin() vor der Initialisierung des Displays aufrufe geht es zwar (und Wifi.println() zum Beispiel geht auch) ... aber jeder andere Aufruf eine Wifi-Funktion führt sofort wieder zu einem weißen Display. Ich hab keine Ahnung, an welcher Stelle sich die beiden in die Quere kommen.
Der Sketch selbst friert auch nicht ein. Wenn ich loop zum Beispiel durch sowas ergänze:
delay(50);
Wifi.println("test");
delay(50);
sehe ich die Ausgabe auch in der Wifi-Konsole ... nur das Display will dann halt nicht mehr. Hat jemand einen Tip?