Часы TM1637 мигание двоеточием и...

Тема в разделе "Arduino & Shields", создана пользователем obuhanoe, 16 янв 2018.

  1. obuhanoe

    obuhanoe Гик

    Добрый день.
    Есть часы TM1637 на которые каждые 0,5 сек выводится время, с миганием двоеточия. Раз в n-минут нужно получить данные погоды с сайта, например api.openweathermap.org. Но в момент получения данных о погоде - от 1 до 3 сек - мигание двоеточием в этот момент, не происходит. Не могу понять как реализовать так:
    показываем часы и мигаем двоеточием, а в фоне получаем погоду.
    Код ниже -
    Код (C++):
    void loop() {

    // Каждые 0.5 секунды выдаем время
       if( cur_ms < ms1 || (cur_ms - ms1) > 500 ){
           ms1 = cur_ms;
           ntp_time    = t_cur + t_correct;      
           // ТУТ показываем время на экране
           Display_TH();
           //мигаем двоеточием
           points = !points;
        }  
     
        // Каждые n- мин. получаем данные о погоде
      if( cur_ms < ms2 || (cur_ms - ms2) > 60000*10.0){
         
           // занимает от 1 до 3 секунд
           jsonGet();      
      }
     
    }
    Спасибо за подсказки
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Что насчет jsonGet
     
  3. SergeiL

    SergeiL Оракул Модератор

    Для Ардуино есть библиотека <TimerOne.h>
    Настраиваем обработчик на 100 миллисекунд, переносим туда работу с индикатором, а опрос погоды оставляем в loop(). Все будет работать "как часы". :)
     
    arkadyf нравится это.
  4. С годик назад видел библиотеку тредс. Дичь какая-то :) Вообщем типо можно сделать два потока. Хз как это реализовано :) походу по очереди делает. Но было написано что вроде не влияет на скорость программы
     
  5. obuhanoe

    obuhanoe Гик

    Не подскажите для ESP8266 - библиотека Ticker аналогичная <TimerOne.h> ?
     
  6. SergeiL

    SergeiL Оракул Модератор

    Да, для ESP8266 - Ticker.
     
    obuhanoe и arkadyf нравится это.
  7. obuhanoe

    obuhanoe Гик

    Т.е. примерно так?
    Код (C++):
    #include "TimerOne.h"

    void setup {

      Timer1.initialize(500000);         // инициализировать timer1, и установить период 1/2 сек.
      Timer1.attachInterrupt(callback);  

    }

    void callback() {

      // ТУТ показываем время на экране
      Display_TH();
      //мигаем двоеточием
      points = !points

    }

    void loop() {
     
        // Каждые n- мин. получаем данные о погоде
      if( cur_ms < ms2 || (cur_ms - ms2) > 60000*10.0){
         
           // занимает от 1 до 3 секунд
           jsonGet();    
      }
     
    }
     
  8. SergeiL

    SergeiL Оракул Модератор

    Так у Вас ардуина или ESP?
     
  9. obuhanoe

    obuhanoe Гик

    А я хочу научиться и на ардуине и на esp8266 :)
     
  10. SergeiL

    SergeiL Оракул Модератор

    Да, все правильно.
    Только инвертирование точек, наверное, нужно делать до вывода на дисплей.

    Для ESP, в Ticker, синтаксис чуть отличается, а так все так же, там есть примеры - легко разобраться.
     
    obuhanoe нравится это.
  11. obuhanoe

    obuhanoe Гик

    Спасибо за помощь.