1

Тема: WG12864B-TML-T

http://forum.rcl-radio.ru/uploads/images/2020/07/5e78437c6bd9ea2841161d11e0c6e284.png

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

Основная статья - http://rcl-radio.ru/?p=80884

#include <U8glib.h>
#include "rus6x10.h"

 U8GLIB_KS0108_128 u8g(12, 11, 10,  9,  8,  7,  6,  5,   14,  3,  4,   13, 2);     
                     //D0, D1, D2,  D3, D4, D5, D6, D7,  E,   CS1,CS2, DI, RW

void draw() {
  u8g.setRot180();
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(15, 12, "RCL-RADIO.RU");
  u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_6x12);
  u8g.drawStr(35, 25, "MT-12864J");
  //u8g.setPrintPos( 0, 50); u8g.print("MT-12864J");
  u8g.setColorIndex(1);           
  u8g.drawBox(0, 35, 128, 20);
  u8g.setFont(u8g_font_unifont);
  u8g.setColorIndex(0);
  u8g.drawStr(35, 50, "ARDUINO");
  u8g.setColorIndex(1); 
  u8g.setFont(rus6x10);
  u8g.drawStr(45, 64, "ПРИВЕТ");
}

void setup() {


}

void loop() {
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

2

Re: WG12864B-TML-T

Часы ds3231

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

http://forum.rcl-radio.ru/uploads/images/2020/07/2f27259c9b6c5bea4aa7860a9c2f176d.png


#include <U8glib.h>
#include "digits32.h"
#include "rus6x10.h"
#include <Wire.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
 DS3231 clock;RTCDateTime DateTime;
 U8GLIB_KS0108_128 u8g(12, 11, 10,  9,  8,  7,  6,  5,   14,  3,  4,   13, 2);     
                     //D0, D1, D2,  D3, D4, D5, D6, D7,  E,   CS1,CS2, DI, RW
 char * mes[12]{"ЯНВАРЯ","ФЕВРАЛЯ","МАРТА","АПРЕЛЯ","МАЯ","ИЮНЯ","ИЮЛЯ","АВГУСТА","СЕНТЯБРЯ","ОКТЯБРЯ","НОЯБРЯ","ДЕКАБРЯ"};   
 char * den[7]{"ВОСКРЕСЕНЬЕ","ПОНЕДЕЛЬНИК","ВТОРНИК","СРЕДА","ЧЕТВЕРГ","ПЯТНИЦА","СУББОТА"};                 

void draw() {
  u8g.setRot180();
  u8g.setFont(rus6x10);
  u8g.setPrintPos( 10, 10);  u8g.print(DateTime.day);
  u8g.drawStr(26, 10, mes[DateTime.month-1]);
  u8g.drawStr(75, 10, den[DateTime.dayOfWeek]);
  u8g.setFont(digits32);
  u8g.setPrintPos( 1, 47);  u8g.print(DateTime.hour / 10);
  u8g.setPrintPos( 20, 47); u8g.print(DateTime.hour % 10);
  u8g.setPrintPos( 39, 47); u8g.print(":");
  u8g.setPrintPos( 45, 47); u8g.print(DateTime.minute / 10);
  u8g.setPrintPos( 64, 47); u8g.print(DateTime.minute % 10);
  u8g.setPrintPos( 83, 47); u8g.print(":");
  u8g.setPrintPos( 89, 47); u8g.print(DateTime.second / 10);
  u8g.setPrintPos( 109, 47); u8g.print(DateTime.second % 10);
 // u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(20, 60, "TEMP");
  u8g.setPrintPos( 60, 60);  u8g.print(clock.readTemperature(),1);
  u8g.drawStr(100, 60, "C");
  
}

void setup() {
  Wire.begin(); 
  clock.begin();
  clock.setDateTime(__DATE__, __TIME__);
}

void loop() {
   DateTime=clock.getDateTime();
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

3

Re: WG12864B-TML-T

http://forum.rcl-radio.ru/uploads/images/2020/07/f8fade491e004a57fdbf187b0c9e619c.png


#include <U8glib.h>
#include "digits32.h"
#include "rus6x10.h"
#include <Wire.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
 DS3231 clock;RTCDateTime DateTime;
 U8GLIB_KS0108_128 u8g(12, 11, 10,  9,  8,  7,  6,  5,   14,  3,  4,   13, 2);     
                     //D0, D1, D2,  D3, D4, D5, D6, D7,  E,   CS1,CS2, DI, RW
 char * mes[12]{"ЯНВАРЯ","ФЕВРАЛЯ","МАРТА","АПРЕЛЯ","МАЯ","ИЮНЯ","ИЮЛЯ","АВГУСТА","СЕНТЯБРЯ","ОКТЯБРЯ","НОЯБРЯ","ДЕКАБРЯ"};   
 char * den[7]{"ВОСКРЕСЕНЬЕ","ПОНЕДЕЛЬНИК","ВТОРНИК","СРЕДА","ЧЕТВЕРГ","ПЯТНИЦА","СУББОТА"};                 

void draw() {
  u8g.setRot180();
  u8g.setFont(rus6x10);
  u8g.setPrintPos( 10, 10);  u8g.print(DateTime.day);
  u8g.drawStr(26, 10, mes[DateTime.month-1]);
  u8g.drawStr(75, 10, den[DateTime.dayOfWeek]);
  u8g.setFont(digits32);
  if(DateTime.hour/10==1){u8g.setPrintPos( 15, 47); u8g.print(DateTime.hour / 10);}else{u8g.setPrintPos( 1, 47);  u8g.print(DateTime.hour / 10);}
  if(DateTime.hour%10==1){u8g.setPrintPos( 34, 47); u8g.print(DateTime.hour % 10);}else{u8g.setPrintPos( 20, 47); u8g.print(DateTime.hour % 10);}
  u8g.setPrintPos( 39, 47); u8g.print(":");
  if(DateTime.minute/10==1){u8g.setPrintPos( 59, 47); u8g.print(DateTime.minute / 10);}else{u8g.setPrintPos( 45, 47); u8g.print(DateTime.minute / 10);}
  if(DateTime.minute%10==1){u8g.setPrintPos( 78, 47); u8g.print(DateTime.minute % 10);}else{u8g.setPrintPos( 64, 47); u8g.print(DateTime.minute % 10);}
  u8g.setPrintPos( 83, 47); u8g.print(":");
  if(DateTime.second/10==1){u8g.setPrintPos( 103, 47); u8g.print(DateTime.second / 10);}else{u8g.setPrintPos( 89, 47); u8g.print(DateTime.second / 10);}
  if(DateTime.second%10==1){u8g.setPrintPos( 122, 47); u8g.print(DateTime.second % 10);}else{u8g.setPrintPos( 108, 47); u8g.print(DateTime.second % 10);}
 // u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(20, 60, "TEMP");
  u8g.setPrintPos( 60, 60);  u8g.print(clock.readTemperature(),1);
  u8g.drawStr(100, 60, "C");
  
}

void setup() {
  Wire.begin(); 
  clock.begin();
  clock.setDateTime(__DATE__, __TIME__);
}

void loop() {
   DateTime=clock.getDateTime();
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

4

Re: WG12864B-TML-T

Нашел в закромах старинный lcd экран, разобрался с распиновкой, воспользовался примером часов, они понравились. У меня показывает температуру завышенную на два градуса, можно это как то поправить в скетче? Сам в этом вопросе не разобрался. Спасибо.
http://forum.rcl-radio.ru/uploads/images/2021/01/5a13b45a3ae403c817ffe63350abbbae.jpg http://forum.rcl-radio.ru/uploads/images/2021/01/8b50fce8e90612838752d98d736c7dab.jpg

5

Re: WG12864B-TML-T

u8g.setPrintPos( 60, 60);  u8g.print(clock.readTemperature(),1);
заменить на
  u8g.setPrintPos( 60, 60);  u8g.print(clock.readTemperature()-2,1);

6

Re: WG12864B-TML-T

Спасибо, все получилось. По незнанию вычитал из переменной, а не значения.

7

Re: WG12864B-TML-T

Часики вполне симпатичные, нравятся. Подумал, что если батарейка сядет, опять перезаливать их. Были бы в тему кнопки установки времени, несколько ножек свободны. И возможно будильник. Опять же, если будильник, то не плохо  будет автоматическая регулировка яркости экрана, хотя можно и обойтись без этого. Выводить температуру на экран особо смысла нет, это температура чипа, которая не будет точна. Планируется ли такая доработка? Сам не справлюсь, но готов потестировать.

8

Re: WG12864B-TML-T

Нет, доработок не будет. Часы это был просто пример. Сейчас у меня нет в наличии этого экрана.

9

Re: WG12864B-TML-T

Так как часы легли на душу, попробовал доделать функционал. Склеил корпус, поставил пять кнопок (оставалось всего 5 ног от ардуино нано). кнопки выбора даты и времени поставил на А6 и А7 с подтягивающими резисторами к +, остальные к штатным А1-А3. Пришлось на экран вывести год, иначе установка была бы неудобна. Все прекрасно работает и теперь это полноценные часы, не привязанные к прошивке. Желание прикрутить будильник и автояркость остались, но видимо уже когда нибудь на атмеге128, как только приделаю ее к ардуине, на сайте мелькнуло как это сделать. Почему такие хлопоты, экран есть не один и очень древний, в принципе не работает по последовательной шине.http://forum.rcl-radio.ru/uploads/images/2021/03/5c78184cb7fb2e01248e30ae12192aa6.jpg

10

Re: WG12864B-TML-T

Хочу собрать такие часы. fishrob, не поделитесь прошивкой?

11

Re: WG12864B-TML-T

Только заметил, извиняюсь. У меня такой код нашелся в архиве на эти часики.  А6 и А7 к плюсу резисторами подтянуты вроде. На коленке делал. Весь код собрал у хозяина сайта.


#include <U8glib.h> // https://rcl-radio.ru/wp-content/uploads … 1-5722.zip
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?acti … download=1
#include "digits32.h" // http://forum.rcl-radio.ru/misc.php?acti … download=1
#include <Wire.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
DS3231 clock;RTCDateTime DateTime;
int yar,mount,date,hour,minut,secon;
U8GLIB_KS0108_128 u8g(12, 11, 10,  9,  8,  7,  6,  5,   14,  3,  4,   13, 2);     
                     //D0, D1, D2,  D3, D4, D5, D6, D7,  E,   CS1,CS2, DI, RW
char * mes[12]{"ЯНВАРЯ","ФЕВРАЛЯ","МАРТА","АПРЕЛЯ","МАЯ","ИЮНЯ","ИЮЛЯ","АВГУСТА","СЕНТЯБРЯ","ОКТЯБРЯ","НОЯБРЯ","ДЕКАБРЯ"};   
char * den[7]{"ВОСКРЕСЕНЬЕ","ПОНЕДЕЛЬНИК","ВТОРНИК","СРЕДА","ЧЕТВЕРГ","ПЯТНИЦА","СУББОТА"};                 

void draw() {
  u8g.setRot180();
  u8g.setFont(rus6x10);
  u8g.setPrintPos(0, 10);  u8g.print(DateTime.day);
  u8g.drawStr(15, 10, mes[DateTime.month-1]);
  u8g.drawStr(62, 10, den[DateTime.dayOfWeek]);
  u8g.setFont(digits32);
  if(DateTime.hour/10==1){u8g.setPrintPos( 15, 47); u8g.print(DateTime.hour / 10);}else{u8g.setPrintPos( 1, 47);  u8g.print(DateTime.hour / 10);}
  if(DateTime.hour%10==1){u8g.setPrintPos( 34, 47); u8g.print(DateTime.hour % 10);}else{u8g.setPrintPos( 20, 47); u8g.print(DateTime.hour % 10);}
  u8g.setPrintPos( 39, 47); u8g.print(":");
  if(DateTime.minute/10==1){u8g.setPrintPos( 59, 47); u8g.print(DateTime.minute / 10);}else{u8g.setPrintPos( 45, 47); u8g.print(DateTime.minute / 10);}
  if(DateTime.minute%10==1){u8g.setPrintPos( 78, 47); u8g.print(DateTime.minute % 10);}else{u8g.setPrintPos( 64, 47); u8g.print(DateTime.minute % 10);}
  u8g.setPrintPos( 83, 47); u8g.print(":");
  if(DateTime.second/10==1){u8g.setPrintPos( 103, 47); u8g.print(DateTime.second / 10);}else{u8g.setPrintPos( 89, 47); u8g.print(DateTime.second / 10);}
  if(DateTime.second%10==1){u8g.setPrintPos( 122, 47); u8g.print(DateTime.second % 10);}else{u8g.setPrintPos( 108, 47); u8g.print(DateTime.second % 10);}
// u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_unifont);
  u8g.setPrintPos(0, 60);  u8g.print(DateTime.year);
  u8g.drawStr(40, 60, "TEMP");
  u8g.setPrintPos( 78, 60);  u8g.print(clock.readTemperature()-3,1);
  u8g.drawStr(118, 60, "C");

}

void setup() {
  //pinMode(20,INPUT);          // УСТ. ВРЕМЯ
  pinMode(16,INPUT_PULLUP);   // ЧАСЫ / ДАТА
  pinMode(17,INPUT_PULLUP);   // МИНУТЫ / МЕСЯЦ
  pinMode(15,INPUT_PULLUP);   // ОБНУЛЕНИЕ СЕКУНД / ГОД / УСТ. БУДИЛЬНИКА
  //pinMode(21,INPUT);          // УСТ. ДАТА-МЕСЯЦ-ГОД
  Wire.begin();
  clock.begin();
  // clock.setDateTime(__DATE__, __TIME__); // установка времени по времени компиляции
  // clock.setDateTime(2016, 9, 15, 0, 0, 0);// Установка времени вручную (Год, Месяц, День, Час, Минута, Секунда)
}

void loop() {
  DateTime = clock.getDateTime();yar = DateTime.year; mount = DateTime.month;date = DateTime.day;hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
 
//// set time ////
  if(analogRead(A6) < 500&&digitalRead(16)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
  if(analogRead(A6) < 500&&digitalRead(17)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  if(analogRead(A6) < 500&&digitalRead(15)==LOW){secon=0; clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  if(analogRead(A7) < 500&&digitalRead(16)==LOW){date++;if(date>31){date=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
  if(analogRead(A7) < 500&&digitalRead(17)==LOW){mount++;if(mount>12){mount=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
  if(analogRead(A7) < 500&&digitalRead(15)==LOW){yar++;if(yar>2050){yar=2020;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
}

12

Re: WG12864B-TML-T

fishrob, спасибо.