графический дисплей 128х64 Аналоговые Часы (стрелки)

alexeko
Offline
Зарегистрирован: 03.01.2014

Всем добрго времени.

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>

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

но и каждый раз выводить картинку часов например а на нее уже стрелки там где нужно не до такой степени медленно

alexeko
Offline
Зарегистрирован: 03.01.2014

Решил задачу.

думал задать массивы, но :( - писать долго :)

Вот, может кому поможет;

GLCD.DrawLine(32,31,x,y, WHITE);
 x = 30 + sin(2*PI*second/60)*30;   координаты установите свои
 y = 30 -cos(2*PI*second/60)*30;    у меня 30х30
GLCD.DrawLine(32,31,x,y, BLACK);

Ну и условие по изменению (проверки) в секундах, а то стрелки мигают 

Допишу код

 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".