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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Variabler Slider / Schieberegler mit Werterückgabe auf LCD Touchscreen
01.12.2013, 12:28 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2013 11:43 von rkuehle.)
Beitrag #1
Variabler Slider / Schieberegler mit Werterückgabe auf LCD Touchscreen
Hallo Forum,

so gut wie die Libs von Henning Karlsen auch sind, hat mir immer mal wieder sowas wie ein Slider / Schieberegler gefehlt, der Werte zurückgibt. Daher habe ich mal einen Sketch dazu geschrieben. Das Teil wird komplett über Variablen gesteuert und sollte daher gut anzupassen sein. Die Werte des Sliders werden an den SerialMonitor gegeben. Die Kommentare sollten ausreichen.
Benutzte Hardware:
Mega + Adapter + LCD Touch Screen wie hier:
http://www.sainsmart.com/sainsmart-mega2...ga8u2.html
Hier mal der Code. Hoffe jemand kann es gebrauchen Smile

Grüße Ricardo
Code:
#include <UTFT.h>
#include <UTouch.h>
// LCD und Touch
UTFT          myGLCD(ITDB32S, 38, 39, 40, 41);
UTouch        myTouch(6, 5, 4, 3, 2);
// Abmessung des gesamten Slider
int posX = 50; // Start x
int posY = 50; // Start y
int posEndX = 200; // Breite
int posEndY = 50; // Höhe
// Ausgabe für slider_read
const boolean isPercent = false; // Ausgabe Prozent, sonst Ausgabe Anteil absolut von maxValue
int maxValue = 283; // max. Wert wenn Ausgabe Absolutwert
// Bestandteile des Slider
const boolean hasFrame = true; // Rahmen zeichnen ?
const word frameColor = VGA_AQUA; // Rahmenfarbe oder 0, ignoriert wenn hasFrame=false
const int diffLeftUpper = 3; // Differenz Frame / Slider links oben
const int diffRightLower = 6; // Differenz Frame / Slider rechts unten
const boolean hasScale = true; // Skale zeichnen ?
const word scaleColor = VGA_RED; // Skalenfarbe oder 0, ignoriert wenn hasScale=false
const int scaleCuts = 12; // Anzahl vertikale Abschnitte der Skale
const boolean hasUsedColor = true; // Farbe für genutzen Anteil ?
const word usedColor = VGA_GREEN; // Farbe f. genutzen Anteil oder 0, ignoriert wenn hasUsedColor=false
const boolean hasUnusedColor = true; // Farbe für ungenutzen Anteil ?
const word unusedColor = VGA_YELLOW; // Farbe f. ungenutzen Anteil oder 0, ignoriert wenn hasUnusedColor=false
const boolean hasKnob = true; // Hat einen Schieberegler ?
const word knobColor = VGA_BLACK; // Farbe für Schieberegler oder 0, ignoriert wenn hasKnob=false

boolean isFrameSet = false; // Wert wird true wenn Frame erstmalig geschrieben - nicht manuell anpassen!

void setup() {
  // LCD vorbereiten
  myGLCD.InitLCD();;
  myGLCD.clrScr();
  myTouch.InitTouch();
  Serial.begin(9600);
  // Slider erstmalig zeichnen
  slider_init();
}

void loop() {
  int Ausgabe; // Ausgabewert slider_read()
  Ausgabe = slider_read();
  if (Ausgabe > 0) Serial.println(Ausgabe);
}
// Slider erstmalig zeichnen
void slider_init() {
  // Frame zeichnen ?
  if (hasFrame == true) draw_frame();
  // leeren Slider zeichnen
  for (int tPosY = posY; tPosY <= posY + posEndY; tPosY++) myGLCD.drawLine(posX, tPosY, posX + posEndX, tPosY);
  // Skale auf Slider zeichnen ?
  if (hasScale == true) draw_scale();
}

// Slider auslesen und Werte zurückgeben
int slider_read() {
  float tPosX;
  float tPosY;
  float tAusgabe;
  int itAusgabe;
  // Daten verfügbar ?
  if (myTouch.dataAvailable() == true)
  {
    // Frame zeichnen ?
    if (hasFrame == true) draw_frame();
    // Daten lesen
    myTouch.read();
    tPosX = myTouch.getX();
    tPosY = myTouch.getY();
    // Daten innerhalb des Sliders ?
    if (tPosX >= posX && tPosX <= posX + posEndX && tPosY >= posY && tPosY <= posY + posEndY)
    {
      // genutzen und ungenutzten Anteil zeichnen
      draw_used_unused(tPosX, tPosY);
      // Skale zeichnen
      if (hasScale == true) draw_scale();
      // Knopf zeichnen
      if (hasKnob == true) draw_knob(tPosX, tPosY);
      // Ausgabe % - Wert ?
      if (isPercent == true) tAusgabe = ((tPosX - posX) / posEndX) * 100;
      // Ausgabe Absolutwert ?
      if (isPercent == false) tAusgabe = ((tPosX - posX) / posEndX) * maxValue;
      // Integer bilden und zurückgeben an Loop
      itAusgabe = (int) tAusgabe;
      return itAusgabe;
    }
    else return 0;
  }
  else return 0;
}

// Zeichnet den Frame
void draw_frame() {
  word tFrameColor;
  // Originalfarbe retten und Framefarbe setzen
  if (frameColor > 0)
  {
    tFrameColor = myGLCD.getColor();
    myGLCD.setColor(frameColor);
  }
  // Frame zeichnen
  myGLCD.drawLine(posX, posY, posX + posEndX, posY);
  myGLCD.drawLine(posX, posY + posEndY, posX + posEndX, posY + posEndY);
  myGLCD.drawLine(posX, posY, posX, posY + posEndY);
  myGLCD.drawLine(posX + posEndX, posY, posX + posEndX, posY + posEndY);
  // verkleinert den Slider innerhalb des Frames um diffLeftUpper und diff RightLower
  if (isFrameSet == false)
  {
    posX = posX + diffLeftUpper;
    posY = posY + diffLeftUpper;
    posEndX = posEndX - diffRightLower;
    posEndY = posEndY - diffRightLower;
    isFrameSet = true;
  }
  // Originalfarbe zurücksetzen
  if (frameColor > 0) myGLCD.setColor(tFrameColor);
}
// zeichnet eine Skale
void draw_scale() {
  word tColor;
  int teiler = (int) posEndX / scaleCuts;
  if (scaleColor > 0)
  {
    tColor = myGLCD.getColor();
    myGLCD.setColor(scaleColor);
    // Horizontale Linie der Skale
    myGLCD.drawLine(posX, posY + (posEndY / 2), posX + posEndX, posY + (posEndY / 2));
    // Vertikale Abschnitte der Skale
    for (int tPosX = posX + teiler; tPosX <= posX + posEndX - teiler; tPosX = tPosX + teiler)
      myGLCD.drawLine(tPosX, posY + (int) (posEndY / 5), tPosX, posY + posEndY - (int) (posEndY / 5));
    myGLCD.setColor(tColor);
  }
}
// zeichnet einen Schieberegler
void draw_knob(int tPosX, int tPosY) {
  word tColor;
  if (scaleColor > 0)
  {
    tColor = myGLCD.getColor();
    myGLCD.setColor(knobColor);
    // Knopf zeichnen
    myGLCD.fillRect(tPosX - 1, posY + (posEndY / 2) - (posEndY / 4), tPosX, posY + (posEndY / 2) + (posEndY / 4));
    myGLCD.drawLine(posX, posY + (posEndY / 2), tPosX, posY + (posEndY / 2));
    myGLCD.setColor(tColor);
  }
}

// Zeichnet die genutzten / ungenutzten Anteile des Sliders
void draw_used_unused(int tPosX, int tPosY) {
  word tColor;
  // Originalfarbe retten wenn usedColor oder unusedColor belegt
  if ((hasUsedColor == true) || (hasUnusedColor == true)) tColor = myGLCD.getColor();
  // Farbe für benutzten Anteil setzen
  if (hasUsedColor == true) myGLCD.setColor(usedColor);
  // benutzten Anteil zeichnen
  for (int tPosY = posY; tPosY <= posY + posEndY; tPosY++) myGLCD.drawLine(posX, tPosY, tPosX, tPosY);
  // Originalfarbe zurücksetzen
  myGLCD.setColor(tColor);
  // Farbe für unbenutzten Anteil setzen
  if (hasUnusedColor == true) myGLCD.setColor(unusedColor);
  // unbenutzten Anteil zeichnen
  for (int tPosY = posY; tPosY <= posY + posEndY; tPosY++) myGLCD.drawLine(tPosX, tPosY, posX + posEndX, tPosY);
  // Originalfarbe zurücksetzen
  myGLCD.setColor(tColor);
}

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.12.2013, 12:50
Beitrag #2
RE: Variabler Slider / Schieberegler mit Werterückgabe auf LCD Touchscreen
Der Link geht leider nicht mehr, hast da vielleicht ein Bild oder den aktuellen Link ?

Uwe

Martin Luther King sagte am 28 August 1963 :

I have a Dream !!

Ich bin weiter:

I have a Schaltplan !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.12.2013, 15:38 (Dieser Beitrag wurde zuletzt bearbeitet: 31.12.2013 15:38 von rkuehle.)
Beitrag #3
RE: Variabler Slider / Schieberegler mit Werterückgabe auf LCD Touchscreen
Hallo Uwe,

die Site von Saintsmart ist komplett umgebaut worden.
Das hier ist das gleiche:
http://www.amazon.de/SainSmart-Entwicklu...mart+touch

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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