#include <Wire.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 датчик, подставляем свой код
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 = 5 + spacer; // Регулируем расстояние между символами
uint8_t refresh=0;
const uint8_t pinCS = 10; // Подключение пина CS
uint8_t numberOfHorizontalDisplays = 4; // Количество светодиодных матриц по Горизонтали
uint8_t numberOfVerticalDisplays = 1; // Количество светодиодных матриц по Вертикали
String temp; // температура
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
OneWire oneWire_1(DS18B20_1);
OneWire oneWire_2(DS18B20_2);
DallasTemperature sensors_1(&oneWire_1);
DallasTemperature sensors_2(&oneWire_2);
byte brightness = 5; // Яркость матрицы от 0 до 15
// ===================================================================================================================================
void setup(void) {
Serial.begin( 9600 );
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(0, 1); // 1 матрица
matrix.setRotation(1, 1); // 2 матрица
matrix.setRotation(2, 1); // 3 матрица
matrix.setRotation(3, 1); // 4 матрица
}
// =======================================================================
void loop(void)
{
DisplayTime();
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)
{
temp = String(sensors_1.getTempCByIndex(0) - tempOffset, 1)+"C"; // темп в стринг 1 датчика
}
else{
temp = String(sensors_2.getTempCByIndex(0) - tempOffset, 1)+"C"; // темп в стринг 2 датчика
}
matrix.fillScreen(LOW);
int y = (matrix.height() - 6) / 2; // Центрируем текст по Вертикали по нижнему краю. По верхнему краю делаем так (int y = (matrix.height() - 8) / 2;
byte tempLength = temp.length();
byte curSymbol = 0;
if (tempLength == 6) {
matrix.drawChar( 32-4-4-5-6-6-6, y, temp[0], HIGH, LOW, 1);
curSymbol = 1;
tempLength--;
}
if (tempLength == 5) { //
if (temp[0] !='-' && curSymbol == 0) matrix.drawChar( 32-5-5-4-5-6-6, y, '+', HIGH, LOW, 1);
matrix.drawChar( 32-5-5-4-5-6, y, temp[curSymbol], HIGH, LOW, 1); //
curSymbol++;
}
matrix.drawChar( 32-5-5-4-5, y, temp[curSymbol++], HIGH, LOW, 1); //
if (curSymbol == 0) matrix.drawChar( 32-5-5-4-5-6, y, '+', HIGH, LOW, 1); // добавляем плюс в предыдущей позиции
matrix.drawChar( 32-4-5-5, y, temp[curSymbol++], HIGH, LOW, 1);
matrix.drawChar( 32-5-5, y, temp[curSymbol++], HIGH, LOW, 1);
matrix.drawChar( 32-5, y, temp[curSymbol++], HIGH, LOW, 1);
matrix.write(); // Вывод на дисплей
}