светодиодная матрица на MAX7219 базе Max72xxPanel создаем бегущую строку с помощью переменных.

герой
Offline
Зарегистрирован: 24.02.2019

сбрось код за ранее благодарю

герой
Offline
Зарегистрирован: 24.02.2019

Toropizhka пишет:

Ворота пишет:

герой пишет:

кто поскажет как увеличить время задержки показа информацыи и как добавить нули к чясам чтоб было 05:03 и дата 07/03/2019

Никто.

В "чясах" время задержки показа "информацыи" никак "ниувиличиваецца".

От проекта зависит. Я начинал с таймера, потом бегущая строка. Теперь время показывает постоянно, а бегущей строкой выводятся календарь и погода через промежутки времени, заданные в программе. При желании код сброшу сюда...  код сбрось

Ardo23
Offline
Зарегистрирован: 29.12.2016

Toropizhka пишет:

Подскажите мигающие точки, пожалуйста.

Делал в программе флпрог. Добрые люди сделали блок там же можно менять яркость модулей, скорость строки, выбирать колличество модулей.  

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

герой пишет:

сбрось код за ранее благодарю

Сейчас код такой. Постоянно переписываю, дорабатываю. Русификацию убрал из экономии памяти. Библиотеки лучше брат в оригинале, я свои немного подкорректировал...

// Библиотеки
   #include <SPI.h>
   #include <Wire.h>
   #include <Adafruit_GFX.h>
   #include <Max72xxPanel.h>
   #include <iarduino_DHT.h>
   #include <iarduino_RTC.h>

// Подключение пьезоэлемента: Black - GND, Red - 5
   int soundPin = 5; 
// Подключение матриц, количество по вертикали и горизонтали: CLK - 13, DIN - 11, CS - 9
   int pinCS = 9;
   int numberOfHorizontalDisplays = 1;
   int numberOfVerticalDisplays = 6;
   Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
// Подключение DHT22 на улице и в комнате: PIN1 - +5V, PIN2 - 2(3), PIN4 - GND
   iarduino_DHT sensor1(2);
   iarduino_DHT sensor2(3);
// Подключение DS1307: SDA - A4, SCL - A5
// Объект time для работы с модулем RTC на базе чипа DS1307, аппаратная шина I2C:
   iarduino_RTC time(RTC_DS1307);
// Символ часов
   const byte data[8]={B00111000,B01010100,B10010010,B11110010,B10000010,B01000100,B00111000,B00000000};

   String clocks;
   String weather;
   String calendar;
//====================================================================================
void setup(void)
// Назначение PIN5 режима работы "Выход":
{  pinMode(soundPin, OUTPUT);
// Инициализация модуля RTC DS1307:
   time.begin();
// Яркость матриц (от 0 до 15) и направление текста (1 - 90 гр., 2 - 180 гр., 3 - 270 гр.):
   matrix.setIntensity(1);
   matrix.setRotation(3);
   delay(60000);   
}
//====================================================================================
void loop(void)
{  DisplayData();
   DisplayTime();
// Чтение показаний датчиков DHT22:
   switch(sensor1.read()){}
   switch(sensor2.read()){}
// Звуковое сопровождение каждого часа c 06:00 до 22:00 на 0-й секунде в течение 5-и секунд:
   if(((time.Hours==6 || time.Hours==7 || time.Hours==8 || time.Hours==9 || time.Hours==10 || time.Hours==11 || time.Hours==12 || time.Hours==13 || time.Hours==14 || time.Hours==15 || time.Hours==16 || time.Hours==17 || time.Hours==18 || time.Hours==19 || time.Hours==20 || time.Hours==21 || time.Hours==22) && time.minutes==0) && time.seconds==0) {
   analogWrite(soundPin, 255); delay(500); analogWrite(soundPin, 0); delay(500);
   analogWrite(soundPin, 255); delay(500); analogWrite(soundPin, 0); delay(500);
   analogWrite(soundPin, 255); delay(500); analogWrite(soundPin, 0); delay(500);
   analogWrite(soundPin, 255); delay(500); analogWrite(soundPin, 0); delay(500);
   analogWrite(soundPin, 255); delay(500); analogWrite(soundPin, 0); delay(500);}
// Запуск бегущей строки каждые 5 минут на 0-й секунде и запись показаний температуры/влажности в бегущую строку:
   if((time.minutes==4 || time.minutes==9 || time.minutes==14 || time.minutes==19 || time.minutes==24 || time.minutes==29 || time.minutes==34 || time.minutes==39 || time.minutes==44 || time.minutes==49 || time.minutes==54) && time.seconds==0)
   {ScrollText(weather);}
// Запуск бегущей строки каждые 15 минут на 0-й секунде и запись календаря в бегущую строку:
   if((time.minutes==5 || time.minutes==15 || time.minutes==30 || time.minutes==45) && time.seconds==0)
   {ScrollText(calendar);}
}
//====================================================================================
void ScrollText (String text)
  // Скорость бегущей строки:
{  int wait = 50;
// Центровка данных по вертикали:
   int y = (matrix.height() - 8) / 2;
// Расстояние между буквами (в точках) и размер шрифта (прописные буквы, в точках):
   int spacer = 1;
   int width = 5 + spacer;
   int refresh=0;
   for (int i = 0 ; i < width * text.length() + matrix.width() - 1 - spacer; i++)
   {if (refresh==1) i=0; refresh=0;
   matrix.fillScreen(LOW);
   int letter = i / width;
   int x = (matrix.width() - 1) - i % width;
   while (x + width - spacer >= 0 && letter >= 0)
   {if (letter < text.length())
   {matrix.drawChar(x, y, text[letter], HIGH, LOW, 1);}
   letter--; x -= width;}
// Вывод бегущей строки на дисплей:
   matrix.write();
   delay(wait);}
}
//====================================================================================
void DisplayData()
// Формирование показаний календаря  в бегущей строке:
{  calendar = ((String)+time.gettime("d.m.Y"));
// Формирование показаний температуры и влажности в бегущей строке:
   weather  = ((String)+"{ "+sensor1.tem+"'C" +"   } "+sensor1.hum+"%"+"   | "+sensor2.tem+"'C" +"   } "+sensor2.hum+"%");
}
//====================================================================================
void DisplayTime()
// Очистка матрицы   
{  matrix.fillScreen(LOW);
// Формирование символа часов и вывод на дисплей:
   for ( int y = 0; y < 8; y++ ) {for ( int x = 0; x < 8; x++ ) {matrix.drawPixel(x, y, data[y] & (1<<x));}}
// Получение и вывод текущего времени:
   clocks = String(time.gettime("Hi"));
// Положение текущего времени по горизонтали:
   int xh = 19;
   int xi = 36;
// Центровка текущего времени по вертикали:
   int y = (matrix.height() - 8) / 2;
// Отображение двоеточия между часами и минутами по центру:
   matrix.drawChar(31, y, (String(":"))[0], HIGH, LOW, 1);
// Формирование показаний текущего времени и вывод на дисплей:
   matrix.drawChar(xh, y, clocks[0], HIGH, LOW, 1);
   matrix.drawChar(xh+6, y, clocks[1], HIGH, LOW, 1);
   matrix.drawChar(xi, y, clocks[2], HIGH, LOW, 1);
   matrix.drawChar(xi+6, y, clocks[3], HIGH, LOW, 1);
   matrix.write();
}

 

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Ardo23 пишет:

