[Erledigt] Uno Wifi + LCD geht nicht

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?

Dein Problem liegt anscheinend hier:

-->Der Uno kann über seine serielle oder die I2C-Schnittstelle mit dem ESP kommunizieren.
Wahrscheinlich ist es bei Dir so eingestellt, dass er die I2C-Schnittstelle nutzt, also A4 und A5.
Allerdings "missbrauchst" Du A4 schon für LCD_RESET, daher die Fehlfunktion. Lösung: Für das Display einen anderen Pin nutzen :wink:

Du bist definitiv der Held des Tages :slight_smile: Ich hatte den RESET-Pin auch schon im Verdacht - aber ein Verlegen von A4 auf A5 hatte keine Besserung gebracht ... jetzt ist auch klar warum :smiley:

Die SD-Karte des Displays will ich eh nicht nutzen ... also kann ich einfach einen der Pins, die eigentlich dafür vorgesehen sind, für RESET nutzen. Habe die Verdrahtung also auf Pin 11 geändert und was soll ich sagen: es klappt :slight_smile: Merci! Zumindest klappt die Kommunikation über die Konsole schon ... jetzt muss ich noch den REST Aufruf hinbekommen ... aber das sollte nicht sooo schwer sein :wink:

Schön, dass geholfen werden konnte und der Spaß nun funktioniert (y)