Спасибо большое Вам за помощь. На одном из форумов помогли сделать выравнивание по правому краю (с миру по нитке, голому рубаха
)
Но вот еще чуть чуть осталось. Добавить °C и поставить + при положительных температурах.
Как будет время у Вас посмотрите пожалуйста.
Вот код
Код: Выделить всё
#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 = 3; // Яркость матрицы от 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); // темп в стринг 1 датчика temp = String(sensors_1.getTempCByIndex(0) - tempOffset, 1)+"";
}
else{
temp = String(sensors_2.getTempCByIndex(0) - tempOffset, 1); // темп в стринг 2 датчика
}
matrix.fillScreen(LOW);
int y = (matrix.height() - 6) / 2; // Центрируем текст по Вертикали
byte tempLength = temp.length();
byte curSymbol = 0;
if (tempLength == 5) {
matrix.drawChar( 32-5-5-5-6-6, y, temp[0], HIGH, LOW, 1);
curSymbol = 1;
tempLength--;
}
if (tempLength == 4) {
matrix.drawChar( 32-5-5-5-6, y, temp[curSymbol], HIGH, LOW, 1);
curSymbol++;
tempLength--;
}
matrix.drawChar( 32-5-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(); // Вывод на дисплей
}