Simatic ET200 SP


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Touchscreen - Schaltzentrale

(Eine Schaltung mit Arduino und TFT-LCD Touchscreen)


Schaltzentrale


In dem Versuch tritt das kleine 2,4“ TFT-LCD-Touch-Display (320x240) als eine Schaltzentrale auf. Trotz kleiner Abmessungen (71 x 52 mm) eignet es sich das Display dafür sehr gut, einige Abnehmer via Fingerdruck anzusteuern. Bei einem Touch-Display handelt es sich um ein Gespann, das grundsätzlich aus zwei Komponenten besteht. Dabei sind die Aufgaben der beiden Komponenten sehr unterschiedlich. Während das Display ein Ausgabegerät, mit dem Texte und Bilder dargestellt werden können, darstellt, ist das auf dem Display angebrachte Touchpad ein Eingabegerät, mit dem die Wünsche des Nutzers registriert werden.
Mit unserer Schaltzentrale werden via Fingerdruck farbige Leuchtdioden ein- und ausgeschaltet.

Arduino Mega ohne Shield

Arduino Mega

Um Verdrahtung der einzelnen Komponenten zu minimieren bzw. ganz auszuschließen, werden in der Arduino-Welt oft sogenannte Shields verwendet. Dabei handelt es sich um fertige elektronische Platinen, die so konstruiert sind, dass sie direkt auf die Steckleisten des Arduino aufgesteckt werden können.

Arduino Mega mit Display-Shield

Arduino Mega mit aufgestecktem Display-Shield.

Das hier eingesetzte Touch-Display ist ein solches Shield. Es kann zusammen mit Arduino Uno oder Mega benutzt werden. Die relevanten Anschlüsse sind bei beiden Arduino-Modellen identisch ausgeführt.

Schaltplan

Schaltplan



Testschaltung

Testschaltung



Das Programm (Sketch)

Bevor man die Touch-Funktionen des Moduls anwenden kann, muss es kalibriert werden. Für das eigentliche Programm (Sketch) wird unter anderen die Bibliothek „MCUFRIEND_kbv.h“ benötigt. Die Bibliothek wird mithilfe des Bibliothekverwalters installiert. Nach erfolgreicher Installation stehen mehrere Test- und Hilfsprogramme zur Verfügung. Sie findet man unter Datei/Beispiele/ MCUFRIEND_kbv.

Bibliothek MCUFRIEND_kbv.h

Installation der Bibliothek MCUFRIEND_kbv.h

Für die Kalibrierung wird das Programm „TouchScrenn_Calibr_native“ verwendet. Das Programm wird in Arduino hochgeladen und gestartet. Davor wird das Display-Shield aufgesteckt.
Man folgt anschließend den Anweisungen auf dem Bildschirm. Vor der Kalibrierung soll der serielle Monitor gestartet werden.
Die Ergebnisse der Kalibrierung werden anschließend in das eigentliche Programm übernommen.

Ergebnisse der Kalibrierung

Ergebnisse der Kalibrierung (Serieller Monitor)

// -------------------------------------------------------------------------------------
// Arduino - Sketch
// Touchscreen - Schaltzentrale
// Mit Arduino Mega 2560 R3, TFT LCD 320x240
//
// MCUFRIEND_kbv.h - V 2.9.9
// Adafruit_GFX.h - V 1.5.3
// TouchScreen.h - V 1.0.3
// Arduino IDE - V 1.8.13
// -------------------------------------------------------------------------------------

#include <Adafruit_GFX.h>                                // Bibliotheken
#include <MCUFRIEND_kbv.h>
#include <TouchScreen.h>

MCUFRIEND_kbv tft;

#define MinDruck 200
#define MaxDruck 1000

#define BLACK   0x0000                                   // Farben Hexadezimal
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

int LED_rot = 23;                                        // Ausgangsnummern für die LEDs
int LED_blau = 25;
int LED_gruen = 27;
int LED_gelb = 29;
int LED_weiss = 31;

const int XP = 8, XM = A2, YP = A3, YM = 9;              // Kalibrierungswerte
const int TS_LEFT = 70, TS_RT = 895, TS_TOP = 929, TS_BOT = 100;

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button red_button, 
                    blue_button,
                    green_button,
                    yellow_button,
                    white_button,
                    alle_button,
                    aus_button;
int pixel_x, pixel_y;  

bool Touch_getXY(void)
{
    TSPoint p = ts.getPoint();
    pinMode(YP, OUTPUT);      
    pinMode(XM, OUTPUT);
    digitalWrite(YP, HIGH);   
    digitalWrite(XM, HIGH);
    bool pressed = (p.z > MinDruck && p.z < MaxDruck);
    if (pressed) {
        pixel_x = map(p.y, TS_LEFT, TS_RT, 0, 320); 
        pixel_y = map(p.x, TS_TOP, TS_BOT, 0, 240);
    }
    return pressed;
}

