اطلاعیه

Collapse
No announcement yet.

راهنمایی درباره برنامه نویسی ، دکمه تنظیم ساعت و تاریخ در نمایشگر های 128*64(اردوینو)

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

    راهنمایی درباره برنامه نویسی ، دکمه تنظیم ساعت و تاریخ در نمایشگر های 128*64(اردوینو)

    سلام بر دوستان
    من یک برنامه از توی نت پیدا کردم که میاد ساعت تاریخ و دما میحط رو در نمایشگر نمایش میده
    عکس :
    متاسفانه این برنامه با این که خیلی عالی هست ولی مشکلاتی داره
    1 - دکمه تنظیمات ساعت تاریخ نداره
    2 - ساعت قابلیت کوک شدت برای الارم رو نداره
    میخواستم ببینم دوستان کسی هست در این زمینه بتونه کمک کنه
    ممنون میشم

    اصلا یادم رفت کد های استفاده شد رو بزارم ممنون دوست عزیز


    #include <U8glib.h>
    #include <DS3232RTC.h>
    #include <Streaming.h>
    #include <Time.h>
    #include <Wire.h>
    #include "DateConvL.h"
    uint16_t current_year, current_month, current_day;
    DateConvL dateC;
    //A linha abaixo define as conexoes do display e deve ser
    //ajustada conforme o modelo utilizado
    U8GLIB_KS0108_128 u8g(22, 23, 24, 25, 26, 27, 28, 29, 37, 33, 34, 36, 35); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16


    int X2 = 0;
    int Y2 = 0;
    int X3 = 0;
    int Y3 = 0;
    float angulo = 0;
    int posicao = 0;
    int posicaoh = 0;
    int temperatura =0;
    int min_temp = 500;
    int max_temp = -500;


    int ScreenWith = 128;
    int ScreenWithC = 96;
    int ScreenHeight = 64;
    int ScreenHeightC = 32;
    [URL=https://www.eca.ir/forums/usertag.php?do=list&action=hash&hash=define]#define[/URL] botao 3


    int estado_botao = 0;
    int btn_afzayesh=0;
    int btn_kahesh=0;


    char* dia_da_semana[]={
    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};


    void tela_1()
    {
    u8g.drawRFrame(0, 0, 128, 64, 3);
    //Mostra temperatura
    u8g.setPrintPos(20, 27);
    u8g.print(temperatura);
    u8g.drawStr( 42, 27, "C");
    u8g.drawCircle(37, 31, 2);
    mostra_relogio_digital();
    //Mostra relogio analogico
    fundo_relogio();
    //Atualiza Ponteiro de horas
    desenha_ponteiro(hour()-1, 12.0, 10);
    //Atualiza Ponteiro de minutos
    desenha_ponteiro(minute()-5, 60.0, 19);
    //Atualiza Ponteiro de segundos
    desenha_ponteiro(second()-5, 60, 21);
    }


    void tela_2()
    {
    u8g.drawRFrame(0, 0, 128, 64, 3);
    u8g.drawRFrame(68, 4, 55, 56, 2);
    mostra_relogio_digital();
    u8g.setFont(u8g_font_5x8);
    u8g.drawStr( 78, 35, "MIN");
    u8g.drawStr( 78, 53, "MAX");
    u8g.setFont(u8g_font_6x13);
    u8g.setPrintPos(25, 37);
    u8g.print(dia_da_semana[(weekday()-1)]);
    //Mostra temperatura atual
    u8g.setPrintPos(83, 19);
    u8g.print(temperatura);
    u8g.drawStr( 105, 19, "C");
    u8g.drawCircle(100, 12, 2);
    //Mostra temperatura minima
    u8g.setPrintPos(98, 36);
    u8g.print(min_temp);
    u8g.drawCircle(113, 29, 2);
    //Mostra temperatura maxima
    u8g.setPrintPos(98, 54);
    u8g.print(max_temp);
    u8g.drawCircle(113, 47, 2);
    }


    void desenha_ponteiro(float valor, float rotacao, int Radius)
    {
    angulo = valor * 2.0 * 3.1415 / rotacao - 1,5707;
    X2 = ScreenWithC + Radius * cos(angulo);
    Y2 = ScreenHeightC + Radius * sin(angulo);
    u8g.drawLine(ScreenWithC, ScreenHeightC, X2, Y2);
    }


    void fundo_relogio()
    {
    u8g.drawCircle(ScreenWithC, ScreenHeightC, 27);
    u8g.drawCircle(ScreenWithC, ScreenHeightC, 1);
    u8g.setFont(u8g_font_6x13);
    u8g.setFontPosTop();
    u8g.drawStr(90, 9, "12");
    u8g.drawStr(114, 25, "3");
    u8g.drawStr(94, 44, "6");
    u8g.drawStr(74, 25, "9");


    for(int traco_minuto = 0; traco_minuto<12; traco_minuto++)
    {
    //Desenha linhas relogio analogico
    angulo = traco_minuto / 12.0 * 2 * 3.1415;
    X2 = ScreenWithC + 25 * cos(angulo);
    Y2 = ScreenHeightC + 25 * sin(angulo);
    X3 = ScreenWithC + 25 * cos(angulo);
    Y3 = ScreenHeightC + 25 * sin(angulo);
    u8g.drawLine(X2, Y2, X3, Y3);
    }
    }


    void mostra_relogio_digital()
    {
    //Mostra a data
    u8g.setFont(u8g_font_5x8);
    u8g.setPrintPos(8, 48);
    u8g.print(dateC.global_year, DEC);
    u8g.drawStr( 29, 48, "/");
    u8g.setPrintPos(35, 48);
    u8g.print(dateC.global_month, DEC);
    u8g.drawStr( 48, 48, "/");
    u8g.setPrintPos(55, 48);
    u8g.print(dateC.global_day, DEC);
    ////////////////////////////////////////////////////////////
    u8g.setPrintPos(8, 58);
    u8g.print(year());
    u8g.drawStr( 29, 58, "/");
    u8g.setPrintPos(35, 58);
    u8g.print(month());
    u8g.drawStr( 48, 58, "/");
    u8g.setPrintPos(55, 58);
    u8g.print(day());
    ////////////////////////////////////////////////////////////
    //Mostra hora e minutos
    u8g.drawRBox(3, 4, 62, 21,2);
    u8g.setColorIndex(0);
    u8g.setFont(u8g_font_fub17);
    u8g.drawStr(29,21,":");
    //Acerta a posicao do digito caso a hora
    //seja menor do que 10
    if (hour() < 10)
    {
    u8g.drawStr(3,23,"0");
    posicaoh = 16;
    }
    else posicaoh = 3;
    u8g.setPrintPos(posicaoh, 23);
    u8g.print(hour());
    //Acerta a posicao do digito caso o minuto
    //seja menor do que 10
    if (minute() < 10)
    {
    u8g.drawStr(38,23,"0");
    posicao = 51;
    }
    else posicao = 38;
    u8g.setPrintPos(posicao ,23);
    u8g.print(minute());
    u8g.setColorIndex(1);
    }


    void setup()
    {
    pinMode(3, INPUT_PULLUP);
    SetCurrentDate();
    Serial.begin(9600);
    if ( u8g.getMode() == U8G_MODE_R3G3B2 )
    u8g.setColorIndex(255); // white
    else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
    u8g.setColorIndex(3); // max intensity
    else if ( u8g.getMode() == U8G_MODE_BW )
    u8g.setColorIndex(1); // pixel on
    setSyncProvider(RTC.get);
    Serial << F("RTC Sync");
    if (timeStatus() != timeSet) Serial << F(" FAIL!");
    Serial << endl;
    }


    void loop()
    {
    dateC.ToShamsi(current_year,current_month,current_day);
    temperatura = RTC.temperature() / 4.;
    if (temperatura >= max_temp)
    {
    max_temp = temperatura;
    }
    if (temperatura <= min_temp)
    {
    min_temp = temperatura;
    }
    static time_t tLast;
    time_t t;
    tmElements_t tm;


    //Verifica se foi setado um novo horario
    //Formato: ano, mes, dia, hora, minuto, segundo
    if (Serial.available() >= 12) {
    int y = Serial.parseInt();
    if (y >= 100 && y < 1000)
    Serial<<F("Erro: Ano deve ter dois ou quatro digitos!") <<endl;
    else {
    if (y >= 1000)
    tm.Year = CalendarYrToTm(y);
    else //(y < 100)
    tm.Year = y2kYearToTm(y);
    tm.Month = Serial.parseInt();
    tm.Day = Serial.parseInt();
    tm.Hour = Serial.parseInt();
    tm.Minute = Serial.parseInt();
    tm.Second = Serial.parseInt();
    t = makeTime(tm);
    RTC.set(t);
    setTime(t);
    Serial << F("Horario modificado para: ");
    printDateTime(t);
    Serial << endl;
    while (Serial.available() > 0) Serial.read();
    }
    }
    t = now();
    if (t != tLast) {
    tLast = t;
    printDateTime(t);
    Serial << endl;
    }


    //Verifica se o botao foi pressionado
    boolean valor_botao = digitalRead(3);
    if (valor_botao != 1)
    {
    while(digitalRead(3) != 1)
    {
    delay(100);
    }
    // Inverte o estado
    estado_botao = !estado_botao;
    }
    ////////////////////////////////////////////////////////////////////////////////////
    u8g.firstPage();


    ////////////////////////////////////////////////////////////////////////////////////
    //picture loop
    u8g.firstPage();
    do {
    if (estado_botao == 0)
    {
    tela_1();
    }
    if (estado_botao == 1)
    {
    tela_2();
    }
    }
    while( u8g.nextPage() );
    delay(10);
    }


    //Mostra data e hora na serial
    void printDateTime(time_t t)
    {
    printI00(day(t), 0);
    Serial << monthShortStr(month(t)) << _DEC(year(t));
    Serial << ' ';
    printI00(hour(t), ':');
    printI00(minute(t), ':');
    printI00(second(t), ' ');
    }


    //Correcao para imprimir "00" ao inves de "0" caso
    //o valor seja menor do que 10
    void printI00(int val, char delim)
    {
    if (val < 10) Serial << '0';
    Serial << _DEC(val);
    if (delim > 0) Serial << delim;
    return;
    }
    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;
    }




    دانلود فایل ino
    جدیدترین ویرایش توسط systam; ۲۳:۰۱ ۱۳۹۸/۱۱/۲۲.

    #2
    پاسخ : راهنمایی درباره برنامه نویسی ، دکمه تنظیم ساعت و تاریخ در نمایشگر های 128*64(اردوینو)

    نوشته اصلی توسط systam نمایش پست ها
    سلام بر دوستان
    من یک برنامه از توی نت پیدا کردم که میاد ساعت تاریخ و دما میحط رو در نمایشگر نمایش میده
    عکس :
    متاسفانه این برنامه با این که خیلی عالی هست ولی مشکلاتی داره
    1 - دکمه تنظیمات ساعت تاریخ نداره
    2 - ساعت قابلیت کوک شدت برای الارم رو نداره
    میخواستم ببینم دوستان کسی هست در این زمینه بتونه کمک کنه
    ممنون میشم
    سلام خوب شما باید برنامه رو قرار بدید که دوستان اگه تونستن
    کمک کنند و تکمیلش کنند
    قصه زندگی همیشه با مدادی که ما دوست داریم نوشته نمی شه .....

    دیدگاه

    لطفا صبر کنید...
    X