Код: Выделить всё
#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 = 5 + spacer; // Регулируем расстояние между символами
uint8_t refresh=0;
const uint8_t pinCS = 10; // Подключение пина CS
uint8_t numberOfHorizontalDisplays = 3; // Количество светодиодных матриц по Горизонтали
uint8_t numberOfVerticalDisplays = 1; // Количество светодиодных матриц по Вертикали
String clocks; // время (теперь темп)
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 = 2; // Яркость матрицы от 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 матрица
}
// =======================================================================
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) - tempOffset, 1)+" "; // темп в стринг 1 датчика
}
else{
clocks = String(sensors_2.getTempCByIndex(0) - tempOffset, 1)+" "; // темп в стринг 2 датчика
}
matrix.fillScreen(LOW);
int y = (matrix.height() - 8) / 2; // Центрируем текст по Вертикали
int xh = 2;
int xm = 19;
matrix.drawChar(xh, y, clocks[0], HIGH, LOW, 1);
matrix.drawChar(xh+6, y, clocks[1], HIGH, LOW, 1);
matrix.drawChar(xm-6, y, clocks[2], HIGH, LOW, 1);
matrix.drawChar(xm, y, clocks[3], HIGH, LOW, 1);
matrix.write(); // Вывод на дисплей
}