Помощь. Скетч. Вывод часов RTC на экран 128x128
- Войдите на сайт для отправки комментариев
Пт, 22/04/2016 - 15:47
Всем привет.
Помогите со скетчом. Программлю 5 день, и, конечно, трудно.
Имею http://ru.aliexpress.com/item/1PCS-1-44-128-128-SPI-TFT-LCD-Module-Replace-Nokia-5110-LCD-51/32332271521.html, часы DS1307 и плату arduino nano. Хочу вывести просто часики на экран. Проблема в том, что в том скетче который я наляпал часы обновляются построчно как при выводе в серийный порт, а хотелось бы, чтобы менялист цифры на одном месте, как это и полагается на часах. Помогите, пожалуйста.
#include <SPI.h> #include <Adafruit_GFX.h> #include <TFT_ILI9163C.h> #include <DS1307RTC.h> // Color definitions #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 __CS 10 #define __DC 9 TFT_ILI9163C display = TFT_ILI9163C(__CS, __DC); float p = 3.1415926; void setup(void) { display.begin(); display.cp437(true); //Поправка на 256-й символ в функции русификации uint16_t time = millis(); time = millis() - time; Serial.begin(9600); while (!Serial) ; // wait until Arduino Serial Monitor opens setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); // lcdTestPattern(); // delay(1000); tftPrintTest(); delay(10000); } void loop() { if (timeStatus() == timeSet) { digitalClockDisplay(); } else { Serial.println("The time has not been set. Please run the Time"); Serial.println("TimeRTCSet example, or DS1307RTC SetTime example."); Serial.println(); delay(4000); } delay(1000); } void tftPrintTest() { display.clearScreen(); display.setCursor(0,0); display.setTextSize(2); display.setTextColor(WHITE); display.println(utf8rus("Сейчас")); } void digitalClockDisplay(){ // digital clock display of the time display.print(hour()); printDigits(minute()); printDigits(second()); display.println(" "); display.print(day()); display.print(" "); display.print(month()); display.print(" "); display.print(year()); display.println(); } void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 display.print(":"); if(digits < 10) display.print('0'); display.print(digits); } /* Recode russian fonts from UTF-8 to Windows-1251 */ String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; }
я не знаком с этой библиотекой, но наверянкак могу сказать что есть какаято функция для установки курсора, вот его то и нужно выставлять. сначала очищааеем поле часов потом ставим курсор потом записываем значения
перед строкой 48 поставь:
перед строкой 48 поставь:
кот обормот ))
не дал человеку в библиотеке поковыряться ))
Ааа, я не знал, что сеткурсор помимо указания координат выступает в качестве своеобразного якоря для объета. Спасибо! Буду пробовать.
Пл идее и так должно было работать, видимо библа не допилена
Всё просто и очевидно, хочешь текст, поставь курсор ))
Да, все получилось, а еще один вопрос, привел к виду
И часы оновлябтся, не пишут друг на друг, но обновлне идет всего иэкарна и это сильн заметно, как это обойти, исправить?
Так ты сам и очищаешь весь экран
display.clearScreen();
только наверно нужно обновлять "поле" под вывод, чтото типа feelRect (231, 12, 488, 12) должно быть
решил, это громко сказано, нашел, что ожно сделать пока что )
А поподробнее можно? Поскольку ни tft.FillRect(0, 20, 1, 1, BLACK); , display.FillRect(0, 20, 1, 1, BLACK); компилятор пропускать не хочет :(
найди функцию в библиотеке, котоорая заливает прямоугольник
Запилил
Идут, нобегают адово )) Есть мнеее богопротивные варианты? За эпиолепитиков в конторе волнуюсь )))
Ага получилось, уже очень даже не плохо. Спасибо! опробую допилить до большго смуфа.
Но зачем делать условие лишнее?
с чего это оно лишнее?
обновляется только тогда когда нужно
Спасибо!
А не в курсе как вывести месяц русским? Я так понимаю, в примере SetTime месяца задаются в списке
Можно ли к нему как-то применить функцию utf2rus?
Я не знаю никогда не русифицировал, хотя скоро придётся
В интернете куча примеров этого
Еще бы хоть один из них нормально работал, все приходится в результатет переписывать )