графический дисплей 128х64 Аналоговые Часы (стрелки)
- Войдите на сайт для отправки комментариев
Пт, 14/02/2014 - 13:09
Всем добрго времени.
Arduino - MEGA. Подключил кучу датчиков, часы 1307 и дсплей WG12864B-TML-T.
Вроде бы все работает отлично, НО!? Как всегда хочется иметь с таким дисплеем "красатульки".
Хотел нарисовать Часики круглые.
С кругом, проблем нет.
GLCD.DrawCircle(32,31,30,BLACK);
А вот со стрелочками возникла проблемка.
Как только не крутил
х = sin(2*PI*sec/60) y = cos(2*PI*sec/60)
Результат - плачевный.
Писать по условиям, типа
if(second == 0){
GLCD.DrawLine(32,31,0,31, WHITE); стираем старую линию
GLCD.DrawLine(32,31,32,0, BLACK); } рисуем новую
ля ля ля ............................
if(second == 5){
GLCD.DrawLine(32,31,32,0, WHITE);
GLCD.DrawLine(32,31,40,8, BLACK);}
не есть гуд.
Может кто занимался таким чудом, подскажите?
P.S. из С++ перетащить исходник, не получилось, разные библиотеки.
использую #include <glcd.h>
когда сам делал, но кое что другое, тут либо весь экран обновлять, либо затирать старую линию. линию затереть проще и быстрее
но и каждый раз выводить картинку часов например а на нее уже стрелки там где нужно не до такой степени медленно
Решил задачу.
думал задать массивы, но :( - писать долго :)
Вот, может кому поможет;
Ну и условие по изменению (проверки) в секундах, а то стрелки мигают
Допишу код
if (second != previousMillis) /* секундная срелка*/ { GLCD.ClearScreen(); GLCD.DrawLine(30,30,x,y, WHITE); x = 30 + sin(2*PI*second/60)*30; y = 30 -cos(2*PI*second/60)*30; GLCD.DrawLine(30,30,x,y, BLACK); previousMillis = second; /* минутная срелка*/ GLCD.DrawLine(30,30,x1,y1, WHITE); x1 = 30 + sin(2*PI*minute/60)*26; y1 = 30 -cos(2*PI*minute/60)*26; GLCD.DrawLine(30,30,x1,y1, BLACK); /* часовая срелка*/ GLCD.DrawLine(30,30,x2,y2, WHITE); x2 = 30 + sin(2*PI*(hour*60+minute)/12/60)*20; y2 = 30 - cos(2*PI*(hour*60+minute)/12/60)*20; GLCD.DrawLine(30,30,x2,y2, BLACK); }Для чего (GLCD.ClearScreen()), это временная бяка от каких то "касяков"
Пиксели всплывают левые при секундах "00" и "15".