ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2018/06/03
    27
    5

    مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    سلام دوستان
    من از کتابخانه DateConvLight استفاده کرد برای تبدیل تاریخ میلادی به شمسی
    لینکش :

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    طبق عکس


    اگه دقت کنید کلمات رو نا مفهوم نمایش میده
    کد:
    /*
     * this example show the simplest way to converting a
     * GREGORIAN Date in format of YYYY/M/D (ex.2010/2/20)
     * to its SHAMSI equivalent. check library root folder for more
     * informations.
     */
    
    
    #include "DateConvL.h"
    uint16_t current_year, current_month, current_day;
    DateConvL dateC;
    
    
    void setup() {
      Serial.begin(9600);
      SetCurrentDate();
      dateC.ToShamsi(current_year,current_month,current_day); // converts global values of date and stores them to dateC
      Serial.print(dateC.global_year, DEC);
      Serial.print('/');
      Serial.print(dateC.global_month, DEC);
      Serial.print('/');
      Serial.print(dateC.global_day, DEC);
      Serial.println();
    }
    
    
    void loop() {}
    
    
    
    
    /*
     * this function get current time and set date integers declared above
     * IT IS NOT A PART OF LIBRARY but used to display current shamsi date
     * come from : https://gist.github.com/djohnson001/6df673a8d7f8ac04246a
     */
    String SetCurrentDate()
    {
      char const *date = __DATE__;
      char s_month[5];
      int _month, _day, _year;
      static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
      sscanf(date, "%s %d %d", s_month, &current_day, &current_year);
      current_month = ((strstr(month_names, s_month)-month_names)/3) + 1;
    }
    ولی این در در قسمت seriall monitor مشکلی نداره درست نمایش داده میشه
    ممنون میشم راهنماییم کنید
    ویرایش توسط systam : 2018/11/09 در ساعت 22:38
  2. #2
    2018/02/22
    1,096
    689

    پاسخ : مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    درود ، مثال خود کتابخونه که کار می*کنه قرار دادید ، برنامه ای که مشکل داره رو باید قرار بدید !!
  3. #3
    2018/06/03
    27
    5

    پاسخ : مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    سلام استاد عاشوری
    مثال خود کتابخانه
    کد:
    /*
     * this example show the simplest way to converting a
     * GREGORIAN Date in format of YYYY/M/D (ex.2010/2/20)
     * to its SHAMSI equivalent. check library root folder for more
     * informations.
     */
    
    
    #include "DateConvL.h"
    uint16_t current_year, current_month, current_day;
    DateConvL dateC;
    
    
    void setup() {
      Serial.begin(9600);
      SetCurrentDate();
      dateC.ToShamsi(current_year,current_month,current_day); // converts global values of date and stores them to dateC
      Serial.print(dateC.global_year, DEC);
      Serial.print('/');
      Serial.print(dateC.global_month, DEC);
      Serial.print('/');
      Serial.print(dateC.global_day, DEC);
      Serial.println();
    }
    
    
    void loop() {}
    
    
    
    
    /*
     * this function get current time and set date integers declared above
     * IT IS NOT A PART OF LIBRARY but used to display current shamsi date
     * come from : https://gist.github.com/djohnson001/6df673a8d7f8ac04246a
     */
    String SetCurrentDate()
    {
      char const *date = __DATE__;
      char s_month[5];
      int _month, _day, _year;
      static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
      sscanf(date, "%s %d %d", s_month, &current_day, &current_year);
      current_month = ((strstr(month_names, s_month)-month_names)/3) + 1;
    }

    اینم عکس خروجی

    من برنامه ای که دارم استفاده میکنم
    کد اینه
    کد:
    // Arduino real time clock and temperature monitor with DS3231 and SSD1306 OLED
    #include "DHT.h"
    #include "DateConvL.h"
    uint16_t current_year, current_month, current_day;
    DateConvL dateC;
    #define I_DHT22 19
    #define DHTTYPE DHT22
    //Object declaration
    #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>
    #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);
    DHT dht(I_DHT22, DHTTYPE);
    #define button1    9                       // Button B1 is connected to Arduino pin 9
    #define button2    8                       // Button B2 is connected to Arduino pin 8
    
    
    void setup(void) {
      tft.reset();
      Serial.begin(9600);
    
    
    
    
        pinMode(button1, INPUT_PULLUP);
        pinMode(button2, INPUT_PULLUP);
        
        uint16_t g_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.setRotation(1);
        tft.fillScreen(BLACK);
        Wire.begin();
        dht.begin();
        delay(1000);
     
      tft.drawRoundRect(7, 7, 305, 220, 10, ORANGE); 
      tft.setTextColor(WHITE, BLACK);
      tft.drawRect(117, 56, 3, 3, WHITE);     // Put degree symbol ( ° )
    }
    
    
    char Time[]     = "  :  :  ";
    char Calendar[] = "  /  /20  ";
    char temperature[] = " 00.00";
    char temperature_msb;
    byte i, second, minute, hour, day, date, month, year, temperature_lsb;
    
    
    void tft_day(){
      switch(day){
        case 1:  draw_text(70, 20, " SUNDAY  ", 4); break;
        case 2:  draw_text(70, 0, " MONDAY  ", 4); break;
        case 3:  draw_text(70, 0, " TUESDAY ", 4); break;
        case 4:  draw_text(70, 0, "WEDNESDAY", 4); break;
        case 5:  draw_text(70, 0, "THURSDAY ", 4); break;
        case 6:  draw_text(70, 0, " FRIDAY  ", 4); break;
        default: draw_text(70, 0, "SATURDAY ", 4);
      }
    }
    
    
    void DS3231_tft(){
      // Convert BCD to decimal
      second = (second >> 4) * 10 + (second & 0x0F);
      minute = (minute >> 4) * 10 + (minute & 0x0F);
      hour   = (hour >> 4)   * 10 + (hour & 0x0F);
      date   = (date >> 4)   * 10 + (date & 0x0F);
      month  = (month >> 4)  * 10 + (month & 0x0F);
      year   = (year >> 4)   * 10 + (year & 0x0F);
      // End conversion
    
    
      Time[7]     = second % 10 + 48;
      Time[6]     = second / 10 + 48;
      Time[4]     = minute % 10 + 48;
      Time[3]     = minute / 10 + 48;
      Time[1]     = hour   % 10 + 48;
      Time[0]     = hour   / 10 + 48;
      Calendar[9] = year   % 10 + 48;
      Calendar[8] = year   / 10 + 48;
      Calendar[4] = month  % 10 + 48;
      Calendar[3] = month  / 10 + 48;
      Calendar[1] = date   % 10 + 48;
      Calendar[0] = date   / 10 + 48;
      if(temperature_msb < 0){
        temperature_msb = abs(temperature_msb);
        temperature[0] = '-';
      }
      else
        temperature[0] = ' ';
      temperature_lsb >>= 6;
      temperature[2] = temperature_msb % 10  + 48;
      temperature[1] = temperature_msb / 10  + 48;
      if(temperature_lsb == 0 || temperature_lsb == 2){
        temperature[5] = '0';
        if(temperature_lsb == 0) temperature[4] = '0';
        else                     temperature[4] = '5';
      }
      if(temperature_lsb == 1 || temperature_lsb == 3){
        temperature[5] = '5';
        if(temperature_lsb == 1) temperature[4] = '2';
        else                     temperature[4] = '7';
      }
    //  Temperature (Celcius)
      SetCurrentDate();
      dateC.ToShamsi(current_year,current_month,current_day); // converts global values of date and stores them to dateC
      char thisString [5] = {dateC.global_year, '/', dateC.global_month, '/', dateC.global_day };
    
    
      draw_text(45,  60, thisString , 4);                     // tft the date (format: dd/mm/yyyy)
      draw_text(70, 100, Time, 4);                         // tft the time   
      draw_text(35, 175, "TEMPERATURE =", 2);
      draw_text(185, 175, temperature , 2);
      draw_text(255, 175, "C", 2);// tft the temperature
    }
    
    
    void blink_parameter(){
      byte j = 0;
      while(j < 10 && digitalRead(button1) && digitalRead(button2)){
        j++;
        delay(25);
      }
    }
    
    
    byte edit(byte x_pos, byte y_pos, byte parameter){
      char text[3];
      sprintf(text,"%02u", parameter);
      while(!digitalRead(button1));                      // Wait until button B1 released
      while(true){
        while(!digitalRead(button2)){                    // If button B2 is pressed
          parameter++;
          if(i == 0 && parameter > 31)                   // If date > 31 ==> date = 1
            parameter = 1;
          if(i == 1 && parameter > 12)                   // If month > 12 ==> month = 1
            parameter = 1;
          if(i == 2 && parameter > 99)                   // If year > 99 ==> year = 0
            parameter = 0;
          if(i == 3 && parameter > 23)                   // If hours > 23 ==> hours = 0
            parameter = 0;
          if(i == 4 && parameter > 59)                   // If minutes > 59 ==> minutes = 0
            parameter = 0;
          sprintf(text,"%02u", parameter);
          draw_text(x_pos, y_pos, text, 2);
          delay(200);                                    // Wait 200ms
        }
        draw_text(x_pos, y_pos, "  ", 2);
        blink_parameter();
        draw_text(x_pos, y_pos, text, 2);
        blink_parameter();
        if(!digitalRead(button1)){                       // If button B1 is pressed
          i++;                                           // Increament 'i' for the next parameter
          return parameter;                              // Return parameter value and exit
        }
      }
    }
    void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
      tft.setCursor(x_pos, y_pos);
      tft.setTextSize(text_size);
      tft.print(text);
    
    
    }
    String SetCurrentDate()
    {
      char const *date = __DATE__;
      char s_month[5];
      int _month, _day, _year;
      static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
      sscanf(date, "%s %d %d", s_month, &current_day, &current_year);
      current_month = ((strstr(month_names, s_month)-month_names)/3) + 1;
    }
    void loop() {
    
    
      if(!digitalRead(button1)){                         // If button B1 is pressed
        i = 0;
        while(!digitalRead(button1));                    // Wait for button B1 release
        while(true){
          while(!digitalRead(button2)){                  // While button B2 pressed
            day++;                                       // Increment day
            if(day > 7) day = 1;
            tft_day();                               // Call tft_day function
            delay(200);                                  // Wait 200 ms
          }
          draw_text(40, 0, "         ", 1);
          blink_parameter();                             // Call blink_parameter function
          tft_day();                                 // Call tft_day function
          blink_parameter();                             // Call blink_parameter function
          if(!digitalRead(button1))                      // If button B1 is pressed
            break;
        }
    
    
        date   = edit(4, 14, date);                      // Edit date
        month  = edit(40, 14, month);                    // Edit month
        year   = edit(100, 14, year);                    // Edit year
        hour   = edit(16, 35, hour);                     // Edit hours
        minute = edit(52, 35, minute);                   // Edit minutes
    
    
        // Convert decimal to BCD
        minute = ((minute / 10) << 4) + (minute % 10);
        hour = ((hour / 10) << 4) + (hour % 10);
        date = ((date / 10) << 4) + (date % 10);
        month = ((month / 10) << 4) + (month % 10);
        year = ((year / 10) << 4) + (year % 10);
        // End conversion
    
    
        // Write data to DS3231 RTC
        Wire.beginTransmission(0x68);               // Start I2C protocol with DS3231 address
        Wire.write(0);                              // Send register address
        Wire.write(0);                              // Reset sesonds and start oscillator
        Wire.write(minute);                         // Write minute
        Wire.write(hour);                           // Write hour
        Wire.write(day);                            // Write day
        Wire.write(date);                           // Write date
        Wire.write(month);                          // Write month
        Wire.write(year);                           // Write year
        Wire.endTransmission();                     // Stop transmission and release the I2C bus
        delay(200);                                 // Wait 200ms
      }
    
    
      Wire.beginTransmission(0x68);                 // Start I2C protocol with DS3231 address
      Wire.write(0);                                // Send register address
      Wire.endTransmission(false);                  // I2C restart
      Wire.requestFrom(0x68, 7);                    // Request 7 bytes from DS3231 and release I2C bus at end of reading
      second = Wire.read();                         // Read seconds from register 0
      minute = Wire.read();                         // Read minuts from register 1
      hour   = Wire.read();                         // Read hour from register 2
      day    = Wire.read();                         // Read day from register 3
      date   = Wire.read();                         // Read date from register 4
      month  = Wire.read();                         // Read month from register 5
      year   = Wire.read();                         // Read year from register 6
      Wire.beginTransmission(0x68);                 // Start I2C protocol with DS3231 address
      Wire.write(0x11);                             // Send register address
      Wire.endTransmission(false);                  // I2C restart
      Wire.requestFrom(0x68, 2);                    // Request 2 bytes from DS3231 and release I2C bus at end of reading
      temperature_msb = Wire.read();                // Read temperature MSB
      temperature_lsb = Wire.read();                // Read temperature LSB
    
    
      tft_day();
      DS3231_tft();                             // Diaplay time & calendar
    
    
      delay(50);   
       // Wait 50ms 
    }
    // End of code.
    خروجیش هم اینه
  4. #4
    2018/06/03
    27
    5

    پاسخ : مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    سلام
    فکر کنم به جز استاد عاشوری کسی دیگه نیست کلا دوستان رو راهمایی کنم تمام سوالات رو دوش این بزرگوار هست بگذریم
    من زمینه تخصصم برنامه نویسی ویدوز ویژال دات نت هست
    با اطلاعات اندکی که دارم تونستم تاریخ شمسی رو در نمایشگر 2.4 tft نمایش بدم گفتم بزارم توی انجمن تا دوستان تازه واردی مثل من بتونند استفاده کنند
    ولی من هدفم این بود اعداد رو هم فارسی نمایش داده بشه
    بازهم دنبالش هستم به نتیجه ای رسید میزارم توی پست

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    و اینم عکس خروجی روی نمایشگر
  5. #5
    2018/02/22
    1,096
    689

    پاسخ : مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    درود ، خدا قوت که پیگیر هستید ، موضوع اینه هر دو برنامه شما بسیار طولانی و بررسی اون زمان بر هست ، مخصوصا اون فارسی نویسی . مشکل این تاپیک حدس من اینه که در تبدیل متغیر ها جایی مشکلی هست که داره کاراکتر معادل کد اسکی اون عدد رو بجای خود عدد نشون میده . یعنی در هنگام تبدیل اعداد این مشکل وجود داره که باید بررسی بشه . متغیر ها رو در حین برنامه چندین بار روی lcd چاپ کنید ببینید کجا این بهم ریختگی رخ میده . اینطوری میشه سریع تر پیدا کرد

    ویرایش: شما فقط به شمسی بودن تاریخ اشاره کردید ، حرفی از فارسی بودن اعداد نبود !

    ویرایش !!! : مشکل برنامه چی بود که تعداد کاراکتر نشون میداد ؟ برای فارسی نویسی اگه برنامه اون تاپیک رو نگاه کنید جایی از ابتدای کد ها اومده تمام اشکال حروف و اعداد رو کاستوم تعریف کرده . استفاده از اون کاراکتر ها در انتهای برنامه هنگام چاپ lcd مشخصه که فکر کنم با حلقه for بود برای هر عبارت تک تک کاراکتر رو می*نویسه . اما چون برای شما همه اعداد متغیر هستند فکر میکنم با سوییچ کیس بشه پرینت فارسی رو عملی کنید . ابتدا باید اعداد رو تک رقمی کنید سپس چاپ کنید . اگر تابع جدا بنویسید برنامه انسجام خودش رو از دست نده
    ویرایش توسط Masood Ashoori : 2018/11/11 در ساعت 23:40
  6. #6
    2018/06/03
    27
    5

    پاسخ : مشکل با نمایش تاریخ شمسی در نمایشگر tft 2.4

    سلام استاد
    ممنونم از راهنمایی هاتون
    درسته شاید من تیتر پست رو درست بیان نکردک
    من تاریخ شمسی میخوام نمایش بده با اعداد فارسی ؟
نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. تبدیل تاریخ میلادی به شمسی و نمایش روزهای هفته
    توسط Questioner در انجمن میکروکنترلرهای AVR
    پاسخ: 7
    آخرين نوشته: 2014/09/24, 09:46
  2. مشکل در نمایش همزمان تاریخ های شمسی،میلادی،قمری
    توسط ahmad6870 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2014/04/18, 22:31
  3. پاسخ: 1
    آخرين نوشته: 2010/12/10, 13:53
  4. نمایش تاریخ شمسی به همراه ساعت در ال سی دی های گرافیکی
    توسط pani_rezaii در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2009/05/22, 17:16
  5. نرم افزار تابلو روان + ساعت + تاریخ شمسی + تاریخ میلادی
    توسط hamid-pardazan در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2008/09/17, 16:10

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •