# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  Arduino @ TFT

## yiannossavva

Έχω αγοράσει από το EBay αυτή την οθόνη αφής.
http://www.ebay.com/itm/261120303957...84.m1439.l2649
  Την συνδέω σε ένα arduino uno.
  Το code που ακολουθεί   δεν δουλεύει ενώ μου το έστειλε ο προμηθευτής. 

  #include "TFTLCD.h"
  #include "TouchScreen.h"


  //Duemilanove/Diecimila/UNO/etc ('168 and '328 chips) microcontoller:



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

  #define TS_MINX 150
  #define TS_MINY 120
  #define TS_MAXX 920
  #define TS_MAXY 940

  // 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 
  // optional
  #define LCD_RESET A4

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



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

  #define BOXSIZE 40
  #define PENRADIUS 3
  int oldcolor, currentcolor;

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

    tft.reset();

    uint16_t identifier = tft.readRegister(0x0);
    if (identifier == 0x9325) {
      Serial.println("Found ILI9325");
    } else if (identifier == 0x932 :Cool:  {
      Serial.println("Found ILI9328");
    } else {
      Serial.print("Unknown driver chip ");
      Serial.println(identifier, HEX);
      while (1);
    }

    tft.initDisplay(); 
    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);
    Point p = ts.getPoint();
    digitalWrite(13, LOW);


    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) {


      if (p.y < (TS_MINY-5)) {
        Serial.println("erase");
       // press the bottom of the screen to erase 
        tft.fillRect(0, BOXSIZE, tft.width(), tft.height()-BOXSIZE, BLACK);

      }
      // turn 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(), 0);

      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);
      }
    }
  }


  Κάνω κανονικά upload και το αποτέλεσμα είναι μόνο μια άσπρη οθόνη.
  Κάποιος πιο έμπειρος μπορεί να καταλάβει τη συμβαίνει?

  Ευχαριστώ.

----------


## vmanos

Τΐς βιβλιοθηκες τις εβαλες στον φακελο Libraries του Arduino ?

----------


## thanasis 1

Καλησπερα πηρα αυτην την 2,4" tft lcd και για καποιο λογο δεν λεει ποιον ελεγκτη φοραει αλλα απο οτι ειδα σε αλλες σελιδες(μια απο αυτες) λογικα εχει τον ILI9325,
κατεβασα την βιβλιοθηκη utft και ειδα οτι υποστηριζει τους *ILI9325C* , *ILI9325D_8* , *ILI9325D_16* λογικα καποιος απο αυτους θα παιζει και στην δικια μου(θελω να πιστευω).
Επειδη διαθετω τον atmega328p εψαξα και βρηκα αυτο εγω συνδεσα οπως λεει :

DB0-DB7 ---> 0-7(PD0-PD7)

RS ---> A5(PC5)
WR ---> A4(PC4)
RD ---> 3.3V
CS ---> A3(PC3)
REST ---> A2(PC2)

εγω στο παραδειγμα εβαλα τον *ILI9325C* αλλα δεν μου δουλεψε.Εχει δουλεψει κανεις με αυτην την οθονη??
Απο θεμα συνδεσης ειμαι οκ?ωστε να αποκλεισουμε αυτο το λαθος.

----------


## manolena

Η οθόνη αυτή έχει παράδειγμα εφαρμογής εδώ:

http://learning.grobotronics.com/201...-touch-screen/

Αν το φορτώσεις με τις ανάλογες μετατροπές σύμφωνα με τις δικές σου συνδέσεις, δουλεύει;
Θεωρώ επίσης οτι πρόσεξες πως σύμφωνα με το datasheet έχει τάση τροφοδοσίας 3.3V

http://grobotronics.com/images/datasheets/41608.pdf

Shield για αυτή την οθόνη έχεις;

----------


## thanasis 1

Εγω την τροφοδοτω με 3,3v αλλα απο οτι βλεπω εδω(ετσι ειναι και σε εμενα)



εχει voltage regulator στα 3v αρα μπορω να του δωσω στην τροφοδοσια 5V??Σε μερικα σαιτ λενε οτι μπορεις να δωσεις 5V αλλα σε αλλα οχι παρα μονο 3,3V. :Confused1: 
Αυτο που μου εβαλες το ειχα δει αλλα δεν το δοκιμασα μιας και βρηκα την βιβλιοθηκη.
Shield δεν εχω αλλα ειναι απαραιτητο??εγω δεν εχω arduino παρα μονο σκετο το chip(atmega328p),χωρις αυτο δεν δουλευει??

----------


## manolena

Αν μπορείς να εξασφαλίσεις οτι τα σήματα απο τον μ/Ε είναι σε εύρος 3.3V, το shield δεν είναι απαραίτητο. O 328 μπορεί να τροφοδοτηθεί με 3.3V οπότε δεν θα έχεις πρόβλημα.
Απο το σχηματικό προκύπτει οτι η πλακέτα της οθόνης έχει όντως έναν 3.3V regulator για την τροφοδοσία του controller της αλλά οι γραμμές διασύνδεσης με τον ATMega328 σου είναι συμβατικές. Άρα πρέπει οπωσδήποτε να κατεβάσεις την τροφοδοσία του μ/Ε στα 3.3V.

----------


## thanasis 1

Τον atmega328p τον τροφοδοτω με 3,3v και τα σηματα που βγαζει ειναι στα 3,3v.Μπορει να υπαρχει ασυμβατοτητα με τους *ILI9325C* , *ILI9325D_8* , *ILI9325D_16* που υποστηριζει η βιβλιοθηκη??
Να δοκιμασω να τροφοδοτησω την οθονη με 5v μπας και δεν δουλευει με 3,3v αλλα να σου πω την αληθεια φοβαμαι μην την παρω στο χερι.Τις συνδεσεις πως τις βλεπεις ειναι σωστες??

----------


## manolena

Οι συνδέσεις δεν νομίζω να έχουν θέμα, έτσι κι αλλιώς απο την UTFT ορίζεις εσύ πως αυτές διαμορφώνονται. Την οθόνη μην την πας στα 5V, κρίμα είναι, αν και έχουν αναφερθεί κάτι περιπτώσεις που μερικοί τύποι τις έχουν παει στα 5 και δουλεύουν.

Ο controller της οθόνης είναι όντως ο ILI9325, απλά έχει δυνατότητα οδήγησης σε 8 και 16bit εύρος πληροφορίας. Εσύ θα επιλέξεις τονILI9325D-8 γιατί ο ATMega328 δεν μπορεί να βγάλει τόσο μακρυά πληροφορία χωρίς να κλατάρει. Νομίζω οτι έχει ένα jumper απο κάτω η πλακέτα της οθόνης σου για 8 ή 16bit λειτουργία.

----------


## thanasis 1

Αυτο το jumper το εχω στον "αερα" γιατι λεει οτι μονο ετσι λιτουργει στα 8bit αν βραχυκυκλωθει πας στα 16bit εγω παντως δεν εχω συνδεσει πουθενα τα DB8-DB15.

----------


## manolena

```
#include <UTFT.h>
//#define TOUCH_ORIENTATION  PORTRAIT

UTFT myGLCD(ITDB24D, Α5, Α4, Α3, Α2 ;

/*
DB0-DB7 ---> 0-7(PD0-PD7)

RS ---> A5(PC5)
WR ---> A4(PC4)
RD ---> 3.3V
CS ---> A3(PC3)
REST ---> A2(PC2)
*/

```



Βάλε αυτές τις γραμμές στον κώδικά σου. Κάνει τα ίδια;

----------


## thanasis 1

Οταν βαζω UTFT myGLCD(ILI9325D_8,Α5, Α4, Α3, Α2); μου χτυπαει δεν το παιρνει...

----------


## manolena

*UTFT myGLCD(ITDB24D, Α5, Α4, Α3, Α2) ;


*

----------


## thanasis 1

Παλι χτυπαει λαθος

Arduino: 1.6.1 (Windows 7), Board: "Arduino Uno"

UTFT_Textrotation_Demo.pde:19:1: error: stray '\' in program

UTFT_Textrotation_Demo.pde:19:1: error: stray '\' in program

UTFT_Textrotation_Demo.pde:19:1: error: stray '\' in program

UTFT_Textrotation_Demo.pde:19:1: error: stray '\' in program

UTFT_Textrotation_Demo.pde:19:23: error: 'u03915' was not declared in this scope

UTFT_Textrotation_Demo.pde:19:32: error: 'u03914' was not declared in this scope

UTFT_Textrotation_Demo.pde:19:41: error: 'u03913' was not declared in this scope

UTFT_Textrotation_Demo.pde:19:50: error: 'u03912' was not declared in this scope

Error compiling.

----------


## manolena

UTFT_Textrotation_Demo.pde:19:1: error: stray '\' in program

Κάπου έχεις γράψει ελληνικά και όχι ANSI. Ο arduino στα σκετσάκια του δεν θέλει χαρακτήρες ακτός απο ANSI. Ψάξε που έχεις γράψει έστω και κόμμα.

----------

thanasis 1 (29-03-15)

----------


## thanasis 1

Το διορθωσα αλλα και παλι τιποτα.Βασικα δεν υπαρχει καθολου επικοινωνια με την οθονη απλα αναβει το led για τον φωτισμο,τα πιν του atmega βγαζουν ταση κανονικα.

----------


## manolena

Μέσα στο φάκελο που κατέβασες τη βιβλιοθήκη UTFT, υπάρχει ένα αρχείο, το UTFT_Requirements.pdf

Εκεί μέσα λέει:


_Connect DB0-DB7 to GND for 8bit display modules 

_http://www.rinkydinkelectronics.com/...quirements.pdf

----------

thanasis 1 (29-03-15)

----------


## thanasis 1

Αν συνδεσω _DB0-DB7 to GND τ_α data θα πρεπει να βαλω στην θεσης τους τα DB8-DB15 ??

Α βρηκα και αυτο: 

*In 16 bit mode pins DB8-DB15 and DB0-DB7 are used to send data.**in 8 bit mode pins DB8-DB15 are used and DB0-DB7 keep floating or ground.**8 bit interface occupy less IO than the 16 bit interface, but its slower in screen updates.*

----------


## manolena

Θανάση, σε αυτό το αρχείο που σου έδωσα, έχει στη σελίδα 3 ένα pin mapping για arduino UNO. Το διάβασες καθόλου;

http://www.rinkydinkelectronics.com/...quirements.pdf

----------


## thanasis 1

Ναι μα απο εκει βρηκα τις συνδεσεις ελα ομως που δεν ειδα τα μικρα γραμματα κατω κατω που λεει για την λειτουργια των 8bit.
Τωρα θα τα αλλαξω δηλαδη θα αφησω στον αερα τα db0-db7 και θα βαλω τα db8-db15.

----------


## thanasis 1

Λοιπον τα αλλαξα και εβαλα ILI9325C πηγε να ξεκινηση αλλα κολλησε θα δοκιμασω με το ILI9325D_8
Ολα καλα τωρα δουλευει τελεια απλα ηθελε και το RD να το συνδεσω στα 3.3V,μονο τωρα που στα γραμματα μου πεταει σφαλμα

Arduino: 1.6.1 (Windows 7), Board: "Arduino Uno"

C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:14:14: error: variable 'SmallFont' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

 fontdatatype SmallFont[1144] PROGMEM={         

              ^

C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:118:14  : error: variable 'BigFont' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

 fontdatatype BigFont[3044] PROGMEM={

              ^

C:\Program Files (x86)\Arduino\libraries\UTFT\DefaultFonts.c:227:14  : error: variable 'SevenSegNumFont' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

 fontdatatype SevenSegNumFont[2004] PROGMEM={

              ^

Error compiling.

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.

----------


## manolena

Κάνε το fontdatatype που έχει το αρχείο της γραμματοσειράς const unsigned char και μη χρησιμοποιείς το definition του.
Δηλαδή, για παράδειγμα και για τη γραμματοσειρά SmallFont θα γίνει const unsigned char SmallFont[1144] PROGMEM={   κ.τ.λ.

Α, τη γραμματοσειρά τη δήλωσες extern στο σκετσάκι σου;

extern uint8_t SmallFont[];

----------


## thanasis 1

Ναι μανο το βρηκα....
Ναι κανονικα την δηλωσα!

----------


## manolena

Και; Δεν δουλεύει ακόμα και τώρα;

----------


## thanasis 1

Τωρα ειναι μια χαρα απλα εγω ειχα βαλει *'const fontdatatype SmallFont[1144] PROGMEM={}*'
Υπαρχει καποιος σοβαρος λογος να το κανω ετσι οπως μου το προτεινες '*const unsigned char SmallFont[1144] PROGMEM={}*'.

----------


## manolena

Ωραία λοιπόν. Πάμε και για λίγο ύπνο γιατί στο τέλος θα μας διώξει μια και καλή το αφεντικό...

----------


## thanasis 1

Οχι δεν θελω τετοια,οχι τιποτα αλλο θα το εχω βαρος στην συνειδηση μου.

----------


## thanasis 1

Κατι αλλο βλεποντας αυτο 



λεει η εντολη *UTFT    myGLCD(ILI9325C,19,18,17,16)* απο την πανω φωτο πως καταλαβαινεις ποιο ειναι το 19,18,17,16??
ή αντιστοιχα στην εντολη για το touch *UTouch  myTouch( 15,10,14, 9,8 )* γιατι μιλαμε για τα ψηφιακά αριθμημένα pins στον Arduino.

----------


## manolena

Κάτω δεξιά έχει ένα υπόμνημα με χρωματισμούς. Το λιλά-μωβ είναι τα digital pins. Εξ' ορισμού, η αρίθμηση σε constructors όπως η 
UTFT myGLCD(ILI9325C, 19, 18, 17, 16) χρησιμοποιεί τα digital pins αλλά όχι ενός arduino UNO. Είναι για MEGA ή DUE. Ο ATMega328
έχει 14 digital (0-13) και 7 analog (A0-A7) pins.

Διάλεξε λοιπόν 8 απο αυτά για data, 4 για εντολές οθόνης και για το touch screen πρέπει να χρησιμοποιήσεις analog A0-A7 αλλά
σε digital configuration.

Για παράδειγμα, μπορείς να έχεις D0-D7 για data οθόνης, D8-D11 για τα άλλα σήματα και Α0-Α4 για το touch. 
*UTFT myGLCD(ILI9325C,8,9,10,11);
**UTouch myTouch( Α0,Α1,Α2, Α3,Α4 );*

----------

thanasis 1 (29-03-15)

----------


## thanasis 1

Ετρεξα το παραδειγμα UTFT_Bitmap και μου εβγαλε το εξης

Arduino: 1.6.1 (Windows 7), Board: "Arduino Uno"

Build options changed, rebuilding all

icon.c:7:1: error: unknown type name 'prog_uint16_t'

 prog_uint16_t icon[0x400] PROGMEM ={

 ^

icon.c:7:15: error: variable 'icon' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

 prog_uint16_t icon[0x400] PROGMEM ={

               ^

Error compiling.

Το εψαξα και εκανα κατι αλλαγες που βρηκα αλλα δεν δουλεψε,τι αλλαγη πρεπει να γινει?

----------


## manolena

Κατ' αρχήν, το αρχείο icon.c το έχεις στον ίδιο φάκελο με το σκετσάκι σου;

Τα αρχεία εικόνων για bitmaps πρέπει να ορίζονται σαν const unsigned short:

const unsigned short icon[0x400] PROGMEM = {}; και να τα δηλώνεις ως extern στο κύριο σκετσάκι σου.

----------

thanasis 1 (29-03-15)

----------


## manolena

Πως πήγε;

----------


## thanasis 1

Φυσαει η οθονη μανο,με παιδεψε λιγο το καλιμπραρισμα της οθονης για το touch αλλα εν τελει το βρηκα και τωρα πιστευω πως ειμαι ανταξει.
Αν την λειτουργησω στα 16bit θα παιξει ποιο γρηγορα η οθονη απο οτι ειναι??Αν και τωρα που δουλευει στα 8bit σφαιρα παει.
Παντως εισαι ωραιος,πολλα μπραβο για τις αμεσες απαντησεις σου και γενικα για την ολη βοηθεια σου. :Applause:

----------


## manolena

Κοίτα με τι έχω μπλέξει εγώ, μια oθόνη 4.3" με έναν arduino DUE...:

20150329_000650.jpg20150329_001015.jpg20150329_001037.jpg

...και τα πειράματά μου. Έπεσες κι εσύ στην περίπτωση όμως...

----------


## thanasis 1

Ομορφιες βλεπω τι θα φτιαξεις φωτοαλμπουμ,να φανταστω οτι την φωτο την διαβαζει απο καρτα sd ή κατευθειαν απο τον μ\ε?
Στην πρωτη φωτο εχεις χαμηλοτερο φωτισμο στην οθονη ή εχεις πειραξει το contrast της οθονης??Ρωταω γιατι φενεται τελεια.

----------


## manolena

Όχι, το έχει στη flash του μ/Ε, θέλω να δώ τα όριά του. Δεν τα βλέπω όμως!!! Οι ARM είναι δύναμη!
Οι φωτογραφίες είναι χωρίς να πειράξω το πρόγραμμα, διαφορετικές ρυθμίσεις στο τηλέφωνο που τις τράβαγε.

Τώρα φτιάχνω το σκελετό ενός μενού επιλογής λειτουργιών με εικονίδια όπως και καλά στα smartphones. Μανίκι...

----------


## thanasis 1

> Τώρα φτιάχνω το σκελετό ενός μενού επιλογής λειτουργιών με εικονίδια όπως και καλά στα smartphones. Μανίκι...



Εισαι καλος εσυ δεν σε φοβαμαι,εδω τα εβγαλες εις περας μαζι μου εκει θα κολωσεις. :Wink:

----------

manolena (29-03-15)

----------


## manolena

Χαχαχαχαααα!!!

ΒΕΑΝ.jpg

----------


## thanasis 1

Δοκιμασα να την δουλεψω σε 16bit,συνδεσα και τα αλλα pin της οθονης και βραχυκυκλωσα το j3 αλλα μου δειχνει ασπρη την οθονη και γενικα μου κολλαει οταν παει να αρχισει και δεν δειχνει τιποτα.
Ειναι λογικο αυτο??

Edit:

Εβαλα UTFT myGLCD(ILI9325D_16,A5,A4,A3,A2); ναι μεν δουλευει αλλα και παλι σαν να ειναι στα 8bit παει.

----------


## thanasis 1

Χρησιμοποιησα το παραδειγμα 'dumpfile' που εχει το arduino για την sd και απλα αλλαξα το "serial.print" με "myGLCD.print(.....)"



```
/*
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 10
*/
#include <UTFT.h>
#include <SPI.h>
#include <SD.h>

UTFT myGLCD(ILI9325C,A5, A4, A3, A2);

extern uint8_t SmallFont[];

void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(255,255,255);
  myGLCD.fillScr(255, 255, 255);

  myGLCD.print("Initializing SD card...", CENTER, 1);
  pinMode(10, OUTPUT);
  
  if (!SD.begin(10)) {
    myGLCD.print("Card failed, or not present", CENTER, 20);
  }
  else
  myGLCD.print("card initialized", CENTER, 40);

  File dataFile = SD.open("test.txt");

  if (dataFile) {
    while (dataFile.available()) {
      myGLCD.printNumI(dataFile.read(), CENTER, 60);    <-------------------
    }
    dataFile.close();
  }
  else {
    myGLCD.print("error opening test.txt", CENTER, 80);
  }
}

void loop()
{
}
```


εχω φτιαξει ενα αρχειο test.txt και του εχω βαλει εναν αριθμο μεσα και το αρχειο αυτο το εχω στην καρτα sd.Οταν το τρεχω μου βγαζει 
εναν ασχετο αριθμο,πρεπει να γραφτει καπως αλλιως στην sd για να μπορει να μου εμφανισει οτι γραφω μεσα??

----------


## thanasis 1

Σε μια 2.4" οθονη εμφανιζω καποιες τιμες και αυτες ειναι απο -500 εως 500,το προβλημα μου ειναι οτι οταν π.χ. εμφανισει την τιμη
-150 και μετα παει να εμφανισει την τιμη 25 μενει ο χαρακτηρας "-" και γενικα δεν ανανεωνεται η περιοχη αυτη με αποτελεσμα να 
μην μπορεις να διακρινεις τι τιμη λεει.
Σαν λυση εκανα το εξης πριν εμφανισει την νεα τιμη του λεω να εκτυπωσει ενα ορθογωνιο σχημα ωστε να σβησει οτι υπολιπο που εχει μενει και 
να μου εμφανισει σωστα την νεα τιμη.Αυτο ομως δεν βολευει αν θες να ανανεωνεις πολυ γρηγορα τα δεδομενα,ξερεται καποια αλλη λυση
ωστε να απαλλαγω απο αυτον τον τροπο??

----------


## Fire Doger

Αν το font σου δεν είναι όλοι οι χαρακτήρες ίδιο μέγεθος (true type) τότε δεν μπορείς να κάνεις κάτι άλλο. Και η βιβλιοθήκη της adafruit το ίδιο προτείνει και έχει μια εντολή η οποία σου δίνει το ελάχιστο παραλληλόγραμμο για να γεμίσεις με χρώμα.

Αν το font σου είναι true type τότε μπορείς να ορίσεις ως 2ο χρώμα το χρώμα του παρασκηνίου και μόλις γράφεται καινούριος χαρακτήρας σβήνεται ότι έχει από πίσω.
Για να αποφύγεις το - μπορείς να εκτυπώνεις ένα κενό και μετά τον αριθμό, ο κέρσορας θα πάει μια θέση δεξιά αυτόματα.
Για ακόμα ποιο γρήγορα μπορείς να κάνεις μια συνάρτηση που να σβήνει μόνο το - με ευθείες γραμμές και να την καλείς αν είναι θετικός.

----------


## thanasis 1

> Αν το font σου είναι true type τότε μπορείς να ορίσεις ως 2ο χρώμα το χρώμα του παρασκηνίου και μόλις γράφεται καινούριος χαρακτήρας σβήνεται ότι έχει από πίσω.



Στεφανε αυτο εχω κανει μεχρις στιγμης μιας και υπαρχει εντολη που μπορεις να ορισεις το χρωμα στο background αλλα και παλι οταν εχω μια μεγαλη τιμη και μετα
εμφανισω μια μικρη παλι μενει κατι.Μαλλον θα αρκεστω στην λυση με το παραλληλογραμμο.

----------


## thanasis 1

Λοιπον σκεφτομαι να παρω αυτην την 3.5" οθονη που ειναι σκετη.
Oι περισσοτερες ετοιμες οθονες(module) ερχονται απο την κινα με τον touch controller xpt2046 οποτε αν βαλω αυτον τον controller σε αυτην θα παιξει ετσι δεν ειναι?
Επισης λεει στην περιγραφη *"3.5" TFT MCU Interface LCD Display Vertical Touch Screen Module 320 x 480 Pixels"*,με το "*vertical* *Touch Screen*" θελει να πει κατι ή ετσι το εγραψε αραγε?

----------


## Fire Doger

http://www.ebay.com/sch/i.html?_from...xtion&_sacat=0

Σε θέμα γραφικών και χρόνο ανάπτυξης δεν υπάρχουν σε σύγκριση με τις άλλες και για μικρούς μΕ.
Θα σου πρότεινα να αγοράσεις τουλάχιστον την ποιο φτηνή να την δοκιμάσεις!
Εγώ τις αγάπησα, σχεδίαση σε GIMP όχι γραμμές και υπολογισμούς, εξαγωγή, τέλος.
Και debug σε simulator συνδέοντας πραγματικό μΕ. Όλη την δουλειά την κάνω με το arduino στο usb. Μια φορά της φόρτωσα το πρόγραμμα, είδα πως αποκρίνεται όπως ακριβώς στον υπολογιστή και την άφησα στην άκρη μέχρι να το τελειώσω.

Απλώς ο χειρόγραφος compiler της είναι για πέταμα (σιγά σιγά βελτιώνεται, πχ τελευταία έβαλαν προτάσεις για τις μεταβλητές). Με λίγο ανορθόδοξο προγραμματισμό και notepad++ πάει τζάμι.

Τώρα που είπα τζάμι, ο μ@λ@κ@ς 1η μέρα μου έπεσε σε μια μεταλλική γωνία και έβγαλε μια μικρή φλούδα, αλλά κανένα πρόβλημα στην αφή.

*Edit: Έχω μια 3.5" και σκέφτομαι να χτυπήσω 2η (*link*) που είναι φτηνή.

----------


## thanasis 1

Φιλτατε στεφανε εχω παρει μια 7" nextion και πραγματι ειναι πολυ ωραιες και δεν σου βγαινει η πιστη για να σχεδιασεις κατι.
Απλα θελω μια οθονη απλη και σκεφτηκα να παρω την παραπανω που εδειξα,λογικα θα δουλεψει.

----------


## Fire Doger

Α ε τότε πάω πάσο, είπα μήπως δεν τις ξέρεις :Smile: 

Για την οθόνη δεν είμαι σίγουρος αλλά έτσι πιστεύω, και η nextion που έχω μπροστά μου αυτόν έχει.

----------


## thanasis 1

Μπα μην νομιζεις και εγω τις ειδα για πρωτη φορα εδω δεν τις ηξερα.

----------


## maki

καλησπέρα παιδια...κατι απλό ηθελα να ρωτησω, ποια εντολή C++ 'ανανεώνει' την οθόνη στην αποστολή δεδομενων? δοκιμασα:

tft.reset();
tft.clear();
refresh();
return 0;

error:
'class Adafruit_ST7735' has no member named 'reset'

----------


## leuteris107

Καλημέρα σ’ όλους
Πρόσφατα  πήρα  αυτή την 3.2" TFT την οποία συνδύασα με την αυτή την ασπίδα και ένα arduino Mega 2560.  Έχοντας και μια micro sd 2Gb προσπάθησα να βάλω φωτογραφίες για να βλέπω στην οθόνη.
Διαμόρφωσα την κάρτα σε FAT και της έδωσα το όνομα MYFILES.
Πήρα μερικές φωτογραφίες που μετέτρεψα σε .RAW, τους έδωσα ονόματα π.χ 001.RAW και τις έβαλα στην SD.
Τρέχω το παρακάτω πρόγραμμα:



```
#include <tinyFAT.h> 
#include <UTFT.h> 
#include <UTFT_tinyFAT.h> 
extern uint8_t SmallFont[];
```





```
UTFT myGLCD(ILI9341_16, 38,39,40,41); 

UTFT_tinyFAT myFiles(&myGLCD); 
char* files320[]={"001.RAW", "002.RAW", "003.RAW"}; 
char* files[10];
int picsize_x, picsize_y; 
boolean display_rendertime=false;  
boolean display_filename=true;   
word res;
long sm, em; 
 
void setup() {   
  myGLCD.InitLCD();   
  myGLCD.clrScr();   
  file.initFAT();   
  myGLCD.setColor(255,255,255);   
  myGLCD.setFont(SmallFont);   
  picsize_x=myGLCD.getDisplayXSize();   
  picsize_y=myGLCD.getDisplayYSize();   
  switch (picsize_x)   
  {     
    case 320:
      for (int z=0; z<sizeof(files320)/sizeof(*files320);z++)
        files[z] = files320[z];
      break;
      }
    }
   
    void loop()
    {    
      for (int i=0; i<(sizeof(files)/sizeof(*files)); i++)   
      {    
        if (files[i]!="")    
        {      
          sm=millis();       
        res=myFiles.loadBitmap(0, 0, picsize_x, picsize_y, files[i]);       
        em=millis();       
        if (res!=0)      
        {        
          if (res==0x10)        
          {          
            myGLCD.print("File not found...", 0, 0);           
            myGLCD.print(files[i], 0, 14);        
            }         
            else         
            {           
              myGLCD.print("ERROR: ", 0, 0);           
              myGLCD.printNumI(res, 56, 0);         
              }         
              delay(3000);         
              myGLCD.clrScr();       
              }       
              else       
              {         
                if (display_rendertime==true)         
                {           
                  myGLCD.print("Rendertime (secs): ", 0, 0);           
                  myGLCD.printNumF(float((em-sm)/1000.0), 2, 160,0);           
}         
if (display_filename==true)         
{          
  myGLCD.print(files[i], CENTER, myGLCD.getDisplayYSize()-12);         
  }        
  delay(3000);      
  }    
  }  
  }
  }
```


Όταν τρέχει το πρόγραμμα μου βγάζει το μήνυμα File mot found...... και από κάτω εναλλάσσεται το 001.RAW, 002.RAW, 003.RAW χωρίς να βλέπω εικόνες . Τι λάθος έχω κάνει; 
Ευχαριστώ.

----------