Делал в программе флпрог. Добрые люди сделали блок там же можно менять яркость модулей, скорость строки, выбирать колличество модулей.  

Наслышан, читал, но пока не добрался. В режиме таймера нормально точки мигали. Сечас с часиками и "стрингами" намаялся, последние и правда память сильно вешают, датчики иногда зависают и приходится перезагрузку делать...

герой
Offline
Зарегистрирован: 24.02.2019

благодарю работает отлично такой вопрос как сдвинуть чясы в лево и добавить секунды и (температура в доме **** влажность ***  на уличе ****  дата ****  и на Русском 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

герой пишет:

благодарю работает отлично такой вопрос как сдвинуть чясы в лево и добавить секунды и (температура в доме **** влажность ***  на уличе ****  дата ****  и на Русском 

Тебе уже двое говорили (я - третий): "чясы" на русском не бывают!!!

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

герой пишет:

благодарю работает отлично такой вопрос как сдвинуть чясы в лево и добавить секунды и (температура в доме **** влажность ***  на уличе ****  дата ****  и на Русском 

Вы вообще удивительный человек! Здесь достаточно почитать тему и "чясики" русскими станут и секунды побегут. А писать для Вас лично коды с Вашими хотелками времени нет, да и желания...

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Ardo23 пишет:

Делал в программе флпрог. Добрые люди сделали блок там же можно менять яркость модулей, скорость строки, выбирать колличество модулей.  

"Покурил" Тырнет и нашёл решение: объявил переменные и заменил строку с двоеточием на мигающие точки

int h, i, s

h = time.Hours();
i = time.minutes();
s = time.seconds();

if(s & 1){matrix.drawChar(31, y, (String(":"))[0], HIGH, LOW, 1);}
else{matrix.drawChar(31, y, (String(" "))[0], HIGH, LOW, 1);}

Двоеточие теперь мигает между часами и минутами ;)

Ardo23
Offline
Зарегистрирован: 29.12.2016

Toropizhka пишет:

"Покурил" Тырнет и нашёл решение

отлично. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Toropizhka пишет:

Двоеточие теперь мигает между часами и минутами ;)

Так в том-то и дело. А ТС между "чясами" надо! Ты вот такой найди. Это-то и дурак найдёт.

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Ardo23 пишет:

отлично. 

Плучил долгожданные SD-приколюшки. Сижу изучаю как перенести часть кода на SD-карту. Попутно решил проблему DS1307. Наслышан про "дезертирство" сего модуля, у меня за неделю время до 12 мин. убегало вперёд. "Залил" точное время, через сутки проверю и выставлю корректировку. Каки прежде, "курю" Тырнет, поскольку углубляться в Datasheet времени физически не хватает...

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Ворота пишет:

Так в том-то и дело. А ТС между "чясами" надо! Ты вот такой найди. Это-то и дурак найдёт.

1. Ху из ТС? Уточните вопрос, плиз...

2. Если дурак нашёл, что же Вы спрашиваете? Сдвинуть влево "чясики" много ума не надо: добавить в коде отоброжение секунд и указать координаты. В #79 у меня было 8 матриц и там был таймер, а в #104 уже DS1307 и 6 матриц. Так что как ни крути, в моём коде двигай не двигай, а секунды просто физически не влезут...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Toropizhka, Вы не поняли шутки. Это был троллинг "героя"

"герой" просил сделать "чясы", а Вы нашли про "часы". Т.е. не выполнили его просьбу! Слабо оказалось! А про "часы" - и дурак найдёт :)))))

А ТС - это "топикстартер", но в данном случае это "герой", влезший в чужой топик.

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

ЕвгенийП пишет:

Toropizhka, Вы не поняли шутки. Это был троллинг "героя"

Спасибо, понял. Ответил тем же, наперёд уже зная ещё кучу вопросов, суть которых сведётся к одному - "Сбрось код, заранее благодарю!". Иногда постебаться полезно)...

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Действующий "продукт": https://yadi.sk/i/pUokPyuRTwQVbA

"Зонтик" и "капелька" - датчик DHT22 за балконом.

"Домик" и "капелька" - датчик DHT22 в комнате.

Символы переписывал при помощи сервиса http://xantorohara.github.io/led-matrix-editor/#0000000000000000, т.е. заменил в файле c:\Program Files\ArduinoIDE\libraries\Adafruit_GFX\glcdfont.c ненужные символы своими...

b707
Offline
Зарегистрирован: 26.05.2017

Toropizhka пишет:

Плучил долгожданные SD-приколюшки. Сижу изучаю как перенести часть кода на SD-карту.

перенести часть программного кода на СД-карту? - невозможно

Ardo23
Offline
Зарегистрирован: 29.12.2016

Toropizhka пишет:

Действующий "продукт": https://yadi.sk/i/pUokPyuRTwQVbA

Красота. Есть ребята делают такие строчки только на ESP8266 c WIFI. Время , погоду, температуру - можно не подключать свои датчики, а брать из сети+ делать настройки с телефона. Время всегда будет точное, но при наличии интернета.  Сейчас начали корпуса делать из фанеры, орг.стекла и кусочка солнцезащитной пленки- смотрится очень необычно.  https://youtu.be/X2Y_R-KwVOo  Можно на ЕСПшку подключить свои датчики - домашние , которых нет в сети - отправлять их в Народный монитор, а уже другой ЕСП брать их из сети и выводить на строку.  Появляется опция- узнай показания своих датчиков в любой точке мира. 

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

Ardo23 пишет:

Красота. Есть ребята делают такие строчки только на ESP8266 c WIFI... 

Спасибо. Читал, смотрел, понравилось. Народный мониторинг стал одной из причин увлечения проектом в принципе. Единственное, что смущало - брать погоду из Сети. У нас в разных районах города может быть разная погода, а данные Сети вообще привязаны к областному центру в 30-и километрах. Поэтому хотелось иметь свои данные. Передать в Народный мониторинг - да хорошая идея, брать погоду из Сети - для меня идея не интересная. Кроме того, есть своя "хотелка" и даже с учётом извечного вопроса "Где взять память?" отказываться от неё не собираюсь. Ответов на разных форумах было масса, от "напоминалка лишняя" до "купи себе метеостанцию и не лечи мозги". У меня есть своя "хотелка" и интерес собрать своими руками, а не убирать лишнее или вовсе покупать готовый продукт. Да, долго. Да, дорого. Но у каждого свои тараканы в голове, мои меня вполне устраивают...

arduinec
Offline
Зарегистрирован: 01.09.2015

Toropizhka пишет:
Сечас с часиками и "стрингами" намаялся, последние и правда память сильно вешают

Вместо String-строк можно использовать char-строки (пост #40): http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...

Toropizhka пишет:
Символы переписывал при помощи сервиса ... т.е. заменил в файле c:\Program Files\ArduinoIDE\libraries\Adafruit_GFX\glcdfont.c ненужные символы своими...

Редактирование символов описано в постах #27 и #31: http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

arduinec пишет:

Вместо String-строк можно использовать char-строки (пост #40): http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...

Редактирование символов описано в постах #27 и #31: http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...

Спасибо, как-то читал. Эта тема в общем мне хорошо помогла при русификации бегущей строки :)...

chekan216
Offline
Зарегистрирован: 02.07.2019

код не рабочий

Toropizhka
Toropizhka аватар
Offline
Зарегистрирован: 27.08.2018

chekan216 пишет:

код не рабочий

Какой код и что именно не работает?