INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
LEDs mit Touchscreen steuern
07.09.2019, 22:48 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2019 23:13 von Bitklopfer.)
Beitrag #1
LEDs mit Touchscreen steuern
Hallo an alle Leser.
Ich bin neu hier im Forum und auch ein Neuling was den Arduino angeht.

Ich möchte einen LED Strip mit einem Touchscreen steuern. Für den Anfang Zeigt mir mein Touchscreen drei Balken (Rot, Grün, Blau), die ich per Touch vergrößern/verkleinern kann. Die LEDs ändern dabei auch ihre Farbe, nur nicht so wie sie es sollen. Ich habe das Gefühl, dass die einzelnen Farbwerte nicht richtig abgespeichert werden, finde aber bis jetzt keine Lösung.

Meine Hardware: Arduino Uno R3
APA102 60/m LED Strip
Elegoo 2.8" Touchscreen

Mein Programm:

Code:
#include <Elegoo_GFX.h>    
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.h>
#include <SPI.h>
#include <Adafruit_DotStar.h>

#define YP A3  // must be an analog pin
#define XM A2  // must be an analog pin
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

#define TS_MINX 120
#define TS_MAXX 900

#define TS_MINY 70
#define TS_MAXY 920

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

//LCD Farben
#define    BLACK   0x0000
#define    BLUE    0x001F
#define    RED     0xF800
#define    GREEN   0x07E0
#define WHITE   0xFFFF

Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

#define NUMPIXELS 11
#define BOXSIZE 30

int first = 2 ;
int last = 8 ;

Adafruit_DotStar strip = Adafruit_DotStar(NUMPIXELS, DOTSTAR_BGR) ;

uint32_t color;
uint8_t red = (color>>16) & 255;
uint8_t green = (color>>8) & 255;
uint8_t blue = color & 255;

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("Paint!"));
  
  tft.reset();
  
  uint16_t identifier = tft.readID();
  if(identifier == 0x9325) {
    Serial.println(F("Found ILI9325 LCD driver"));
  } else if(identifier == 0x9328) {
    Serial.println(F("Found ILI9328 LCD driver"));
  } else if(identifier == 0x4535) {
    Serial.println(F("Found LGDP4535 LCD driver"));
  }else if(identifier == 0x7575) {
    Serial.println(F("Found HX8347G LCD driver"));
  } else if(identifier == 0x9341) {
    Serial.println(F("Found ILI9341 LCD driver"));
  } else if(identifier == 0x8357) {
    Serial.println(F("Found HX8357D LCD driver"));
  } else if(identifier==0x0101)
  {    
      identifier=0x9341;
       Serial.println(F("Found 0x9341 LCD driver"));
  }else {
    Serial.print(F("Unknown LCD driver chip: "));
    Serial.println(identifier, HEX);
    Serial.println(F("If using the Elegoo 2.8\" TFT Arduino shield, the line:"));
    Serial.println(F("  #define USE_Elegoo_SHIELD_PINOUT"));
    Serial.println(F("should appear in the library header (Elegoo_TFT.h)."));
    Serial.println(F("If using the breakout board, it should NOT be #defined!"));
    Serial.println(F("Also if using the breakout, double-check that all wiring"));
    Serial.println(F("matches the tutorial."));
    identifier=0x9341;
  
  }
  strip.begin() ; //Strip initialisieren
  strip.show() ; // schaltet LEDs ab

  tft.begin(identifier);
  tft.setRotation(2);

  tft.fillScreen(BLACK);

  tft.fillRect(180, 10, BOXSIZE, 10, RED);
  tft.fillRect(100, 10, BOXSIZE, 10, GREEN);
  tft.fillRect(20, 10, BOXSIZE, 10, BLUE);

  
}
#define MINPRESSURE 5
#define MAXPRESSURE 1000

void loop()
{
  TSPoint p = ts.getPoint();

  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);

  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
    p.y = (tft.height()-map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));
    
    if (p.y < 265) {
       if (p.x < 30+BOXSIZE && p.x >= 10) {
         tft.fillRect(20, 10, BOXSIZE, (p.y - 10), BLUE);
         if (p.y < 20){
          tft.fillRect(20, 20, BOXSIZE, 265, BLACK);
          blue = 0;
         }
          else tft.fillRect(20, p.y, BOXSIZE, 265, BLACK);
         blue = p.y - 10;
        
       } else if (p.x < 110+BOXSIZE && p.x >= 90) {
         tft.fillRect(100, 10, BOXSIZE, (p.y - 10), GREEN);
         if (p.y < 20){
          tft.fillRect(100, 20, BOXSIZE, 265, BLACK);
          green = 0;
         }
          else tft.fillRect(100, p.y, BOXSIZE, 265, BLACK);
         green = p.y - 10;

       } else if (p.x < 190+BOXSIZE && p.x >= 170) {
         tft.fillRect(180, 10, BOXSIZE, (p.y - 10), RED);
         if (p.y < 20){
          tft.fillRect(180, 20, BOXSIZE, 265, BLACK);
          red = 0;
         }
          else tft.fillRect(180, p.y, BOXSIZE, 265, BLACK);
         red = p.y;

       }
       for (int i=first; i<last; i++){
         strip.setPixelColor(i, red, green, blue);
       }
       strip.show();
    }  
    }
}
manche Neulinge verwenden gleich das Code Tag # lgbk


Natürlich bin ich als Neuling auch über andere Tips dankbar.
Vielen Dank für eure Hilfe und ein entspanntes Wochenende.

Mr_Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2019, 10:02
Beitrag #2
RE: LEDs mit Touchscreen steuern
pinMode gehört ins Setup.
Schreibe Dir die RGB-Werte mit seriellen Ausgaben auf den Seriellen Monitor, damit Du siehst, was wie passiert. Ändere zuerst nur 1 Farbe.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2019, 18:55 (Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2019 19:00 von Mr_Martin.)
Beitrag #3
RE: LEDs mit Touchscreen steuern
(08.09.2019 10:02)Tommy56 schrieb:  pinMode gehört ins Setup.
Schreibe Dir die RGB-Werte mit seriellen Ausgaben auf den Seriellen Monitor, damit Du siehst, was wie passiert. Ändere zuerst nur 1 Farbe.

Gruß Tommy

Danke für deine Antwort, Tommy.

pinMode wurde ins Setup verschoben, nur leider wird mein Bildschirm jetzt nach der ersten Berührung gelöscht (wird komplett weis).

Unabhängig davon habe ich noch einen Klammerfehler in meiner Positionsabfrage gefunden, der wahrscheinlich zu den komischen Farben geführt hat.
Die LEDs verhalten sich jetzt jedenfalls schonmal nahezu wie gewollt ^^
Nur sehe ich dazu eben nur weis.
Muss pinMode an eine andere Stelle im Setup?

Hier die aktualisierte Version:


Code:
#include <Elegoo_GFX.h>    
#include <Elegoo_TFTLCD.h>
#include <TouchScreen.h>
#include <SPI.h>
#include <Adafruit_DotStar.h>

#define YP A3  // must be an analog pin
#define XM A2  // must be an analog pin
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

#define TS_MINX 120
#define TS_MAXX 900

#define TS_MINY 70
#define TS_MAXY 920

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

//LCD Farben
#define    BLACK   0x0000
#define    BLUE    0x001F
#define    RED     0xF800
#define    GREEN   0x07E0
#define WHITE   0xFFFF

Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

#define NUMPIXELS 11
#define BOXSIZE 30

int first = 2 ;
int last = 8 ;

Adafruit_DotStar strip = Adafruit_DotStar(NUMPIXELS, DOTSTAR_BGR) ;

uint32_t color;
uint8_t red = (color>>16) & 255;
uint8_t green = (color>>8) & 255;
uint8_t blue = color & 255;

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("Paint!"));
  
  tft.reset();
  
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  
  uint16_t identifier = tft.readID();
  if(identifier == 0x9325) {
    Serial.println(F("Found ILI9325 LCD driver"));
  } else if(identifier == 0x9328) {
    Serial.println(F("Found ILI9328 LCD driver"));
  } else if(identifier == 0x4535) {
    Serial.println(F("Found LGDP4535 LCD driver"));
  }else if(identifier == 0x7575) {
    Serial.println(F("Found HX8347G LCD driver"));
  } else if(identifier == 0x9341) {
    Serial.println(F("Found ILI9341 LCD driver"));
  } else if(identifier == 0x8357) {
    Serial.println(F("Found HX8357D LCD driver"));
  } else if(identifier==0x0101)
  {    
      identifier=0x9341;
       Serial.println(F("Found 0x9341 LCD driver"));
  }else {
    Serial.print(F("Unknown LCD driver chip: "));
    Serial.println(identifier, HEX);
    Serial.println(F("If using the Elegoo 2.8\" TFT Arduino shield, the line:"));
    Serial.println(F("  #define USE_Elegoo_SHIELD_PINOUT"));
    Serial.println(F("should appear in the library header (Elegoo_TFT.h)."));
    Serial.println(F("If using the breakout board, it should NOT be #defined!"));
    Serial.println(F("Also if using the breakout, double-check that all wiring"));
    Serial.println(F("matches the tutorial."));
    identifier=0x9341;
  
  }
  strip.begin() ; //Strip initialisieren
  strip.show() ; // schaltet LEDs ab

  tft.begin(identifier);
  tft.setRotation(2);

  tft.fillScreen(BLACK);

  tft.fillRect(180, 10, BOXSIZE, 10, RED);
  tft.fillRect(100, 10, BOXSIZE, 10, GREEN);
  tft.fillRect(20, 10, BOXSIZE, 10, BLUE);

  
}
#define MINPRESSURE 5
#define MAXPRESSURE 1000