void LEDs_AUS () {                                       // Alle LEDs aus
    digitalWrite(LED_rot,LOW);
    digitalWrite(LED_blau,LOW);
    digitalWrite(LED_gruen,LOW);
    digitalWrite(LED_gelb,LOW);
    digitalWrite(LED_weiss,LOW); 
    }

void setup(void)                                         // SetUp
{
    pinMode(LED_rot, OUTPUT);
    pinMode(LED_blau, OUTPUT);
    pinMode(LED_gruen, OUTPUT);
    pinMode(LED_gelb, OUTPUT);
    pinMode(LED_weiss, OUTPUT);
    tft.begin(0x9341);
    tft.setRotation(1);                                  // Ausrichtung
    tft.fillScreen(BLUE);                                // Hintergrundfarbe
    red_button.initButton(&tft,  65, 35, 120, 50, WHITE, RED, BLACK, "ROT", 3);
    red_button.drawButton(false);
    blue_button.initButton(&tft, 110, 140, 100, 40, WHITE, BLUE, YELLOW, "BLAU", 2);
    blue_button.drawButton(false);
    green_button.initButton(&tft,  240, 130, 120, 50, WHITE, GREEN, WHITE, "GRUEN", 3);
    green_button.drawButton(false);
    yellow_button.initButton(&tft,  120, 200, 180, 50, WHITE, YELLOW, BLACK, "YELLOW", 3);
    yellow_button.drawButton(false);
    white_button.initButton(&tft,  95, 90, 90, 30, BLACK, WHITE, RED, "WEISS", 1);
    white_button.drawButton(false);   
    alle_button.initButton(&tft, 280, 215, 70, 40, WHITE, MAGENTA, BLACK, "ALLE", 2);
    alle_button.drawButton(false);    
    aus_button.initButton(&tft, 30, 130, 50, 30, WHITE, CYAN, BLACK, "AUS", 2);
    aus_button.drawButton(false);    
    tft.setTextSize(2);                                  // Schriftgrösse
    tft.setTextColor(CYAN);                              // Textfarbe
    tft.setCursor(160, 30);                              // Cursorposition
    tft.print("Touchscreen");
    tft.setCursor(145, 50);
    tft.print("Schaltzentrale"); 
}

void loop(void)
{
    bool down = Touch_getXY();
    red_button.press(down && red_button.contains(pixel_x, pixel_y));
    blue_button.press(down && blue_button.contains(pixel_x, pixel_y));
    green_button.press(down && green_button.contains(pixel_x, pixel_y));
    yellow_button.press(down && yellow_button.contains(pixel_x, pixel_y));
    white_button.press(down && white_button.contains(pixel_x, pixel_y));
    alle_button.press(down && alle_button.contains(pixel_x, pixel_y));
    aus_button.press(down && aus_button.contains(pixel_x, pixel_y));
    if (red_button.justReleased()) red_button.drawButton();
    if (blue_button.justReleased()) blue_button.drawButton();
    if (green_button.justReleased()) green_button.drawButton();
    if (yellow_button.justReleased()) yellow_button.drawButton();
    if (white_button.justReleased()) white_button.drawButton();
    if (alle_button.justReleased()) alle_button.drawButton();
    if (aus_button.justReleased()) aus_button.drawButton();

    if (red_button.justPressed()) {
        LEDs_AUS ();
        digitalWrite(LED_rot,HIGH);
    }
    if (blue_button.justPressed()) {
        LEDs_AUS ();
        digitalWrite(LED_blau,HIGH);
    }
    if (green_button.justPressed()) {
        LEDs_AUS ();
        digitalWrite(LED_gruen,HIGH);        
    }    
    if (yellow_button.justPressed()) {
        LEDs_AUS ();
        digitalWrite(LED_gelb,HIGH);    
    }
    if (white_button.justPressed()) {
        LEDs_AUS ();
        digitalWrite(LED_weiss,HIGH);    
    }    
    if (alle_button.justPressed()) {
        digitalWrite(LED_rot,HIGH);
        digitalWrite(LED_blau,HIGH);
        digitalWrite(LED_gruen,HIGH);
        digitalWrite(LED_gelb,HIGH);
        digitalWrite(LED_weiss,HIGH);    
    }    
    if (aus_button.justPressed()) {
        LEDs_AUS ();    
    }    
}
// -------------------------------------------------------------------------------------


Kurzvideo

Kurzvideo: Touchscreen-Schaltzentrale


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz