Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 17

Θέμα: 2.4" TFT ρολόϊ με Arduino

  1. #1
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή 2.4" TFT ρολόϊ με Arduino

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002008.jpg Εμφανίσεις:  371 Μέγεθος:  150,7 KBΠατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002035.jpg Εμφανίσεις:  274 Μέγεθος:  140,9 KBΠατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002043.jpg Εμφανίσεις:  242 Μέγεθος:  155,0 KBΠατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002141.jpg Εμφανίσεις:  255 Μέγεθος:  146,3 KB

    Είναι μια μικρή κατασκευή με έτοιμα υλικά, χωρίς στην ουσία κατασκευαστικό κομμάτι, παρά μόνο προγραμματιστικό.
    Βασίζεται σε έναν Arduino UNO R3 και σε μια μικρή οθόνη TFT 2.4" με ενσωματωμένο touchscreen.

    To ρολογάκι αυτό, έχει μια βασική διαφορά απο τα κλασσικά, δεν έχει δυνατότητα χειροκίνητης ρύθμισης ή τήρησης
    χρόνου με τη βοήθεια RTC (Real Time Clock). Για να λειτουργήσει, πρέπει να συνδεθεί σειριακά με υπολογιστή μέσω μιας USB
    θύρας και να συγχρονιστεί με την ώρα του λειτουργικού συστήματος του PC αυτόματα, με την εκτέλεση ενός μικρού
    βοηθητικού προγράμματος που βασίζεται στην εφαρμογή Processing, ή με τη βοήθεια ενός σειριακού τερματικού (π.χ.
    το Serial Monitor του Arduino IDE ή το Hyperterminal) και την εισαγωγή ενός string με τη λεγόμενη Unix Time.

    H ώρα Unix ορίζεται σαν ο αριθμός σε δευτερόλεπτα που έχουν παρέλθει απο την 1/1/1970 και αφορά τη ζώνη UTC (ή πιο
    πρακτικά, την ώρα που ισχύει ακριβώς στον 0 μεσημβρινό). Έτσι λοιπόν, αν θέλουμε να εκφράσουμε την 23:59:59 της
    28ης Αυγούστου 2015, αυτό θα είναι: 1440795599, με ενσωματωμένο υπολογισμό δίσεκτων ετών και μηνών με 31 ημέρες.

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  epochconverter.jpg Εμφανίσεις:  237 Μέγεθος:  107,1 KBΠατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  processing3.jpg Εμφανίσεις:  226 Μέγεθος:  47,0 KB

    20 Not allowed! Not allowed!

  2. 4 μέλη ευχαρίστησαν τον manolena για αυτό το χρήσιμο μήνυμα:

    alfadex (07-09-15), edgar (29-08-15), savas21 (30-08-15), street (01-09-15)

  3. #2
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Είναι πολύ εύκολο να κάνουμε αυτή την μετατροπή με τη βοήθεια ειδικών σελίδων στο διαδίκτυο, όπως π.χ. αυτή:

    http://www.epochconverter.com/

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  epochconverter.jpg Εμφανίσεις:  154 Μέγεθος:  107,1 KB

    Αυτό όλο, είναι και η βάση για τη μέτρηση της ώρας. Εδώ μπορεί να πει κάποιος: "Ωραία, και ποιό είναι το πρωτότυπο του θέματος;"
    Η πρωτοτυπία λοιπόν βρίσκεται στο πως εμφανίζεται η ώρα και η ημερομηνία σε μια μικρή οθονίτσα TFT με ενσωματωμένο SD card,
    η οποία παρεμπιπτόντως, είναι η πιο άχρηστη και απαράδεκτη που έπεσε στα χέρια μου!!! Το πιο απίθανο που συνάντησα, είναι πως για να εμφανιστεί σωστά ένα bitmap, πρέπει να υποστεί επεξεργασία 24bit με 320x240 pixels εύρος και να αποθηκευτεί με αρνητικά χρώματα!!!! Η συγκεκριμένη λοιπόν είναι της mcufriend, απο την bangood. Φανταστείτε, ούτε το site της δεν βγαίνει στο google!!!!

    Με τη βοήθεια λοιπόν του φίλου μας του Google, βρήκα cliparts των αριθμών 0-9 και των ημερών της εβδομάδας και μετά απο επεξεργασία
    με το MSPaint, έφερα στις διαστάσεις και το αρνητικό χρώμα που χρειαζόταν και τις έγραψα στην SD.

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  number.jpg Εμφανίσεις:  133 Μέγεθος:  92,5 KBΠατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  weekday.jpg Εμφανίσεις:  145 Μέγεθος:  87,0 KB

    Με τη βοήθεια του προγράμματος, σε κάθε αλλαγή λεπτού, διαβάζεται η SD και μέσω ταμπελών, εμφανίζονται οι αριθμοί της ώρας
    και η ημέρα της εβδομάδας. Θα παραθέσω αργότερα όλα τα δικά μου αρχεία για χρήση απο όποιον γουστάρει να παίξει. Θα ανεβάσω
    επίσης και video με τη ρύθμιση και λειτουργία του ρολογιού.

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002008.jpg Εμφανίσεις:  163 Μέγεθος:  150,7 KB

    5 Not allowed! Not allowed!

  4. #3
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Για τη συγγραφή του κώδικα, χρειάστηκαν κάποιες βιβλιοθήκες καλών ανθρώπων που έστιψαν τα μυαλά τους να τις φτιάξουν:

    #include <Time.h>
    #include <Adafruit_GFX_AS.h> // Core graphics library
    #include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
    #include <SD.h>
    #include <SPI.h>

    Αν κάποιος έχει ξαναχρησιμοποιήσει τέτοιες οθόνες, θα ξέρει πως η Adafruit έχει για οθόνες γραφικών τη βιβλιοθήκη Adafruit_GFX.h. Με την κινεζο-οθόνη όμως, αποδείχτηκε πως δεν μπορούσε να δουλέψει σωστά, εμφάνιζε πάντα άσπρη οθόνη. Βρέθηκε μετά απο πολύ ψάξιμο και απο άλλους που είχανε πάθει τα ίδια, μια λίγο "πειραγμένη" βιβλιοθήκη, η Adafruit_GFX_AS.h και Adafruit_ILI9341_8bit_AS.h, η οποία έχει ενσωματώσει κάποιες μικροαλλαγές στον controller της οθόνης, τον ILI9341. Πάλι όμως, η ρουτίνα ανάγνωσης ενός αρχείου bmb απο SD κάρτα δεν λειτουργούσε σωστά, μου έφαγε πάρα πολλές ώρες να βρώ τα λάθη τους. Ο thanasis1 ξέρει...Μιλάμε για πολύυυυυ ψάξιμο.....

    Επίσης, για τη διαχείριση της microSD κάρτας, χρησιμοποιήθηκε η SD.h που ευτυχώς δουλεύει καλά. Όλες τώρα αυτές μαζί θα ακολουθήσουν σε ένα συμπιεσμένο αρχείο για όποιον τις χρειάζεται. Επίσης, δύο συμπιεσμένα αρχεία με εικόνες που θα πρέπει να αποσυμπιεστούν κατ' ευθείαν στην microSD χωρίς τοποθέτηση σε φάκελλο.
    Συνημμένα Αρχεία Συνημμένα Αρχεία

    5 Not allowed! Not allowed!

  5. #4
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Ο κώδικας:
    Κώδικας:
    //#define DEBUG
    #include <Time.h>
    #include <Adafruit_GFX_AS.h>    // Core graphics library
    #include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
    #include <SD.h>
    #include <SPI.h>
    
    
    #define MCUFRIENT_2_4_TFT  0x9341
    
    
    #define LCD_CS A3 // Chip Select goes to Analog 3
    #define LCD_CD A2 // Command/Data goes to Analog 2
    #define LCD_WR A1 // LCD Write goes to Analog 1
    #define LCD_RD A0 // LCD Read goes to Analog 0
    #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
    
    
    #define SD_CS 10     // Set the chip select line to whatever you use (10 doesnt conflict with the library)
    #define TIME_HEADER   "Τ"   // Header tag for serial time sync message
    #define TIME_REQUEST  7     // ASCII bell character requests a time sync message 
    
    
    // 16-bit color values:
    #define BLACK        0x0000
    #define WHITE        0xFFFF
    #define RED        0x07FF//
    #define GREEN        0xFBFF//
    #define BLUE        0xFFE0//
    #define SILVER        0xC618
    #define GRAY        0x8410
    #define MAROON        0x8000
    #define YELLOW        0xFFE0
    #define OLIVE        0x8400
    #define LIME        0x07E0
    #define AQUA        0x07FF
    #define TEAL        0x0410
    #define NAVY        0xFF0F//
    #define FUCHSIA        0xF81F
    #define PURPLE        0x8010
    #define TRANSPARENT    0xFFFFFFFF
    
    
    char *timeBuffer[] = {"0.bmp","1.bmp", "2.bmp", "3.bmp", 
                      "4.bmp","5.bmp", "6.bmp", "7.bmp", 
                      "8.bmp","9.bmp", "col.bmp"};
                      
    char *weekDaysBuffer[] = {0,"sunday.bmp", "monday.bmp", "tuesday.bmp", 
                      "wednesday.bmp","thursday.bmp", "friday.bmp", "saturday.bmp", 
                      "sunday.bmp"};                  
                        
    #define ANGLE_0    0
    #define ANGLE_90   1
    #define ANGLE_180  2
    #define ANGLE_270  3
    
    
    int tenths = 0;
    int units = 0 ;
    int temp,hours,minutes,seconds = 0;
    unsigned long pctime;
    boolean updateTime = false;
    boolean updateDate = false;
    uint8_t  spi_save;
    //=======================================================================
    Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
    //=======================================================================
    void setup(void) 
    {  
      Serial.begin(9600);
      SD.begin(SD_CS);
    #ifdef DEBUG  
      Serial.println("Sketch'es location:");
      Serial.println("C:\\Users\\MANOS\\Documents\\HN\\DXP\\AVR 2_4 TFT\\TFT_11");
    
    
      Serial.println(F("Initializing SD card..."));
      if (!SD.begin(SD_CS)) 
      {
        Serial.println(F("Initialization failed!"));
        return;
      }
      Serial.println(F("Initialization done."));
      spi_save = SPCR;
    #endif // DEBUG
    
    
      tft.reset();
      delay(10);
      tft.begin(0x9341);
      tft.fillScreen(BLACK);  
      tft.setRotation(ANGLE_270);
      bmpDraw("clock2.bmp", 30, 0);
      delay(2000);
      
      tft.setCursor(30, 35);
      tft.setTextColor(BLUE);  
      tft.setTextSize(5);
      tft.print("Manos Mar");
      tft.setCursor(50, 95);  
      tft.print("TFT 2.4\"");
      tft.setCursor(85, 155);  
      tft.print("Clock");
      delay(3000);
      tft.fillScreen(BLACK);
      
      pinMode(13, OUTPUT);
      
      tft.setCursor(15, 70);
      tft.setTextColor(WHITE);  
      tft.setTextSize(2);
      tft.println("Waiting for sync message");
      tft.println(" from Processing or from ");
      tft.println("Serial Monitor with format");
      tft.println("Txxxxxxxxxx(x = Unix time)");
      setSyncProvider(requestSync);  //set function to call when sync required
      Serial.println("Waiting for sync message...");
      tft.fillCircle(15, 210, 12, RED);  
    }
    //=======================================================================
    void loop()
    {
      if (Serial.available()) 
      {
        processSyncMessage();
      }
      if (timeStatus()!= timeNotSet) 
      {
        digitalClockDisplay();  
      }
      if (timeStatus() == timeSet) 
      {
        digitalWrite(13, HIGH); // LED on if synced
      } 
      else 
      {
        digitalWrite(13, LOW);  // LED off if needs refresh
      }
      delay(200);
    }
    //=======================================================================
    #define BUFFPIXEL 20
    
    
    void bmpDraw(char *filename, int x, int y) 
    {
      File     bmpFile;
      int      bmpWidth, bmpHeight;   // W+H in pixels
      uint8_t  bmpDepth;              // Bit depth (currently must be 24)
      uint32_t bmpImageoffset;        // Start of image data in file
      uint32_t rowSize;               // Not always = bmpWidth; may have padding
      uint8_t  sdbuffer[3*BUFFPIXEL]; // pixel in buffer (R+G+B per pixel)
      uint16_t lcdbuffer[BUFFPIXEL];  // pixel out buffer (16-bit per pixel)
      uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
      boolean  goodBmp = false;       // Set to true on valid header parse
      boolean  flip    = true;        // BMP is stored bottom-to-top
      int      w, h, row, col;
      uint8_t  r, g, b;
      uint32_t pos = 0, startTime = millis();
      uint8_t  lcdidx = 0;
      boolean  first = true;
    
    
      if((x >= tft.width()) || (y >= tft.height())) return;
      // Open requested file on SD card
      if ((bmpFile = SD.open(filename)) == NULL) 
      {
        Serial.println(F("File not found"));
        return;
      }
      // Parse BMP header
      if(read16(bmpFile) == 0x4D42) 
      { // BMP signature
        Serial.println(read32(bmpFile));
        (void)read32(bmpFile); // Read & ignore creator bytes
        bmpImageoffset = read32(bmpFile); // Start of image data
        Serial.println(bmpImageoffset, DEC);
    
    
        // Read DIB header
        Serial.println(read32(bmpFile));
        bmpWidth  = read32(bmpFile);
        bmpHeight = read32(bmpFile);
    
    
        if(read16(bmpFile) == 1) 
        { // # planes -- must be '1'
          bmpDepth = read16(bmpFile); // bits per pixel
          Serial.println(bmpDepth);
          if((bmpDepth == 24) && (read32(bmpFile) == 0)) 
          { // 0 = uncompressed
            goodBmp = true; // Supported BMP format -- proceed!
            // BMP rows are padded (if needed) to 4-byte boundary
            rowSize = (bmpWidth * 3 + 3) & ~3;
    
    
            // If bmpHeight is negative, image is in top-down order.
            // This is not canon but has been observed in the wild.
            if(bmpHeight < 0) 
            {
              bmpHeight = -bmpHeight;
              flip      = false;
            }
    
    
            // Crop area to be loaded
            w = bmpWidth;
            h = bmpHeight;
            if((x+w-1) >= tft.width())  w = tft.width()  - x;
            if((y+h-1) >= tft.height()) h = tft.height() - y;
    
    
            // Set TFT address window to clipped image bounds
    
    
            for (row=0; row<h; row++) 
            { // For each scanline...
              // Seek to start of scan line.  It might seem labor-
              // intensive to be doing this on every line, but this
              // method covers a lot of gritty details like cropping
              // and scanline padding.  Also, the seek only takes
              // place if the file position actually needs to change
              // (avoids a lot of cluster math in SD library).
              if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
                pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
              else     // Bitmap is stored top-to-bottom
              pos = bmpImageoffset + row * rowSize;
              if(bmpFile.position() != pos) 
              { // Need seek?
                bmpFile.seek(pos);
                buffidx = sizeof(sdbuffer); // Force buffer reload
              }
              for (col=0; col<w; col++) 
              { // For each column...
                // Time to read more pixel data?
                if (buffidx >= sizeof(sdbuffer)) { // Indeed
                  // Push LCD buffer to the display first
                  if(lcdidx > 0) 
                  {
                    tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
                    lcdidx = 0;
                    first  = false;
                  }
    
    
                  bmpFile.read(sdbuffer, sizeof(sdbuffer));
                  buffidx = 0; // Set index to beginning
                }
    
    
                // Convert pixel from BMP to TFT format
                b = sdbuffer[buffidx++];
                g = sdbuffer[buffidx++];
                r = sdbuffer[buffidx++];
                lcdbuffer[lcdidx] = color565(r,g,b);
                tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
              } // end pixel
            } // end scanline
            // Write any remaining data to LCD
            if(lcdidx > 0) 
            {
              tft.drawPixel(col+x, row+y, lcdbuffer[lcdidx]);
            } 
          } // end goodBmp
        }
      }
      bmpFile.close();
      if(!goodBmp) Serial.println(F("BMP format not recognized."));
    }
    //=======================================================================
    uint16_t read16(File &f) 
    {
      uint16_t result;
      ((uint8_t *)&result)[0] = f.read(); // LSB
      ((uint8_t *)&result)[1] = f.read(); // MSB
      return result;
    }
    //=======================================================================
    uint32_t read32(File &f) 
    {
      uint32_t result;
      ((uint8_t *)&result)[0] = f.read(); // LSB
      ((uint8_t *)&result)[1] = f.read();
      ((uint8_t *)&result)[2] = f.read();
      ((uint8_t *)&result)[3] = f.read(); // MSB
      return result;
    }
    //=======================================================================
    void digitalClockDisplay()
    {
      // digital clock display of the time  
      byte zeroes;
      
      printDigits(hour());  
      bmpDraw(tenths[timeBuffer], 0, 40);
      bmpDraw(units[timeBuffer], 65, 40);
      
      Serial.print(":");
      bmpDraw("col.bmp", 129, 40);
      printDigits(minute());
      bmpDraw(tenths[timeBuffer], 193, 40);
      bmpDraw(units[timeBuffer], 257, 40); 
      tft.setCursor(40, 5);
      if(updateDate == true) 
      {
        tft.fillRect(40, 5, 420, 60, BLACK);
        tft.setTextColor(NAVY);
        tft.setTextSize(4);
        tft.print(day()); 
        tft.print("/"); 
        tft.print(month()); 
        tft.print("/"); 
        tft.print(year());
        updateDate = false;
      }   
      bmpDraw(weekday()[weekDaysBuffer], 0, 190);
      
      tft.setCursor(100, 200);
      tft.setTextColor(WHITE);
      tft.setTextSize(4);
      
    /*  zeroes = hour();
      if(zeroes < 10)
      {
        tft.print("0");
      } 
      tft.print(hour());
      tft.print(":");
      zeroes = minute();
      if(zeroes < 10)
      {
        tft.print("0");
      } 
      tft.print(minute());
      tft.print(":");
      zeroes = second();
      if(zeroes < 10)
      {
        tft.print("0");
      } 
      tft.print(second());
      tft.print(" ");
    */  
      updateDate = true;   
    }
    //=======================================================================
    void printDigits(byte digits)
    {
      if(digits < 10)
      {
        Serial.print('0');
      }  
      Serial.print(digits,DEC); 
      units = (digits%10);
      tenths = ((digits/10)%10);  
    }
    //=======================================================================
    void processSyncMessage() 
    {
      
      byte serBuffer = Serial.read();
      const unsigned long DEFAULT_TIME = 1420070400; // Jan 1 2015
    
    
      if(serBuffer == 'T' ) 
      {     
         pctime = Serial.parseInt();
         tft.setCursor(40, 205);
         tft.setTextColor(WHITE); 
         tft.setTextSize(2); 
         tft.fillRect(0, 190, 320, 50, BLACK);
         tft.fillCircle(15, 210, 12, GREEN);
         tft.print(pctime);
         delay(1000);
         
         if(pctime >= DEFAULT_TIME) 
         { // check the integer is a valid time (greater than Jan 1 2015)
           setTime(pctime); // Sync Arduino clock to the time received on the serial port
           tft.fillRect(0, 190, 320, 50, BLACK);
           tft.fillCircle(15, 210, 12, GREEN);
           tft.setCursor(40, 205);
           tft.setTextSize(2);
           tft.setTextColor(WHITE);  
           tft.print("Clock is set.");       
           delay(1000);       
           tft.fillRect(0, 190, 320, 50, BLACK);
           updateTime = true;
           updateDate = true;
         }
      }
    }
    //=======================================================================
    time_t requestSync() 
    {
      Serial.write(TIME_REQUEST);  
      return 0; // the time will be sent later in response to serial mesg
    }
    //=======================================================================
    uint16_t color565(uint8_t r, uint8_t g, uint8_t b) 
    {
      return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
    }

    3 Not allowed! Not allowed!

  6. #5
    Μέλος Το avatar του χρήστη thanasis 1
    Όνομα
    Θανάσης
    Εγγραφή
    Jul 2010
    Περιοχή
    ΑΘΗΝΑ
    Μηνύματα
    1.382

    Προεπιλογή

    Α ρε μανο τα καταφερες οπως παντα αλλωστε εισαι δυναμη,ωραιος ρε συ.

    0 Not allowed! Not allowed!

  7. Ένα μέλος ευχαρίστησε τον thanasis 1 για αυτό το χρήσιμο μήνυμα:

    manolena (29-08-15)

  8. #6
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    πάντα τέτοια...

    0 Not allowed! Not allowed!

  9. Ένα μέλος ευχαρίστησε τον SeAfasia για αυτό το χρήσιμο μήνυμα:

    manolena (29-08-15)

  10. #7
    Μέλος Το avatar του χρήστη katmadas
    Όνομα
    Φανης
    Εγγραφή
    Apr 2006
    Περιοχή
    Θεσσαλονικη
    Μηνύματα
    2.927

    Προεπιλογή

    Μπραβο μανο....
    Τον εχεις πιει το αιμα τον arduino!

    0 Not allowed! Not allowed!
    Καλοκαιρι ειναι αν ετσι νιωθεις....
    www.oramasolutions.com

    Linkedin

  11. Ένα μέλος ευχαρίστησε τον katmadas για αυτό το χρήσιμο μήνυμα:

    manolena (29-08-15)

  12. #8
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Για να προγραμματιστεί ο UNO με το παραγόμενο hex αρχείο απο τον πιο πάνω κώδικα, πρέπει να χρησιμοποιηθούν και οι ανάλογες βιβλιοθήκες
    που -κατά τα γνωστά- θα πρέπει να τοποθετηθούν στον αντίστοιχο φάκελλο C:\...\arduino-1.x.x\libraries στο σημείο που έχετε εγκαταστήσει το Arduino IDE. Κατεβάστε κάπου μαζί τα δύο συνημμένα αρχεία "Libraries.part1.zip" και "Libraries.part2.zip" και ξεκινώντας απο το πρώτο, αποσυμπιέστε τα.
    Συνημμένα Αρχεία Συνημμένα Αρχεία

    0 Not allowed! Not allowed!

  13. #9
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

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

    Αρχικά, εκτός απο το IDE του Arduino, θα πρέπει να κατεβεί και να εγκατασταθεί στον υπολογιστή, το Processing, μια Java πλατφόρμα που μπορεί κάποιος να φτιάξει μέχρι και εκτελέσιμα προγράμματα σε Windows, Android ή ακόμα και Javascript. Αυτός είναι και ο ένας απο τους 2 τρόπους για να συγχρονιστεί το ρολογάκι. Αυτού ανοίξετε το Arduino IDE και επιτυχώς "κάψετε" τον παραπάνω κώδικα, ανοίξτε το συνημμένο σε αυτό το μήνυμα αρχείο με το SyncArduinoClock.pde που θα αποσυμπιέσετε.

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  processing1.jpg Εμφανίσεις:  122 Μέγεθος:  147,7 KB

    Αριστερά πάνω, κάνετε κλικ στο κουμπί "Play"και σε μερικά δευτερόλεπτα θα εμφανιστεί το πιο κάτω παράθυρο:

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  processing2.jpg Εμφανίσεις:  111 Μέγεθος:  12,1 KB

    Εφ' όσον το Arduino σας είναι ήδη συνδεδεμένο μέσω USB με τον υπολογιστή, μόλις κάνετε κλίκ μέσα στο παραπάνω παράθυρο, θα δείτε την πιο κάτω εικόνα:

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  20150829_002043.jpg Εμφανίσεις:  122 Μέγεθος:  155,0 KB... να αλλάζει, δηλαδή η κόκκινη τελεία να γίνεται πράσινη και να εμφανίζεται το μήνυμα "Clock is set." Αυτό που συμβαίνει στην πραγματικότητα, είναι πως ο Arduino περιμένει να δεί στη σειριακή του πόρτα τον (αγγλικό-κεφαλαίο) χαρακτήρα "Τ" ακολουθούμενο απο 10 ψηφία που εκφράζουν την Unix time του συστήματος του υπολογιστή σας. Μόλις γίνει αυτό, ξεκινάει να εκτελείται ο κώδικας που φαίνεται παραπάνω.

    Ο δεύτερος τρόπος συγχρονισμού γίνεται με χειροκίνητη επέμβαση απο εσάς μέσω του Serial Monitor του Arduino IDE. Ανοίγετε το παράθυρό του όπως πιο κάτω:

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  Serial Monitor1.jpg Εμφανίσεις:  128 Μέγεθος:  94,4 KB

    ...και απλά, με το χέρι βάζετε τον (αγγλικό-κεφαλαίο) χαρακτήρα "Τ" ακολουθούμενο απο τα 10 ψηφία που θα αντιγράψετε απο τον Epoch Converter. Εδώ πρέπει να γίνει μια επισήμανση: ο μετατροπέας συνήθως δίνει την παγκόσμια ώρα αναφοράς (ή UTC= Universal Co-ordinated Time) που ανάλογα με τη θερινή ή χειμερινή ώρα είναι -3 ή -2 ώρες πίσω απο την τοπική μας ώρα (ώρα BRAVO = +2UTC, ώρα CHARLIE =+3UTC). Γράφετε λοιπόν με αγγλικό-κεφαλαίο χαρακτήρα "Τ" τον αριθμό που θα αντιγράψετε απο τον μετατροπέα και θα προσθέσετε 10800 δευτερόλεπτα για την καλοκαιρινή ώρα. Πιέστε "Send" και θα δείτε το ρολογάκι να ξεκινά να δουλεύει!
    Συνημμένα Αρχεία Συνημμένα Αρχεία

    0 Not allowed! Not allowed!

  14. #10
    Μέλος Το avatar του χρήστη her
    Όνομα
    Ηρακλής
    Εγγραφή
    Jun 2007
    Περιοχή
    Αργυρούπολη
    Μηνύματα
    1.123

    Προεπιλογή

    Μανό είσαι τέλειος.
    Θέλω να μετατρέψω τον κώδικα σου και να διαβάζω την ώρα του υπολογιστή και να την απεικονίζω μέσω σειριακής, επειδή δεν έχω τέτοια οθόνη να βάλω. Τι θα πρέπει να μετατραπεί στον κώδικα; Έχω προσθέσει τις βιβλιοθήκες που ανεβάσει αλλά μου βγαζει πολλά σφάλματα από τις πρώτες γραμμές του κώδικα. Έχω προσπαθήσει να κάνω την μετατροπή για να έρθει στα μέτρα μου αλλά έχω πολλά λάθη .
    Σε ευχαριστώ

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. TFT LCD 4.3" τρίλιζα με Arduino DUE
    By manolena in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 13
    Τελευταίο Μήνυμα: 12-08-16, 17:30
  2. Αναζήτηση οθονών TFT 8" & 10,2" και 2 διαφ. καρτες γραφικων σε 1 PC γινεται;
    By stelios2000 in forum Κυκλώματα Εικόνας-'Ηχου & Φωτισμού
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 28-07-09, 07:11
  3. Διάσταση TFT οθόνης H/Y (22" vs. 19")...
    By Γιώργος Ανώνυμος in forum Software Η/Υ
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 18-09-08, 22:24

Tags for this Thread

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας