Время на с часов реального времени

Тема в разделе "Arduino & Shields", создана пользователем yhl, 29 окт 2015.

  1. yhl

    yhl Нерд

    Подскажите как вывести время с получаемое с gprs на lcd?
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    записать его в переменную (как именно - смотри примеры к используемой библиотеке) и затем эту переменную передать в LCD (аналогично).
     
  3. yhl

    yhl Нерд

    Можете скинуть пример как именно записать переменную?
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    я не знаю в каком формате выдает данные библиотека GPRS, не знаю какую библиотеку ты используешь...
    Это все должно быть в примерах к библиотеке.
     
  5. yhl

    yhl Нерд

    Если я правильно понял мне надо сделать примерно как то так
    Код (C++):
    int j ;//вожу переменную
    //здесь я как то получаю данные о времени
    lcd.print(j);//и вывожу на лсд
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    да, примерно так. Но тип переменных может быть и int или byte (если в библиотеке по одному числу для часов-минут-секунд, т.е. три переменных h = 12, m = 33, s = 56), и long (если это просто число секунд от Единого старта: ss = 223654587), и String (если они тупо в текстовом виде: j = "12:33:56"), все зависит от используемой библиотеки.
    Код (C++):
    int j ;//вожу переменную
    j = getTime() //здесь я как то получаю данные о времени
    lcd.print(j);//и вывожу на лсд
     
  7. yhl

    yhl Нерд

    Для получения времени используется ат команда mySerial.println("AT+CCLK?"); Ее писать ?
     
  8. DrProg

    DrProg Вечный нерд

    Так не покатит. Надо вывести команду на терминал, получить ответную строку из буфера в строковую переменную, обработать ее выискивая в тексте время и дату.

    Не проще уже купить ЧРВ, аналоги от дядюшки вообще копеечные, а работают исправно.
     
    ИгорьК нравится это.
  9. yhl

    yhl Нерд

    Кстати я так и начал писать
     
  10. DrProg

    DrProg Вечный нерд

    Ну вы ее напишите, а ответ поймать?
     
  11. yhl

    yhl Нерд

    С выводом проблем нет
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(10, 11); // RX, TXint getTime;
    GPRS gprs(9600);// библиотека для работы с GPRS устройством



    void setup() {
      // включаем GPRS-шилд
      gprs.powerUpDown();
      Serial.begin(9600); //Скорость порта для связи Arduino с компьютером
      // проверяем есть ли связь с GPRS устройством

      Serial.println("GPRS AT comand");
      mySerial.begin(9600); //Скорость порта для связи Arduino с GSM модулем
      mySerial.println("AT");
      delay(1000);
      mySerial.println("AT+CCLK?");
      delay(1000);
    }

    void loop() {

      if (mySerial.available())
        Serial.write(mySerial.read());
      if (Serial.available())
        mySerial.write(Serial.read());

    }
     
    Получил ответ
    Код (C++):
    +CCLK: "15/10/28,13:24:47+03"
    Как записать не знаю. Есть вариант что типа этого:
    Код (C++):

    /
    int j = 9; //j=0
    int g = 0;//g = 0

    char datetimeStrings[] = {"15/10/28,13:24:47+03"}; //массив c датой,временем и часовым поясом
    String stroka = ""; //записываем в строку

    void setup() {
      Serial.begin(9600);//сериал соедеинение
    }

    void loop() {
      while (datetimeStrings[j] != '+') //постоянный цыкл в которм ищем +
        //и показывем все что идет до +
      {
        stroka = stroka + datetimeStrings[j]; //запмсываем в строку 15/10/28,13:24:47+03
        j++;//добавляем символы
        //как я понимаю  15/10/28,13:24:47 добавляються при каждом цыкле по одному числу
      }
      //Выводим изъятую строку
      Serial.println(stroka);
      delay(1000);
    }


     
     
    Последнее редактирование: 30 окт 2015
  12. yhl

    yhl Нерд

    A как записать то что я не знаю? char datetimeStrings[]={"15/10/28,13:24:47+03"};
     
  13. yhl

    yhl Нерд

    Записать смог таким образом datetimeStrings[mySerial]; правда не то что хотел. Буду думать дальше )
     
  14. Vetrinus

    Vetrinus Гик

    В предпоследнем обновлении Arduino Mega Server этот вопрос затригвался. Возможно, вам будет полезно.
     
  15. yhl

    yhl Нерд

    Короче так но пока косяков много
    Код (C++):
    // подключаем библиотеку GPRS модуля
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    #include <stdio.h>
    #include <string.h>
    #include <LiquidCrystal.h>

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(13, 12, 7, 6, 5, 4);
    // заводим serial-соединение на 10 и 11 цифровых входах
    SoftwareSerial gprsSerial(10, 11);
    GPRS gprs(9600);// библиотека для работы с GPRS устройством

    void setup ()
    {
      gprs.powerUpDown();
    gprsSerial.begin(9600);
    Serial.begin(9600);
    lcd.begin(16, 2);
    }

    String currStr = "";
    char result;
    void loop ()
    {
    delay(300);
    if (!gprsSerial.available())
    delay(100);
    gprsSerial.println("AT+CCLK?");
    delay(100);

    timeRead:
    char currSymb = gprsSerial.read();
    currStr = currStr + currSymb;
    if (currSymb == '\r')
    {
    goto timePrint;
    }

    else
    {
    goto timeRead;
    }

    timePrint:

    delay(100);
    Serial.println(currStr);
    lcd.setCursor(0,0);
    lcd.print(currStr);
    lcd.setCursor(0,1);
    lcd.print("                 ");
    currStr="";
    delay(100);
    }
     

    Вложения:

  16. yhl

    yhl Нерд

    Есть вариант что то типа такого но тут одни ошибки
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(10, 11); // RX, TX
    GPRS gprs(9600);// библиотека для работы с GPRS устройством

    #include <EEPROM.h>

    // размер массива для времени с учётом завершающего нуля
    #define LEN_DATE 12
    // размер массива для даты с учётом завершающего нуля
    #define LEN_TIME 12
    // размер массива для дня часового пояса с учётом завершающего нуля
    #define LEN_TZ 12

    void setup()
    {
      // включаем GPRS-шилд
      gprs.powerUpDown();
      //Скорость порта для связи Arduino с компьютером
      Serial.begin(9600);
      while (!Serial) {
        // ждём пока не откроется монитор последовательного порта
        // для того, чтобы отследить все события в программе
      }
      Serial.println("GPRS clock");
      //Скорость порта для связи Arduino с GSM модулем
      mySerial.begin(9600);
      mySerial.println("AT");
      //отпавляем АТ команду и получаем ответ OK
      delay(1000);
      //установливаем время,
      //но у меня оно установенно
      //mySerial.println("AT+CCLK=\"15/10/27,19:50:00+03\"");
    }

    void loop()
    {
      if (mySerial.available())
        Serial.write(mySerial.read());
      if (Serial.available())
        mySerial.write(Serial.read());

      // массив для хранения текущего времени
      char time[LEN_DATE] = {0};
      // массив для хранения текущей даты
      char date[LEN_TIME] = {0};
      // массив для хранения текущего дня недели
      char tz[LEN_TZ] = {0};

      // запрашиваем данные с GPRS
      mySerial.println("AT+CCLK?");

      // сохраняем текущее время в массив time
      gprs.getTimeStr(time, LEN_DATE);
      // сохраняем текущую дату в массив date
      gprs.getDateStr(date, LEN_TIME);
      // сохраняем текущий день недели в массив dow
      gprs.getDOWStr(dow, LEN_TZ);

      // выводим в serial порт текущее время, дату и день недели
      Serial.print(time);
      Serial.print("--");
      Serial.print(date);
      Serial.print("--");
      Serial.println(tz);

      // ждём одну секунду
      delay(1000);
    }