void loop()
{
  TSPoint p = ts.getPoint();

  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
    p.y = (tft.height()-map(p.y, TS_MINY, TS_MAXY, tft.height(), 0));
    
    if (p.y < 265) {
       if (p.x < 30+BOXSIZE && p.x >= 10) {
         tft.fillRect(20, 10, BOXSIZE, (p.y - 10), BLUE);
         if (p.y < 20){
          tft.fillRect(20, 20, BOXSIZE, 265, BLACK);
          blue = 0;
         }
          else {
            tft.fillRect(20, p.y, BOXSIZE, 265, BLACK);
            blue = p.y - 10;
          }
       } else if (p.x < 110+BOXSIZE && p.x >= 90) {
         tft.fillRect(100, 10, BOXSIZE, (p.y - 10), GREEN);
         if (p.y < 20){
          tft.fillRect(100, 20, BOXSIZE, 265, BLACK);
          green = 0;
         }
          else {
            tft.fillRect(100, p.y, BOXSIZE, 265, BLACK);
            green = p.y - 10;
          }
       } else if (p.x < 190+BOXSIZE && p.x >= 170) {
         tft.fillRect(180, 10, BOXSIZE, (p.y - 10), RED);
         if (p.y < 20){
          tft.fillRect(180, 20, BOXSIZE, 265, BLACK);
          red = 0;
         }
          else {
            tft.fillRect(180, p.y, BOXSIZE, 265, BLACK);
            red = p.y;
          }
       }
       for (int i=first; i<last; i++){
         strip.setPixelColor(i, red, green, blue);
       }
       strip.show();
    }  
    }
Serial.println(red);
Serial.println(green);
Serial.println(blue);
}

Liebe Grüße Mr_Martin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2019, 19:20
Beitrag #4
RE: LEDs mit Touchscreen steuern
Das mit PinMode war erst mal eine pauschale Aussage. Ich kenne Dein Display nicht.
Normalerweise sind bei den Libs Beispiele dabei, an denen man sich orientieren sollte.
Evtl. müssen die beiden pinMode auch ganz raus, weil die Lib das erledigt. Das siehst Du in den Beispielen.
Gib uns doch mal einen Link zu Deinen Libs.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2019, 21:11
Beitrag #5
RE: LEDs mit Touchscreen steuern
Das ist der Display: Elegoo 2.8" Touchscreen

Hier gibts die Libs dazu vom Hersteller.

Die anderen Libs habe ich direkt über die Arduino Software installiert.

Wenn ich pinMode so Einsetze wie im Eingangspost, scheint es aber jetzt zu funktionieren. Ich denke das Problem waren die Ausnahmeregeln für die Grenzen der Regler. Nach unten (Farbwert=0) passt esso jetzt, nach Oben schau ich mir nochmal an Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.09.2019, 22:55
Beitrag #6
RE: LEDs mit Touchscreen steuern
Im Deklarationen Bereich die Variablen initialisieren und gleichzeitig bit oprationen durchzuführen, wobei Wert -> color noch nicht bekannt ist …. ist keine gute Idee.

Code:
...
int first = 2 ;
int last = 8 ;

Adafruit_DotStar strip = Adafruit_DotStar(NUMPIXELS, DOTSTAR_BGR) ;

uint32_t color;
uint8_t red = (color>>16) & 255;
uint8_t green = (color>>8) & 255;
uint8_t blue = color & 255;

void setup(void) {
  Serial.begin(9600);
...

???
Gruß Georg

Sorry für mein nicht korrektes Deutsch. Sad
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  wie kann ich ausgangspins aus einem array steuern? uwe.z 4 283 04.11.2019 21:46
Letzter Beitrag: Holzauge
Photo Technisat Receiver mit Arduino steuern Beans 0 353 29.09.2019 15:39
Letzter Beitrag: Beans
  Motor mit Ultraschall steuern matzesims 11 845 28.08.2019 10:40
Letzter Beitrag: hotsystems
  2 leds Blinken 5 mal 5 Blinken lassen dann 2 andere Leds 5 mal Blinken lassen. Chesleyn 4 673 30.05.2019 14:30
Letzter Beitrag: Chesleyn
  kRPC mit Arduino steuern ? comfan 3 556 26.02.2019 22:19
Letzter Beitrag: Tommy56
  mehrere leds blinken jennerlein 1 764 18.12.2018 09:25
Letzter Beitrag: hotsystems
  Gui um Relais zu Steuern shortcut 7 1.455 03.11.2018 00:21
Letzter Beitrag: Fips
  PHP WINDOWS XAMPP ARDUINO UNO SERVO steuern über Serielle Verbindung tr3 1 852 21.08.2018 21:59
Letzter Beitrag: georg01
  Pioneer mit IRremote steuern ricowei 6 1.487 29.07.2018 13:05
Letzter Beitrag: ricowei
  2,8" Touchscreen Display Shield - so gehts avoid 4 2.740 09.07.2018 11:15
Letzter Beitrag: Harry Hirsch

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste