Giter Site home page Giter Site logo

arduinogui's Introduction

ArduinoGUI

Allows you to create a GUI for a TFT LCD screen on an arduino. You will need the following libraries: "Adafruit_GFX.h", "Adafruit_TFTLCD.h" and "TouchScreen.h" to get it working.

Quickstart

// Defines

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif

// Touch screen pins
#define YP A1  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 7   // can be a digital pin
#define XP 6   // can be a digital pin

// Pression defines
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940

// LCD pins
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4 // optional

// Assign human-readable names to some common 16-bit color values:

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

// Create touchscreen & TFTscreen objects
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

// Create GUI handler object
GUI gui(&tft);

// Ornements (add custom stuff on your buttons)
// You have to inherite from Ornement and override
// "void draw(Adafruit_TFTLCD* tft)"
// use getX(), getY(), getW() and getH() to get position and size
class UpArrow : public Ornement
{
  virtual void draw(Adafruit_TFTLCD* tft)
  {
    int x = getX();
    int y = getY();
    int w = getW();
    int h = getH();
    tft->fillTriangle(x +  w/2,  y + (w)/3,
                           x +  w/3,  y +   2*(w)/3,
                           x + 2*(w)/3, y + 2*(w)/3,
                           MAGENTA);
  }
};

// Same to write text on button
class TextOrnment : public Ornement
{
  virtual void draw(Adafruit_TFTLCD* tft)
  {
    int x = getX();
    int y = getY();
    int h = getH();

    tft->setCursor(x, y + 7);
    tft->setTextColor(BLACK);  tft->setTextSize(h-2);
    tft->print("Hello");
  }
};

// Callbacks (will be called when pressed)
// You have to inherite from Callback and override
// "void execute()"

class PrintText : public Callback
{
  public:
    PrintText(char* text)
    {
      text_ = text;
    }
    void execute()
    {
        Serial.println(text_);
    }
  private:
    char* text_;
};

// Setup
void setup(void)
{
  // Init tft
  tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.fillScreen(BLACK);
  pinMode(13, OUTPUT);

  // 0x07E0 = GREEN
  // Add rect button to GUI
  // RectButton(int x, int y, int w, int h, long color);
  gui.addButton((new RectButton(10, 10, 100, 100, GREEN))->setOrnement(new UpArrow)->setCallback(new PrintText("Up button")));
  // Add rect button to GUI
  // RoundButton(int x, int y, int r, long color);
  gui.addButton((new RoundButton(70, 230, 50, GREEN))->setCallback(new PrintText("Round button")));

  // Draw GUI
  gui.draw();
}

// Main loop
void loop()
{
  // Get input
  digitalWrite(13, HIGH);
  TSPoint p = ts.getPoint();
  digitalWrite(13, LOW);

  // if sharing pins, you'll need to fix the directions of the touchscreen pins
  //pinMode(XP, OUTPUT);
  pinMode(XM, OUTPUT);
  pinMode(YP, OUTPUT);
  //pinMode(YM, OUTPUT);

  // we have some minimum pressure we consider 'valid'
  // pressure of 0 means no pressing!

  if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
    // scale from 0->1023 to tft.width
    p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
    p.y = map(p.y, TS_MINY, TS_MAXY, tft.height()-80, 0); // May need ajustment, some screens are strange...

    // Update return true if a button has been press
    // Corresponding callback will be called
    if (gui.update(p))
    {
      tft.fillScreen(BLACK);  // Clear screen
      gui.draw();             // Draw GUI
      delay(50);              // Must wait for the screen to have finished drawing
    }
  }
}

License

TFTLCD_GUI - Library to make GUI on TFT LCD screens. Created by William Guimont-Martin, 2015. Released into the public domain.

arduinogui's People

Contributors

willguimont avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

arduinogui's Issues

Slider in Buttons.cpp was not declared

C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:177:1: error: 'Slider' does not name a type
Slider::Slider(int x, int y, int w, int h, int minVal, int maxVal)
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:183:1: error: 'Slider' does not name a type
Slider::Slider(int x, int y, int w, int h, int minVal, int maxVal, long color)
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:189:1: error: 'Slider' does not name a type
Slider::Slider(int x, int y, int w, int h, int minVal, int maxVal, long color, long cursorColor)
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:199:1: error: 'Slider' does not name a type
Slider::Slider()
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:204:6: error: 'Slider' has not been declared
bool Slider::update(TSPoint p)
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'bool update(TSPoint)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:206:5: error: 'updateValue' was not declared in this scope
updateValue(p);
^~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:206:5: note: suggested alternative: 'update'
updateValue(p);
^~~~~~~~~~~
update
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:207:32: error: cannot call member function 'bool Button::update(TSPoint)' without object
return RectButton::update(p);
^
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:210:6: error: 'Slider' has not been declared
void Slider::draw(Adafruit_TFTLCD* tft)
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'void draw(Adafruit_TFTLCD*)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:214:29: error: cannot call member function 'virtual void RectButton::draw(Adafruit_TFTLCD*)' without object
RectButton::draw(tft);
^
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:215:9: error: 'drawCursor' was not declared in this scope
drawCursor(tft);
^~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:217:9: error: 'ornement_' was not declared in this scope
if (ornement_)
^~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:217:9: note: suggested alternative: 'Ornement'
if (ornement_)
^~~~~~~~~
Ornement
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:219:9: error: 'nextButton_' was not declared in this scope
if (nextButton_)
^~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:219:9: note: suggested alternative: 'RectButton'
if (nextButton_)
^~~~~~~~~~~
RectButton
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:223:5: error: 'Slider' has not been declared
int Slider::getVal() const
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:223:22: error: non-member function 'int getVal()' cannot have cv-qualifier
int Slider::getVal() const
^~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'int getVal()':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:225:12: error: 'val_' was not declared in this scope
return val_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:228:6: error: 'Slider' has not been declared
void Slider::setOrnementVariables()
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'void setOrnementVariables()':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:230:9: error: 'ornement_' was not declared in this scope
if (ornement_)
^~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:230:9: note: suggested alternative: 'Ornement'
if (ornement_)
^~~~~~~~~
Ornement
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:231:33: error: invalid use of 'this' in non-member function
ornement_->setVariables(this, SLIDER);
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:238:1: error: 'HorizontalSlider' does not name a type
HorizontalSlider::HorizontalSlider(int x, int y, int w, int h, int minVal, int maxVal)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:243:1: error: 'HorizontalSlider' does not name a type
HorizontalSlider::HorizontalSlider(int x, int y, int w, int h, int minVal, int maxVal, long color)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:248:1: error: 'HorizontalSlider' does not name a type
HorizontalSlider::HorizontalSlider(int x, int y, int w, int h, int minVal, int maxVal, long color, long cursorColor)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:253:1: error: 'HorizontalSlider' does not name a type
HorizontalSlider::HorizontalSlider()
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:258:6: error: 'HorizontalSlider' has not been declared
void HorizontalSlider::drawCursor(Adafruit_TFTLCD* tft)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:266:6: error: 'HorizontalSlider' has not been declared
void HorizontalSlider::updateValue(TSPoint p)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'void updateValue(TSPoint)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:268:32: error: cannot call member function 'virtual bool RectButton::collision(TSPoint)' without object
if (RectButton::collision(p))
^
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:270:9: error: 'delta' was not declared in this scope
delta = p.x - x_; //
^~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:270:9: note: suggested alternative: 'delay'
delta = p.x - x_; //
^~~~~
delay
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:270:23: error: 'x_' was not declared in this scope
delta = p.x - x_; //
^

C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:9: error: 'val_' was not declared in this scope
val_ = ((max_ - min_) * delta) / w_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:18: error: 'max_' was not declared in this scope
val_ = ((max_ - min_) * delta) / w_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:18: note: suggested alternative: 'max'
val_ = ((max_ - min_) * delta) / w_;
^~~~
max
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:25: error: 'min_' was not declared in this scope
val_ = ((max_ - min_) * delta) / w_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:25: note: suggested alternative: 'min'
val_ = ((max_ - min_) * delta) / w_;
^~~~
min
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:271:42: error: 'w_' was not declared in this scope
val_ = ((max_ - min_) * delta) / w_;
^

C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:279:1: error: 'VerticalSlider' does not name a type
VerticalSlider::VerticalSlider(int x, int y, int w, int h, int minVal, int maxVal)
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:284:1: error: 'VerticalSlider' does not name a type
VerticalSlider::VerticalSlider(int x, int y, int w, int h, int minVal, int maxVal, long color)
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:289:1: error: 'VerticalSlider' does not name a type
VerticalSlider::VerticalSlider(int x, int y, int w, int h, int minVal, int maxVal, long color, long cursorColor)
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:294:1: error: 'VerticalSlider' does not name a type
VerticalSlider::VerticalSlider()
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:299:6: error: 'VerticalSlider' has not been declared
void VerticalSlider::drawCursor(Adafruit_TFTLCD* tft)
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'void drawCursor(Adafruit_TFTLCD*)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:299:6: error: redefinition of 'void drawCursor(Adafruit_TFTLCD*)'
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:258:6: note: 'void drawCursor(Adafruit_TFTLCD*)' previously defined here
void HorizontalSlider::drawCursor(Adafruit_TFTLCD* tft)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:25: error: 'x_' was not declared in this scope
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^

C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:30: error: 'w_' was not declared in this scope
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:38: error: 'y_' was not declared in this scope
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:43: error: 'delta' was not declared in this scope
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:43: note: suggested alternative: 'delay'
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^~~~~
delay
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:302:58: error: 'cursorColor_' was not declared in this scope
tft->fillCircle(x_ + w_ / 2, y_ + delta, w_ / 2, cursorColor_);
^~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: At global scope:
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:305:6: error: 'VerticalSlider' has not been declared
void VerticalSlider::updateValue(TSPoint p)
^~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In function 'void updateValue(TSPoint)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:305:6: error: redefinition of 'void updateValue(TSPoint)'
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:266:6: note: 'void updateValue(TSPoint)' previously defined here
void HorizontalSlider::updateValue(TSPoint p)
^~~~~~~~~~~~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:307:32: error: cannot call member function 'virtual bool RectButton::collision(TSPoint)' without object
if (RectButton::collision(p))
^
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:309:9: error: 'delta' was not declared in this scope
delta = p.y - y_;
^~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:309:9: note: suggested alternative: 'delay'
delta = p.y - y_;
^~~~~
delay
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:309:23: error: 'y_' was not declared in this scope
delta = p.y - y_;
^~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:9: error: 'val_' was not declared in this scope
val_ = ((max_ - min_) * delta) / h_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:18: error: 'max_' was not declared in this scope
val_ = ((max_ - min_) * delta) / h_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:18: note: suggested alternative: 'max'
val_ = ((max_ - min_) * delta) / h_;
^~~~
max
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:25: error: 'min_' was not declared in this scope
val_ = ((max_ - min_) * delta) / h_;
^~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:25: note: suggested alternative: 'min'
val_ = ((max_ - min_) * delta) / h_;
^~~~
min
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:310:42: error: 'h_' was not declared in this scope
val_ = ((max_ - min_) * delta) / h_;
^~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp: In member function 'void Ornement::setVariables(Button*, int)':
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:354:9: error: 'Slider' was not declared in this scope
Slider* tmp = (Slider*)parent;
^~~~~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:354:17: error: 'tmp' was not declared in this scope
Slider* tmp = (Slider*)parent;
^~~
C:\Users\carel\Documents\Arduino\libraries\ArduinoGUI-master\src\Buttons.cpp:354:31: error: expected primary-expression before ')' token
Slider* tmp = (Slider*)parent;
^

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.