Часы на лед матрицах
- Войдите на сайт для отправки комментариев
Вс, 09/04/2017 - 15:17
Доброго всем времени суток !
Вот собрал такие часы на матрицах MAX7219 с датчиком давления и DS1307 часы реального времени с установкой времени с помощью энкодера, собрал не давно. Может кто посоветует что можно изменить в скетче для модернизации или упрощения скетча.
#include <DS1307.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> #include <myButton.h> #include <MsTimer2.h> #include <Encoder.h> #include <Wire.h> //#include <BMP085.h> // int wait = 15; //Скорость скролинга int spacer = 1;//Растояние между буквами int widt = 5 + spacer; // Ширина шрифта - 5 пикселей. //BMP085 dps = BMP085(); //long Temperature = 0, Pressure = 0; //******* Установки для кнопок ************************** #define btn1 2//Пин 2 ARD и 4 на Amtege для кнопки 1 #define btn2 3//Пин 3 ARD и 5 на Amtege для кнопки 2 myButton boot1(btn1, 50); myButton boot2(btn2, 50); //******* Установки для DS1307 ************************** DS1307 rtc(A2, A3); String tap; int s,m,h; Time t; //******* Установки для матрицы ************************* int pinCS = 10;//Пин LOAD. Пин DIN - 11, Пин CLK - 13 Max72xxPanel matrix = Max72xxPanel(pinCS, 4, 1); //******** Установки Энкодера *************************** enum {ENC_PIN1 = 5, ENC_PIN2 = 6}; int Hor; //Часы int Min;//Минуты int change = 1; // Изменение яркости //************** cursor ******************* int x,y; String hb = "Temperatura"; String ds = "Davlenie";//Строка которая выводится //********************************************************* void prin(long str){ matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print(str); matrix.write(); } //********************************************************* void scrLeft(String st){//Подпограмма скрола в лево for(int i = 0; i < widt * st.length()+ matrix.width() - spacer; i++){ matrix.fillScreen(LOW); int letter = i / widt; int x = (matrix.width() - 1) - i % widt; for(int t = 0; t < widt; t++){ if ( letter < st.length() ) { matrix.drawChar(x, 1, st[letter], HIGH, LOW, 1); } letter--; x -= widt; } matrix.write(); delay(wait); } } //********************************************************* void scrDown(String stri){ for(int sk = 1; sk < 12; sk++){ matrix.fillScreen(LOW); matrix.setCursor(1,y); matrix.print(stri); matrix.write(); delay(50); y = y + 1; } matrix.setCursor(1,1); y = 1; } //********************************************************* void scrUp(String stri){ for(int sk = 1; sk < 12; sk++){ matrix.fillScreen(LOW); matrix.setCursor(1,y); matrix.print(stri); matrix.write(); delay(50); y = y - 1; } matrix.setCursor(1,1); y = 1; } //********************************************************* void SetH(){ t = rtc.getTime(); Hor = t.hour; Min = t.min; while(1){ static uint8_t oldValue = 0; uint8_t grayValue = digitalRead(ENC_PIN1) | (digitalRead(ENC_PIN2) << 1), value = graydecode(grayValue); if (value == 0) // Энкодер вращается { if (oldValue == 3) { // Вправо if (Hor + change <= 23) Hor += change; } else if (oldValue == 1) { // Влево if (Hor - change >= 0) Hor -= change; } } matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print(Hor); matrix.write(); oldValue = value; delay(1); //----------------------------------------------------------------- if( boot1.flagClick == true ){//Провека нажатия кнопки Exit boot1.flagClick = false; rtc.setTime(Hor,Min,0); break; } //------------------------------------------------------------------ } } //********************************************************* void SetM(){ t = rtc.getTime(); Min = t.min; Hor = t.hour; while(1){ static uint8_t oldValue = 0; uint8_t grayValue = digitalRead(ENC_PIN1) | (digitalRead(ENC_PIN2) << 1), value = graydecode(grayValue); if (value == 0) // Энкодер вращается { if (oldValue == 3) { // Вправо if (Min + change <= 59) Min += change; } else if (oldValue == 1) { // Влево if (Min - change >= 0) Min -= change; } } matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print(Min); matrix.write(); oldValue = value; delay(1); //----------------------------------------------------------------- if( boot1.flagClick == true ){//Провека нажатия кнопки Exit boot1.flagClick = false; rtc.setTime(Hor,Min,0); break; } //------------------------------------------------------------------ } } //**************************************************************************** unsigned graydecode(unsigned gray) { unsigned bin; for (bin = 0; gray; gray >>= 1) bin ^= gray; return bin; } //**************************************************************************** void setClk(){ matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print("Horas"); matrix.write(); delay(1000); scrDown("Horas"); SetH(); delay(5); //------------------------------------- matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print("Minut"); matrix.write(); delay(1000); scrUp("Minut"); SetM(); delay(5); matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print("EXIT"); matrix.write(); delay(1000); scrDown("EXIT"); } //**************************************************************************** void timerInterupt() {//Подпрогрмма сканера кнопок и времени boot1.scanState(); boot2.scanState(); } //**************************************************************************** void setup() { matrix.setIntensity(7); matrix.shutdown(false); matrix.fillScreen(LOW); rtc.halt(false); rtc.setDOW(SUNDAY); rtc.setDate(1, 4, 2017); MsTimer2::set(2, timerInterupt); // задаем период прерывания по таймеру 2 мс MsTimer2::start();// разрешаем прерывание по таймеру //Wire.begin(); //dps.init(); pinMode(ENC_PIN1, INPUT); pinMode(ENC_PIN2, INPUT); } //**************************************************************************** void loop() { t = rtc.getTime(); tap = rtc.getTimeStr(FORMAT_SHORT); //dps.getPressure(&Pressure); //dps.getTemperature(&Temperature); s = t.sec; matrix.fillScreen(LOW); matrix.setCursor(1,1); matrix.print(tap); matrix.write(); if ( boot1.flagClick == true ){//Провека нажатия кнопки SET boot1.flagClick = false; setClk(); } //if(s == 30) scrLeft(tape); if(s == 30){ scrLeft(ds); delay(50); //prin(int(Pressure/133.3)); matrix.setCursor(1,1); matrix.print("12345"); matrix.write(); delay(3000); } if(s == 59){ scrLeft(hb); delay(50); //prin(Temperature*0.1); matrix.setCursor(14,1); matrix.print("54321"); matrix.write(); delay(3000); } //************************************* delay(10); //************************************* }
Выложл бы схему в протеусе но не пойму как сдесь выложить картинку ?
Вот если все работает, нахрена модернизировать али упрощать?
Впринципе все работает просто хотелось добавить может какието эфекты скролинга разного или еще чего))
Да и еще вопрос кто знает где посмотреть документацию на библиотеку Adafruit-GFX есть файл pdf с описанием но там не очень подробно все описывется, особенно с работой с шрифтами, хотел подставить свой шрифт но не пойму как это сделать?
давайте и схему пожайлусто :) genia.flora(сабачка) gmail.com
просто хотелось добавить может какието эфекты
Если добавишь что,будь добр,не забудь поделиться кодом. Хочется тоже чего то этогово,а мозгов не хватает!
Всем привет ! Разбираюсь с скролом в скетче:
хочю зделать с лева на право, пока не получается ((
Вот некоторые эфекты скролов
вот ещё
Попробовал скомпилировать скетч. Не компилируется,просит библиотеки. Encoder.h , MsTimer2.h нашел. Надо myButton.h , нашел Button.h ,переименовал в myButton.h ,не принимает,сплошные ошибки. И пока не дошла очередь до Max72xxPanel.h . Не можешь выложить свои,рабочие библиотеки?
Выложить могу все библиотеки но незнаю как сдесь в чате добавить архив ??? Могу скинуть на почту.
Есть и описание библиотек
Могу скинуть на почту.
Будь добр: tanin33@yandex.ru
И Мне Пожалуйста ! jkud2@yandex.ru
intom33 Ну вот,обещал сбросить на почту,и пропал!
hatul я скидывал тебе вот еще раз скинул, может адрес не коректно написал, проверь
intom33 Премного благодарен! Получил только одно,сегодняшнее отправление. На выходных буду разбираться. Я могу обращаться за помощью? Да,у меня нет энкодера.Будут часы работать без него?
Блин,что со шрифтом!? Как в том анекдоте" у всех вши как вши ,а у меня как танки"! И поменять не могу никак.
hatul Если шо пиши, а вместо энкодера можна подключить кнопки немного изменив код.
Моно и мне скинуть?? на rs_bk@bk.ru .... хочется повторить..
Можно и мне скинуь схемку и библиоеки getzz@mail.ru