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

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
69%
İlginç
17%
Eh İşte
6%
Anlamadım
3%
Kötü
3%
Berbat
3%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
10 YORUMLAR
  • 9 Ağustos 2017 at 12:44

    Murat bey tebrikler güzel uygulama olmuş

  • kemal dengiz
    21 Şubat 2018 at 10:00

    kütüphanede hata veriyoo !!

  • Eren Albayrak
    4 Mart 2018 at 20:47

    Çözebildiniz mi sorunu? Buna göre biz de yapmayı düşünüyoruz da

    • Hasan Tunç
      7 Mart 2018 at 15:30

      ben yaptım herhangi bir hata vermiyor

      • kemal dengiz
        12 Mart 2018 at 13:01

        KODDA HERHANGİ BİR SORUN YAŞADINIZMI ?
        kodu yüklememe rağmen tft ekranda herhangi bir şey çıkmıor

  • kemal dengiz
    12 Mart 2018 at 13:04

    exit status 1
    Error compiling for board Arduino/Genuino Uno.,

    sürekli bu hatayı alıyorum neden acaba

  • bilinmez adam
    29 Ekim 2018 at 09:36

    Kartınız Büyük İhtimalle Bağlı Değil

  • aaa
    17 Kasım 2018 at 17:17

    Merhabalar bu yapacağımız paint projesi için illaki 2.4 inch kullanmak zorundamıyız 2.2 inch kullanabilir miyiz.

  • faruk aslan
    15 Aralık 2018 at 14:09

    acaba paint yerine çeviri uygulaması kullanılabılır mı? kelimeleri mini klavye ile yazsam çeviri yapabilir miyim bir proje üzerinde çalışıyorumda yardımcı olursanız sevinirim çok acil 0546 488 66 87 wp üzer,nden ulaşabilirsiniz

  • Onurcan Dağcı
    18 Ocak 2019 at 18:10

    Bende Derleme Derlediğim Zaman Kodda 3 Dize Hata veriyor.
    4 , 5 , 6. Dizeler Hatalı Gözüküyor.

YORUM YAP