Добрый день. Есть часы 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(); } } Спасибо за подсказки
Для Ардуино есть библиотека <TimerOne.h> Настраиваем обработчик на 100 миллисекунд, переносим туда работу с индикатором, а опрос погоды оставляем в loop(). Все будет работать "как часы".
С годик назад видел библиотеку тредс. Дичь какая-то Вообщем типо можно сделать два потока. Хз как это реализовано походу по очереди делает. Но было написано что вроде не влияет на скорость программы
Т.е. примерно так? Код (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(); } }
Да, все правильно. Только инвертирование точек, наверное, нужно делать до вывода на дисплей. Для ESP, в Ticker, синтаксис чуть отличается, а так все так же, там есть примеры - легко разобраться.