Часы на трех матрицах 8x8 MAX7219

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#111 Дим » 18 февраля 2021, 16:33

Код: Выделить всё

#include <Wire.h>
//#include <Adafruit_BMP085.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
#include <DallasTemperature.h>
#include "IRremote.h"
IRrecv irrecv(A0);                            // указываем вывод, к которому подключен ИК приемник
decode_results results;
uint32_t Key1 0xFFA25D;                    // Определяем код кнопки ПДУ 1 датчик
uint32_t Key2 0xFFE21D;                    // Определяем код кнопки ПДУ 2 датчик

//Adafruit_BMP085 bmp;

uint8_t updCnt 0;
uint8_t dots 0;
long dotTime 0;
long clkTime 0;

const 
uint8_t DS18B20_1 8;                    // Указываем, к какому выводу подключен 1 датчик
const uint8_t DS18B20_2 7;                    // Указываем, к какому выводу подключен 2 датчик
long previousMillis 0;
uint8_t val=0;

uint8_t knopka 0;                            // если не нажата на ПДУ 0 ((показ первый датчик)), иначе 1 (показ второй датчик)
uint8_t spacer 2;
uint8_t width spacer;                   // Регулируем расстояние между символами
uint8_t refresh=0;
const 
uint8_t  pinCS 10;                    // Подключение пина CS
uint8_t numberOfHorizontalDisplays 3;       // Количество светодиодных матриц по Горизонтали
uint8_t numberOfVerticalDisplays 1;         // Количество светодиодных матриц по Вертикали
String clocks;                                // время (теперь темп)

Max72xxPanel matrix Max72xxPanel(pinCSnumberOfHorizontalDisplaysnumberOfVerticalDisplays);
OneWire oneWire_1(DS18B20_1); 
OneWire oneWire_2(DS18B20_2);                 
DallasTemperature sensors_1(&oneWire_1);
DallasTemperature sensors_2(&oneWire_2);
byte brightness 2;                         // Яркость матрицы от 0 до 15
// ===================================================================================================================================
void setup(void) {
  
Serial.begin9600 );                       // Инициируем передачу данных в монитор последовательного порта
  
irrecv.enableIRIn();                        // запускаем прием ИК приемника

  
sensors_1.begin();
  
sensors_2.begin();
  
matrix.setIntensity(brightness);            // Яркость матрицы от 0 до 15
  
matrix.setRotation(matrix.getRotation()+2); // 1 - 90  2 - 180   3 - 270 угол поворота
                                   // начальные координаты матриц 8*8
  
matrix.setRotation(01);        // 1 матрица
  
matrix.setRotation(11);        // 2 матрица
  
matrix.setRotation(21);        // 3 матрица
}
// =======================================================================
void loop(void)
{   
  
DisplayTime();
/*  if(updCnt<=0)
  {                                                               // каждые 10 циклов получаем данные времени и погоды
    updCnt = 1;
    DisplayTime();
    clkTime = millis();
  }
  if(millis()-dotTime > 500)
  {
    dotTime = millis();
    dots = !dots;
  }*/
  
if ( irrecv.decode( &results ))
  {                              
// если данные с ПДУ пришли 
//==================== для двух кнопок начало кода =============         
    
if (results.value == Key1)                                     // если нажата кнопка 1
      
{knopka 1;}                                                // 1 датчик
    
if (results.value == Key2)                                     // если нажата кнопка 2
      
{knopka 0;}                                                // 2 датчик
//==================== для двух кнопок конец кода =============       
 
    
irrecv.resume();   // принимаем следующую команду
  
}
}

void DisplayTime()
{
float tempOffset 1.0;               //поправка уличного датчика
  
sensors_1.requestTemperatures();             // Считываем показания температуры 1 датчика
  
sensors_2.requestTemperatures();             // Считываем показания температуры 2 датчика
  
if(knopka == 0)
  {
  
clocks String(sensors_1.getTempCByIndex(0) - tempOffset1)+" ";  // темп в стринг 1 датчика
  
}
  else{
  
clocks String(sensors_2.getTempCByIndex(0) - tempOffset1)+" ";  // темп в стринг 2 датчика 
  
}
 
  
matrix.fillScreen(LOW);
  
int y = (matrix.height() - 8) / 2;         // Центрируем текст по Вертикали
 
  
int xh 2;
  
int xm 19;
  
matrix.drawChar(xhyclocks[0], HIGHLOW1);
  
matrix.drawChar(xh+6yclocks[1], HIGHLOW1);
  
matrix.drawChar(xm-6yclocks[2], HIGHLOW1);
  
matrix.drawChar(xmyclocks[3], HIGHLOW1);
  
matrix.write();                                     // Вывод на дисплей
[center]i love you [s]mxIni[/s] Mysql[/center]


S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#112 S_Sergey_G » 18 февраля 2021, 20:47

Спасибо завтра попробую.

S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#113 S_Sergey_G » 19 февраля 2021, 11:08

Огромное спасибо! Все прекрасно работает. Идеальный (почти) для меня термометр.
"Почти", хотелось в три матрицы вместиться с десятыми. Здесь uint8_t width = 5 + spacer; менял 5 на разные числа, ни чего не происходит. Наверное нужна еще какая то команда.

Arduino
Сержант
Сержант
Аватара
Arduino
Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#114 Arduino » 19 февраля 2021, 11:36

Вот тут экспериментируй

Код: Выделить всё

 int xh 2;
  
int xm 19;
  
matrix.drawChar(xhyclocks[0], HIGHLOW1);
  
matrix.drawChar(xh+6yclocks[1], HIGHLOW1);
  
matrix.drawChar(xm-6yclocks[2], HIGHLOW1);
  
matrix.drawChar(xmyclocks[3], HIGHLOW1); 

S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#115 S_Sergey_G » 19 февраля 2021, 12:21

Понял. Спасибо.

S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#116 S_Sergey_G » 19 февраля 2021, 18:08

Спасибо, наигрался передвижением цифр вдоль и поперек. Остались вопросы. Я поставил 4 матрице, соответственно поправил в коде "количество матриц" и добавил в "matrix.setRotation" четвертую матрицу. Подогнал цифры. Но было хорошо до 10°С, ниже 10°C все сдвигается в лево. Куда посмотреть, что бы строка форматировалась по правому краю? Сейчас так [9.5 ] а хотелось бы [ 9.5] .

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#117 Дим » 19 февраля 2021, 20:06

S_Sergey_G писал(а):форматировалась по правому краю?
Та пёс её знает))
[center]i love you [s]mxIni[/s] Mysql[/center]

S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#118 S_Sergey_G » 19 февраля 2021, 20:42

А вставить символ °C ? Все таки хочу привести к виду как в "моем" скетче, там как то все гармонично.

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#119 Дим » 19 февраля 2021, 20:55

S_Sergey_G писал(а):символ °C

Код: Выделить всё

clocks String(sensors_1.getTempCByIndex(0) - tempOffset1)+" °C ";  // темп в стринг 1 датчика 

наверно отобразится )
[center]i love you [s]mxIni[/s] Mysql[/center]

S_Sergey_G
Ст. сержант
Ст. сержант
Аватара
S_Sergey_G
Ст. сержант
Ст. сержант
Сообщения: 92
Зарегистрирован: 28 января 2021
С нами: 3 года 2 месяца

#120 S_Sergey_G » 19 февраля 2021, 21:58

Не отобразилось (


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей