اطلاعیه

Collapse
No announcement yet.

تنظیم ابعاد صفحه نمایشگر tft

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تنظیم ابعاد صفحه نمایشگر tft

    سلام
    دوستان توی نت چند برنامه مربوط به نمایش ساعت و دما رطوبت پیدا کردم روی اردوینو پروگرام کردم چون برنامه مربوط به نمایشگر های 3.9 بود نمایشگر من 2.4
    متن ها خیلی بزرگ بود از صفحه نمایش میزد بیرون
    کدس برنامه
    کد:
    // original sketch from http://educ8s.tv/arduino-real-time-clock/
    // Nicu FLORICA (niq_ro) from http://www.arduinotehniq.com 
    // made some chenages for animate display with blinking signs
    // eliminate library for clock, use just subroutines
    // use 3 buttons for manual adjust the data & clock
    // add alarm (now usee eeprom memory for store hour alarm)
    
    
    //#include <Adafruit_ST7735.h>
    #include <Adafruit_GFX.h>
    #include <Wire.h>
    #include <SPI.h>
    #include "EEPROM.h"
    #include <Fonts/FreeSansBold24pt7b.h>
    #include <Fonts/FreeMonoBold18pt7b.h>
    #include <Fonts/FreeSans12pt7b.h>
    
    
    #include <MCUFRIEND_kbv.h>
    MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);
    
    
    //#define TFT_CS     9
    //#define TFT_RST    7                      
    //#define TFT_DC     8
    //Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
    
    
    // Option 2: use any pins but a little slower!
    //#define TFT_SCLK 13   // set these to be whatever pins you like!
    //#define TFT_MOSI 11   // set these to be whatever pins you like!
    
    
    float maxTemperature=0;
    float minTemperature=200;
    char charMinTemperature[10];
    char charMaxTemperature[10];
    char timeChar[100];
    char dateChar[50];
    char temperatureChar[10];
    
    
    float temperature = 0;
    float previousTemperature = 0;
    
    
    String dateString;
    int minuteNow=0;
    int minutePrevious=0;
    
    
    
    
    #define DS3231_I2C_ADDRESS 104
    byte tMSB, tLSB;
    float temp3231;
    float temperatura, temperatura0;
    byte hh, mm, ss;
    byte yy, ll, dd, zz;
    
    
    #define meniu A8 
    #define minus A9
    #define plus A10
    #define alarm 22
    #define buzzer 23
    
    
    #define  BLACK   0x0000
    #define BLUE    0x001F
    #define RED     0xF800
    #define GREEN   0x07E0
    #define CYAN    0x07FF
    #define MAGENTA 0xF81F
    #define YELLOW  0xFFE0  
    #define WHITE   0xFFFF
    #define ORANGE          0xFD20
    #define GREENYELLOW     0xAFE5
    #define DARKGREEN       0x03E0
    
    
    int nivel = 0;   // if is 0 - clock
                     // if is 1 - hour adjust
                     // if is 2 - minute adjust
    
    
    int hh1, mm1, zz1, dd1, ll1, yy1;   
    int maxday;
    boolean initial = 1;
    char chartemp[3];
    int hha, mma;   // for alarm
    byte al;     // for alarm 
    byte xa = 250;
    byte ya = 250;
    
    
    void setup () 
    {
       Serial.begin(9600);
    uint16_t g_identifier;  
     uint32_t when = millis();
        
        if (!Serial) delay(5000);           //allow some time for Leonardo
        Serial.println("Serial took " + String((millis() - when)) + "ms to start");
        static uint16_t identifier;
       
        g_identifier = tft.readID(); //
        Serial.print("ID = 0x");
        Serial.println(g_identifier, HEX);
        if (g_identifier == 0x00D3 || g_identifier == 0xD3D3) g_identifier = 0x9481; // write-only shield
        if (g_identifier == 0xFFFF) g_identifier = 0x9341; // serial
    
    
        tft.begin(g_identifier); 
      //tft.initR(INITR_BLACKTAB);
       tft.setRotation(1);
        tft.fillScreen(BLACK);
       
        Wire.begin();
    pinMode(meniu, INPUT); 
    pinMode(plus, INPUT); 
    pinMode(minus, INPUT); 
    pinMode(alarm, INPUT); 
    pinMode(buzzer, OUTPUT);
    digitalWrite(meniu, HIGH);  // put inputs in high state (when push is to ground -> low state)
    digitalWrite(plus, HIGH);
    digitalWrite(minus, HIGH);
    digitalWrite(alarm, HIGH);
    digitalWrite(buzzer, LOW);
        printText("Temperatura", GREEN,25,195,2);  // Temperature Static Text
       printText("Alarma setata", MAGENTA,235,195,2);
        printText("  Ceas cu alarma si termometru V1.2@2017", DARKGREEN,235,295,1);
        printText("cu Arduino Mega, DS3231 si 3,95", DARKGREEN,235,305,1);
        printText("MAX", RED,28,260,2);
        printText("MIN", BLUE,125,260,2);
    
    
    // setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year);
    //setDS3231time(0, 45, 13, 0, 25, 11, 2016;
    
    
    //  hha = 7;
    //  mma = 00;
    //  al = 1;  // 0 = alarm is off (must put in 1 foar active)
    
    
    hha = EEPROM.read(100);
    mma = EEPROM.read(101);
    al = EEPROM.read(102);
    
    
    if ((hha < 0) || (hha > 23)) hha = 7;
    if ((mma < 0) || (mma > 59)) mma = 0;
    if ((al < 0) || (al > 1)) al = 0;
    }
    
    
    
    
    void loop () 
    {
    
    
    if (nivel == 0)
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      hh1=hh;
      mm1=mm;
      zz1=zz;
      yy1=yy;
      ll1=ll;
      dd1=dd;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }
    
    
    
    
      float temperature = get3231Temp();
      readDS3231time(&ss, &mm, &hh, &zz, &dd, &ll,&yy);
    
    
        String halarma = "";
        if(hha<10)
        {
             halarma = halarma+" "+String(hha);
        }else  
        halarma = halarma+ String(hha);
        if(mma<10)
        {
            halarma = halarma+":0"+String(mma);
        }else
        {
            halarma = halarma+":"+String(mma);
        }
        halarma.toCharArray(timeChar,200);
    
    
    if (digitalRead(alarm) == LOW)
      {
      al = al + 1;
      EEPROM.write(102, al%2);
      delay(500);
      }
    if (mma == mm & hha == hh & al%2)
    {
    digitalWrite(buzzer, HIGH);
       tft.drawCircle(xa, ya, 5, RED); 
       tft.drawLine(xa, ya, xa, ya-5, RED);
       tft.drawLine(xa, ya, xa+4, ya+4, RED); tft.setFont(&FreeSans12pt7b);
       printText(timeChar, RED,xa+7,ya,2);tft.setFont();
    }
    else
    {
    if (al%2 == 0)
    {
        tft.drawCircle(xa, ya, 5, BLUE); 
        tft.drawLine(xa, ya, xa, ya-5, BLUE);
        tft.drawLine(xa, ya, xa+4, ya+4, BLUE); 
      digitalWrite(buzzer, LOW);tft.setFont(&FreeSans12pt7b);
        printText(timeChar, BLUE,xa+7,ya,2);tft.setFont();
    }
    if (al%2 == 1)
    {
        tft.drawCircle(xa, ya, 5, WHITE); 
        tft.drawLine(xa, ya, xa, ya-5, WHITE);
        tft.drawLine(xa, ya, xa+4, ya+4, WHITE); 
      digitalWrite(buzzer, LOW);tft.setFont(&FreeSans12pt7b);
        printText(timeChar, WHITE,xa+7,ya,2);tft.setFont();
    }
    }
     
      minuteNow = mm;
      if(minuteNow!=minutePrevious || initial)
      {
        initial = 0;
        dateString = getDayOfWeek(zz)+", ";
        dateString = dateString+String(dd)+"-"+month(ll);
        dateString= dateString+"-20"+ String(yy); 
        minutePrevious = minuteNow;
        String hours = "";
        if(hh<10)
        {
             hours = hours+"0"+String(hh);
        }else  
        hours = hours+ String(hh);
        if(mm<10)
        {
            hours = hours+" 0"+String(mm);
        }else
        {
            hours = hours+" "+String(mm);
        }
        
        hours.toCharArray(timeChar,100);
        tft.fillRect(0,0,480,185,BLACK);
      //  printText(timeChar, WHITE,20,25,3);lcd.setFreeFont(FSB24);
       tft.setFont(&FreeSansBold24pt7b);printText(timeChar, ORANGE,5,175,4);tft.setFont();
        dateString.toCharArray(dateChar,50);tft.setFont(&FreeMonoBold18pt7b);
        printText(dateChar, CYAN,8,25,1);tft.setFont();
      }
      
      if(temperature != previousTemperature)
      {
        previousTemperature = temperature;
        String temperatureString = String(temperature,1);
        temperatureString.toCharArray(temperatureChar,10);
        tft.fillRect(0,220,228,40,BLACK);
        printText(temperatureChar, WHITE,20,220,4);
        printText("o", WHITE,120,215,3);
        printText("C", WHITE,142,220,4);
    
    
        if(temperature>maxTemperature)
        {
          maxTemperature = temperature;
        }
          dtostrf(maxTemperature,5, 1, charMaxTemperature); 
          tft.fillRect(3,282,66,20,BLACK);
          printText(charMaxTemperature, WHITE,3,285,2);
          printText("o", WHITE,69,280,2);
          printText("C", WHITE,84,285,2);
        //}
        if(temperature<minTemperature)
        {
          minTemperature = temperature;
        }
          dtostrf(minTemperature,5, 1, charMinTemperature); 
          tft.fillRect(100,285,66,18,BLACK);
          printText(charMinTemperature, WHITE,100,285,2);
          printText("o", WHITE,165,280,2);
          printText("C", WHITE,180,285,2);
        //}
      }
    
    
    delay(500);
    //     printText("o", WHITE,62,28,1);
    //     printText("o", WHITE,62,35,1);
       //  printText("o", ORANGE,225,75,4);
         tft.fillCircle(240,75,10,ORANGE);
         tft.fillCircle(240,145,10,ORANGE);
       //  printText("o", ORANGE,225,105,4);
    
    
    delay(500);
        // printText("o", BLACK,225,75,4);
        // printText("o", BLACK,225,105,4);
        tft.fillCircle(240,75,9,BLACK);
         tft.fillCircle(240,145,9,BLACK);
    } // end usual case (clock)
    
    
    
    
    if (nivel == 1)   // change hours
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
       delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }    
    
    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    printText("HOUR:", GREEN,10,36,2);  // Temperature Static Text
    dtostrf(hh1,3, 0, chartemp); 
          //tft.fillRect(50,50,70,18,BLACK);
          tft.fillRect(50,50,70,38,BLACK);
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
          
    if (digitalRead(plus) == LOW)
        {
        hh1 = hh1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        hh1 = hh1-1;
        delay(150);
        }    
    if (hh1 > 23) hh1 = 0;
    if (hh1 < 0) hh1 = 23;       
         
    }  // end loop nivel = 1 (change the hours)
    
    
    if (nivel == 2)   // change minutes
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }    
    
    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(10,35,70,18,BLACK);
    printText("MINUTE:", GREEN,10,35,2);  // Temperature Static Text
    Serial.println(mm1);
    dtostrf(mm1,3, 0, chartemp); 
          tft.fillRect(50,50,70,18,BLACK);
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
         
    if (digitalRead(plus) == LOW)
        {
        mm1 = mm1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        mm1 = mm1-1;
        delay(150);
        }    
    if (mm1 > 59) mm1 = 0;
    if (mm1 < 0) mm1 = 59;       
         
    }  // end loop nivel = 2 (change the minutes)
    
    
    if (nivel == 3)   // change day in week
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }    
    
    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(0,35,128,18,BLACK);
    printText("Day in Week:", GREEN,10,40,1);  // Temperature Static Text
    //Serial.println(mm1);
    dtostrf(zz1,3, 0, chartemp); 
          tft.fillRect(50,50,70,18,BLACK);
          delay(50);
          printText(chartemp, WHITE,60,50,2);
    tft.fillRect(10,80,100,18,BLACK);      
    if (zz1 == 1) printText("1 - Luni", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 2) printText("2 - Marti", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 3) printText("3 - Miercuri", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 4) printText("4 - Joi", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 5) printText("5 - Vineri", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 6) printText("6 - Simbata", RED,10,80,1);  // Temperature Static Text
    if (zz1 == 0) printText("0 - Duminica", RED,10,80,1);  // Temperature Static Text  
        delay(50);
         
    if (digitalRead(plus) == LOW)
        {
        zz1 = zz1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        zz1 = zz1-1;
        delay(150);
        }    
    if (zz1 > 6) zz1 = 0;
    if (zz1 < 0) zz1 = 6;       
         
    }  // end loop nivel = 3 (change the day of the week)
    
    
    if (nivel == 4)   // change year
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      tft.fillRect(10,80,100,18,BLACK);    
      }    
    
    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(10,35,70,18,BLACK);
    printText("YEAR:", GREEN,10,35,2);  // Temperature Static Text
    dtostrf(yy1,3, 0, chartemp); 
          tft.fillRect(40,50,80,18,BLACK);
          tft.fillRect(10,80,100,18,BLACK);  // erase last explication...
          delay(50);
          printText("20", WHITE,45,50,2);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
    
    
         
    if (digitalRead(plus) == LOW)
        {
        yy1 = yy1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        yy1 = yy1-1;
        delay(150);
        }    
    if (yy1 > 49) yy1 = 49;
    if (yy1 < 16) yy1 = 16;       
         
    }  // end loop stare = 4 (change the year)
    
    
    
    
    if (nivel == 5)   // change mounth
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
       tft.fillRect(10,80,100,18,BLACK);    
      }    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(10,35,70,18,BLACK);
    printText("MONTH:", GREEN,10,35,2);  // Temperature Static Text
    dtostrf(ll1,3, 0, chartemp); 
          tft.fillRect(40,50,80,18,BLACK);
          tft.fillRect(10,80,100,18,BLACK);  // erase last explication...
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
         
    if (digitalRead(plus) == LOW)
        {
        ll1 = ll1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        ll1 = ll1-1;
        delay(150);
        }    
       
    if (ll1 > 12) ll1 = 1;
    if (ll1 < 1) ll1 = 12;       
         
    }  // end loop stare = 5 (change the day as data)
    
    
    if (nivel == 6)   // change day as data
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
     tft.fillRect(10,80,100,18,BLACK);      
      }    
    
    
    printText("SETTING", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(10,35,70,18,BLACK);
    printText("DAY:", GREEN,10,35,2);  // Temperature Static Text
    dtostrf(dd1,3, 0, chartemp); 
          tft.fillRect(50,50,70,18,BLACK);
          tft.fillRect(10,80,100,18,BLACK);  // erase last explication...
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
     
    if (digitalRead(plus) == LOW)
        {
        dd1 = dd1+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        dd1 = dd1-1;
        delay(150);
        }    
        
     // Dawn & Dusk controller. http://andydoz.blogspot.ro/2014_08_01_archive.html
     if (ll == 4 || ll == 5 || ll == 9 || ll == 11) { //30 days hath September, April June and November
        maxday = 30;
      }
      else {
      maxday = 31; //... all the others have 31
      }
      if (ll ==2 && yy % 4 ==0) { //... Except February alone, and that has 28 days clear, and 29 in a leap year.
        maxday = 29;
      }
      if (ll ==2 && ll % 4 !=0) {
        maxday = 28;
      }
    
    
    if (dd1 > maxday) dd1 = 1;
    if (dd1 < 1) dd1 = maxday;       
         
    }  // end loop nivel = 6 (change the day as data)
    
    
    if (nivel == 7)   // change hours alarm
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }    
    tft.fillRect(10,15,100,38,BLACK);
    printText("ALARM", GREEN,10,18,2);  // Temperature Static Text
    printText("HOUR:", GREEN,10,36,2);  // Temperature Static Text
    dtostrf(hha,3, 0, chartemp); 
          //tft.fillRect(50,50,70,18,BLACK);
          tft.fillRect(50,50,70,38,BLACK);
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
          
    if (digitalRead(plus) == LOW)
        {
        hha = hha+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        hha = hha-1;
        delay(150);
        }    
    if (hha > 23) hha = 0;
    if (hha < 0) hha = 23;       
         
    }  // end loop nivel = 7 (change the hours)
    
    
    if (nivel == 8)   // change minutes for alarm
    {
    if (digitalRead(meniu) == LOW)
      {
      nivel = nivel+1;
      delay(500);
      tft.fillScreen(BLACK);
      tft.fillRect(0,0,128,160,BLACK);
      }    
    tft.fillRect(10,15,70,18,BLACK);
    printText("ALARM", GREEN,10,18,2);  // Temperature Static Text
    tft.fillRect(10,35,70,18,BLACK);
    printText("MINUTE:", GREEN,10,35,2);  // Temperature Static Text
    Serial.println(mm1);
    dtostrf(mma,3, 0, chartemp); 
          tft.fillRect(50,50,70,18,BLACK);
          delay(50);
          printText(chartemp, WHITE,60,50,2);
          delay(50);
         
    if (digitalRead(plus) == LOW)
        {
        mma = mma+1;
        delay(150);
        }
    if (digitalRead(minus) == LOW)
        {
        mma = mma-1;
        delay(150);
        }    
    if (mma > 59) mma = 0;
    if (mma < 0) mma = 59;       
         
    }  // end loop nivel = 8 (change the minutes)
    
    
    
    
     if (nivel >=9)  // readfy to return to main loop
     {
      setDS3231time(0, mm1, hh1, zz1, dd1, ll1, yy1);
      EEPROM.write(100, hha);
      EEPROM.write(101, mma);
      EEPROM.write(102, al%2);
      
      nivel = 0;  
      previousTemperature= 0.0;
      initial = 1;
         printText("Temperatura", GREEN,25,195,2);  // Temperature Static Text
        printText("Alarma setata", MAGENTA,235,195,2);
         printText("  Ceas cu alarma si termometru V1.2@2017", DARKGREEN,235,295,1);
        printText("cu Arduino Mega, DS3231 si 3,95", DARKGREEN,235,305,1);
        printText("MAX", RED,28,260,2);
        printText("MIN", BLUE,125,260,2);
     }
    }  // end main loop
    
    
    
    
    void printText(char *text, uint16_t color, int x, int y,int textSize)
    {
      tft.setCursor(x, y);
      tft.setTextColor(color);
      tft.setTextSize(textSize);
      tft.setTextWrap(true);
      tft.print(text);
    }
    
    
    String getDayOfWeek(int i)
    {
      switch(i)
      {
        case 0: return "Duminica";break;
        case 1: return "Luni";break;
        case 2: return "Marti";break;
        case 3: return "Miercuri";break;
        case 4: return "Joi";break;
        case 5: return "Vineri";break;
        case 6: return "Simbata";break;
        default: return "Monday";break;
      }
    }
    
    
    float get3231Temp() // from http://www.goodliffe.org.uk/arduino/rtc_ds3231.php
    {
      //temp registers (11h-12h) get updated automatically every 64s
      Wire.beginTransmission(DS3231_I2C_ADDRESS);
      Wire.write(0x11);
      Wire.endTransmission();
      Wire.requestFrom(DS3231_I2C_ADDRESS, 2);
     
      if(Wire.available()) {
        tMSB = Wire.read(); //2's complement int portion
        tLSB = Wire.read(); //fraction portion
       
        temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
        temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
      }
      else {
        //oh noes, no data!
      }
       
      return temp3231;
    }
    
    
    // http://forum.arduino.cc/index.php?topic=398891.0
    void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
                       dayOfMonth, byte month, byte year)
    {
        // sets time and date data to DS3231
        Wire.beginTransmission(DS3231_I2C_ADDRESS);
        Wire.write(0); // set next input to start at the seconds register
        Wire.write(decToBcd(second)); // set seconds
        Wire.write(decToBcd(minute)); // set minutes
        Wire.write(decToBcd(hour)); // set hours
        Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
        Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
        Wire.write(decToBcd(month)); // set month
        Wire.write(decToBcd(year)); // set year (0 to 99)
        Wire.endTransmission();
    }
    
    
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
        return ( (val / 16 * 10) + (val % 16) );
    }
    
    
    // Convert normal decimal numbers to binary coded decimal
    byte decToBcd(byte val)
    {
        return ( (val / 10 * 16) + (val % 10) );
    }
    
    
    void readDS3231time(byte *second,
                        byte *minute,
                        byte *hour,
                        byte *dayOfWeek,
                        byte *dayOfMonth,
                        byte *month,
                        byte *year)
    {
        Wire.beginTransmission(DS3231_I2C_ADDRESS);
        Wire.write(0); // set DS3231 register pointer to 00h
        Wire.endTransmission();
        Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
        // request seven bytes of data from DS3231 starting from register 00h
        *second = bcdToDec(Wire.read() & 0x7f);
        *minute = bcdToDec(Wire.read());
        *hour = bcdToDec(Wire.read() & 0x3f);
        *dayOfWeek = bcdToDec(Wire.read());
        *dayOfMonth = bcdToDec(Wire.read());
        *month = bcdToDec(Wire.read());
        *year = bcdToDec(Wire.read());
    }
    String month(int i)
    {
      switch(i)
      {
        case 1: return "IAN";break;
        case 2: return "FEB";break;
        case 3: return "MAR";break;
        case 4: return "APR";break;
        case 5: return "MAI";break;
        case 6: return "IUN";break;
        case 7: return "IUL";break;
        case 8: return "AUG";break;
        case 9: return "SEP";break;
        case 10: return "OCT";break;
        case 11: return "NOV";break;
        case 12: return "DEC";break;
        default: return "****";break;
      }
    }

    یا برنامه ای دیگه ای رو پیدا کردم مربوط نمایشگر 1.8 بود متن ها خیلی کوچیکه

    کد:
    #include  <Adafruit_ST7735.h>
    #include  <Adafruit_GFX.h>
    #include <Wire.h>
    #include "Sodaq_DS3231.h"
    #include  <SPI.h>
    #define  BLACK   0x0000
    #define BLUE    0x001F
    #define RED     0xF800
    #define GREEN   0x07E0
    #define CYAN    0x07FF
    #define MAGENTA 0xF81F
    #define YELLOW  0xFFE0  
    #define WHITE   0xFFFF
    #define ORANGE          0xFD20
    #define GREENYELLOW     0xAFE5
    #define DARKGREEN       0x03E0
    
    
    #include <MCUFRIEND_kbv.h>
    MCUFRIEND_kbv tft(A3, A2, A1, A0, A4);
    
    
    // Option 2: use any pins but a little slower!
    #define TFT_SCLK 13   // set these to be whatever pins you like!
    #define TFT_MOSI 11   // set these to be whatever pins you like!
    
    
    float maxTemperature=0;
    float minTemperature=200;
    char charMinTemperature[10];
    char charMaxTemperature[10];
    char timeChar[100];
    char dateChar[50];
    char temperatureChar[10];
    
    
    float temperature = 0;
    float previousTemperature = 0;
    
    
    String dateString;
    int minuteNow=0;
    int minutePrevious=0;
    
    
    void setup () 
    {
    Serial.begin(9600);
    uint16_t g_identifier;  
     uint32_t when = millis();
        
        if (!Serial) delay(5000);           //allow some time for Leonardo
        Serial.println("Serial took " + String((millis() - when)) + "ms to start");
        static uint16_t identifier;
       
        g_identifier = tft.readID(); //
        Serial.print("ID = 0x");
        Serial.println(g_identifier, HEX);
        if (g_identifier == 0x00D3 || g_identifier == 0xD3D3) g_identifier = 0x9481; // write-only shield
        if (g_identifier == 0xFFFF) g_identifier = 0x9341; // serial
    
    
        tft.begin(g_identifier); 
      //tft.initR(INITR_BLACKTAB);
       tft.setRotation(1);
        tft.fillScreen(BLACK);
            Wire.begin();
            
    }
    
    
    uint32_t old_ts;
    
    
    void loop () 
    {
      float temperature = rtc.getTemperature();
      DateTime now = rtc.now(); //get the current date-time
      uint32_t ts = now.getEpoch();
    
    
        if (old_ts == 0 || old_ts != ts) {
      old_ts = ts;
      
      minuteNow = now.minute();
      if(minuteNow!=minutePrevious)
      {
        dateString = getDayOfWeek(now.dayOfWeek())+", ";
        dateString = dateString+String(now.date())+"/"+String(now.month());
        dateString= dateString+"/"+ String(now.year()); 
        minutePrevious = minuteNow;
        String hours = String(now.hour());
        if(now.minute()<10)
        {
          hours = hours+":0"+String(now.minute());
        }else
        {
          hours = hours+":"+String(now.minute());
        }
        
        hours.toCharArray(timeChar,100);
        tft.fillRect(10,0,160,65,ST7735_BLACK);
        printText(timeChar, ST7735_WHITE,20,25,3);
        dateString.toCharArray(dateChar,50);
        printText(dateChar, ST7735_GREEN,8,5,1);
      }
      
      if(temperature != previousTemperature)
      {
        previousTemperature = temperature;
        String temperatureString = String(temperature,1);
        temperatureString.toCharArray(temperatureChar,10);
        tft.fillRect(10,80,128,30,ST7735_BLACK);
        printText(temperatureChar, ST7735_WHITE,10,80,3);
        printText("o", ST7735_WHITE,90,75,2);
        printText("C", ST7735_WHITE,105,80,3);
    
    
    if(temperature>maxTemperature)
        {
          maxTemperature = temperature;
          dtostrf(maxTemperature,5, 1, charMaxTemperature); 
          tft.fillRect(3,142,33,20,ST7735_BLACK);
          printText(charMaxTemperature, ST7735_WHITE,3,145,1);
          printText("o", ST7735_WHITE,35,140,1);
          printText("C", ST7735_WHITE,41,145,1);
        }
    if(temperature  < minTemperature )
    
    
     {
          minTemperature = temperature;
          dtostrf(minTemperature,5, 1, charMinTemperature); 
          tft.fillRect(75,140,36,18,ST7735_BLACK);
          printText(charMinTemperature, ST7735_WHITE,80,145,1);
          printText("o", ST7735_WHITE,112,140,1);
          printText("C", ST7735_WHITE,118,145,1);
        }
      }
    }
        delay(1000);
    }
    
    
    
    
    void setRTCTime()
    {
      DateTime dt(2015, 8, 27, 9, 35, 30, 4); // Year, Month, Day, Hour, Minutes, Seconds, Day of Week
      rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above 
    }void printText(char *text, uint16_t color, int x, int y,int textSize)
    {
      tft.setCursor(x, y);
      tft.setTextColor(color);
      tft.setTextSize(textSize);
      tft.setTextWrap(true);
      tft.print(text);
    }
    
    
    String getDayOfWeek(int i)
    {
      switch(i)
      {
        case 1: return "Monday";break;
        case 2: return "Tuesday";break;
        case 3: return "Wednesday";break;
        case 4: return "Thursday";break;
        case 5: return "Friday";break;
        case 6: return "Saturday";break;
        case 7: return "Sunday";break;
        default: return "Monday";break;
      }
    }


    اردوینو من mega 2560 ماژول ساعت ds3231 ماژول دما رطوبت dht22 هست
    ایا راهی داره دستکاری کنیم کد های با سایز صفحه مورد نظر مچ بشه
    دوستان نظری داه ممنون میشم راهنماییم کنید
لطفا صبر کنید...
X