Arduino
OKUDUĞUNUZ KONU
2.4 inch Dokunmatik TFT Ekran İle Paint Uygulaması
1

2.4 inch Dokunmatik TFT Ekran İle Paint Uygulaması

Yazar : Murat Duran26 Temmuz 2017

Dokumatik TFT ekranlar son yıllarda ucuzlaması ile arduino projelerinde de sıkça kullanılmaya başlamıştır.Ama bazı TFT ekranlarda arkadaşlar kütüphane sorunları yaşadıklarından bizde böyle bir uygulamaya yer vermek istedik.Belki bazılarının kullandığı TFT ekranları bizim kullandığımız olanla aynıdır ve kodları işine yarayabilir.Yada TFT ekran almak istiyorsanız ve kütüphane sorunlarından korkuyorsanız marketimizde ki TFT ekranı satın alarak sorunsuz bir şekilde kullanabilirsiniz.

Projemizde kullanılan ekran shield olduğundan herhangi bir kablolama veya lehimlemeye ihtiyaç olmadan çok basit bir şekilde kullanabilirsiniz.

Malzemeler

Projenin Malzemelerini Satın Al

Bu proje için gerekli malzemeleri Proje Hocam garantisi ile tek sepette satın alabilirsiniz.Malzemeler proje ile %100 uyumludur.İstenilmesi halinde arduino içerisine kodlar yüklenerek gönderilir. “Satın Almak İçin Yukarıda Butona Basınız”

Öncelikle shild nasıl montajlanıyor aşağıdaki resimlerde anlatılmaya çalışışmıştır.

Gördüğünüz şekilde çok basit bir şekilde montajlanıyor dikkat etmeniz gereken tek şey ekran üzerindeki beyaz buton un usb tarafına bakıyor şekilde yerleştirilmesidir.

2.4″ Dokunmatik TFT Kütüphanesi

Projenin kaynak kodları


// 2.4inch Dokunmatik TFT Paint Uygulaması
// Proje Hocam - 2017

#include <Adafruit_GFX.h>    // GFX Kütüphanesi
#include <Adafruit_TFTLCD.h> // TFT Kütüphanesi
#include <TouchScreen.h>     // Dokunmatik Ekran Kütüphanesi

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

#ifndef USE_ADAFRUIT_SHIELD_PINOUT 
// #error "This sketch is intended for use with the TFT LCD Shield. Make sure that USE_ADAFRUIT_SHIELD_PINOUT is #defined in the Adafruit_TFTLCD.h library file."
#endif

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

#ifdef __SAM3X8E__
  #define TS_MINX 125
  #define TS_MINY 170
  #define TS_MAXX 880
  #define TS_MAXY 940
#else
  #define TS_MINX  180
  #define TS_MINY  160
  #define TS_MAXX  880
  #define TS_MAXY  920
#endif

// For better pressure precision, we need to know the resistance
// between X+ and X- Use any multimeter to read it
// For the one we're using, its 300 ohms across the X plate
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

// 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


Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//Adafruit_TFTLCD tft;


#define BOXSIZE   40
#define PENRADIUS  4
int oldcolor, currentcolor,swapxy;

void setup(void) {
  Serial.begin(9600);
  Serial.println(F("Paint!"));

  tft.reset();

  uint16_t identifier = 0x9341;
  
  if(identifier == 0x9325) {
    Serial.println(F("Found ILI9325 LCD driver"));
  } else if(identifier == 0x9341) {
    Serial.println(F("Found ILI9341 LCD driver"));
  } else if(identifier == 0x7575) {
    Serial.println(F("Found HX8347G LCD driver"));
  } else {
    Serial.print(F("Unknown LCD driver chip: "));
    Serial.println(identifier, HEX);
    return;
  }

  tft.begin(identifier);

  tft.fillScreen(BLACK);

  tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
  tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
  tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, GREEN);
  tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, CYAN);
  tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, BLUE);
  tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, MAGENTA);
  // tft.fillRect(BOXSIZE*6, 0, BOXSIZE, BOXSIZE, WHITE);
 
  tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
  currentcolor = RED;
 
  pinMode(13, OUTPUT);
}

#define MINPRESSURE 10
#define MAXPRESSURE 1000

void loop()
{
  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) {

//need to reverse xy for some reason:
    swapxy=p.y;
    p.y=p.x;
    p.x=swapxy;
    
    
    Serial.print("X = "); Serial.print(p.x);
    Serial.print("\tY = "); Serial.print(p.y);
    Serial.print("\tPressure = "); Serial.println(p.z);
    
    
    if (p.y < (TS_MINY+15)) {
      Serial.println("erase");
      // press the bottom of the screen to erase 
      tft.fillRect(0, BOXSIZE, tft.width(), tft.height()-BOXSIZE, BLACK);
    }
    
    // scale from 0->1023 to tft.width
    p.x = map(p.x, TS_MINX, TS_MAXX,0, tft.width());
    p.y = map(p.y, TS_MINY, TS_MAXY,0, tft.height());
    
    Serial.print("("); Serial.print(p.x);
    Serial.print(", "); Serial.print(p.y);
    Serial.println(")");
    

    //Code below to fix the bug of inverted coordinates
   // p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(),0 );
   // p.y = map(p.y, TS_MAXY, TS_MINY, 0, tft.height() );
   //p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
    
    //Correct offset of touch. Manual calibration
   
    if (p.y < BOXSIZE) {
       oldcolor = currentcolor;

       if (p.x < BOXSIZE) { 
         currentcolor = RED; 
         tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
       } else if (p.x < BOXSIZE*2) {
         currentcolor = YELLOW;
         tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE);
       } else if (p.x < BOXSIZE*3) {
         currentcolor = GREEN;
         tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, WHITE);
       } else if (p.x < BOXSIZE*4) {
         currentcolor = CYAN;
         tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, WHITE);
       } else if (p.x < BOXSIZE*5) {
         currentcolor = BLUE;
         tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, WHITE);
       } else if (p.x < BOXSIZE*6) {
         currentcolor = MAGENTA;
         tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, WHITE);
       }

       if (oldcolor != currentcolor) {
          if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
          if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
          if (oldcolor == GREEN) tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, GREEN);
          if (oldcolor == CYAN) tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, CYAN);
          if (oldcolor == BLUE) tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, BLUE);
          if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, MAGENTA);
       }
    }
    if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) {
      tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
    }
  }
}



SİZCE NASIL OLMUŞ?
Beğendim
100%
İlginç
0%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Murat Duran
Uzun zamandır internetle uğraşıyorum bu internet bilgimi gerçek mesleğimle bütünleştirip yararlı olacağını düşündüğüm Proje Hocam sitesini hayata geçirdim.Hep kendimi geliştirmeyi seven bir yapıya sahip oldum bir şeyi ezberlemektense o şeyi anlamayı tercih ediyorum.Mekanik ve elektronik hep ilgimi çekti bu internet sitesindede bu konularla ve diğer konularla ilgili projeler paylaşıyorum.Şu an Atatürk Üniversitesinde Makine Mühendisliği öğrencisiyim.
1 YORUMLAR

YORUM YAP