Помогите вставить минус
- Войдите на сайт для отправки комментариев
Втр, 01/01/2019 - 22:10
Приветствую!
Всех с Новым годом!
Разаработал для своего гаража проект часов с 2- мя термодатчиками и выводом показаний на тм1637.
Помогите "допилить" код, чтобы при отрицательных температурах на первом сегменте отображался минус.
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 // DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xFF, 0xE, 0xFE, 0x63, 0x15, 0x2, 0x60 };
DeviceAddress outsideThermometer = { 0x28, 0xFF, 0x92, 0xC3, 0x63, 0x15, 0x3, 0x7D };
#include "GyverTM1637.h"
#define CLK 3 // номер пина семисегмента TM1637
#define DIO 4 // номер пина семисегмента TM1637
GyverTM1637 disp(CLK, DIO);
#include <Wire.h> // must be included here so that Arduino library object file references work
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
uint8_t disp_mode = 0;
byte m, h, s;
boolean flag;
uint32_t Now;
void setup ()
{
Serial.begin(57600);
sensors.begin();
time.begin();
disp.clear();
disp.brightness(7); // яркость, 0 - 7 (минимум - максимум)
delay(50);
runningText(); // приветственная бегущая строка
oneWire.reset_search();
if (!oneWire.search(insideThermometer)) Serial.println("Не найден внутренний датчик");
if (!oneWire.search(outsideThermometer)) Serial.println("Не найден внешний датчик");
}
void loop ()
{
time.gettime();
Clock();
TempIn();
delay(2000);
TempOut();
delay(2000);
}
/*********************** Отображение времени**********************/
void Clock(){
h=time.Hours;
m=time.minutes;
uint32_t tmr;
Now = millis();
while (millis () - Now < 3000) { // показываем время 3 секунды
if (millis() - tmr > 500) { // каждые полсекунды
tmr = millis();
flag = !flag;
disp.point(flag); } // выкл/выкл точки
disp.displayClock(h, m);} // выводим время функцией часов
Serial.print(time.Hours); Serial.print(":"); // Вывод часов
Serial.println(time.minutes); // Вывод минут
}
/*************** Отображение температуры внутри******************/
void TempIn(){
sensors.requestTemperatures();
int tempIn;
tempIn = sensors.getTempC(insideThermometer);
disp.clear();
disp.point(false);
byte label_in[] = {_1, _n, _t, _empty, _empty,};
disp.runningString(label_in, sizeof(label_in), 200);
disp.display(0,tempIn/10);
disp.display(1,tempIn%10);
disp.displayByte(3,0x63);
Serial.print("temp In: ");
Serial.println(tempIn);
}
/************* Отображение температуры снаружи************/
void TempOut(){
sensors.requestTemperatures();
int tempOut;
tempOut = sensors.getTempC(outsideThermometer);
disp.clear();
disp.point(false);
byte label_out[] = {_O, _U, _t, _empty, _empty,};
disp.runningString(label_out, sizeof(label_out), 200);
disp.displayByte(0,0x40); // знак минус для проверки
disp.display(1,tempOut/10);
disp.display(2,tempOut%10);
disp.displayByte(3,0x63);
Serial.print("temp Out: ");
Serial.println(tempOut);
}
/***************Приветственная бегущая строка***************/
void runningText() {
byte welcome_banner[] = {_H, _E, _L, _L, _O, _empty,_empty,_S,_A,_S,_H,_A,};
disp.runningString(welcome_banner, sizeof(welcome_banner), 200); // 200 это время в миллисекундах!
}
Используй метод:
Используй метод:
Простите, в каком месте скетча нужно это использовать?
В том месте где надо вывести значение с "минусом". В вашем случае там, где температура выводится.
В том месте где надо вывести значение с "минусом". В вашем случае там, где температура выводится.
Боюсь что с этой библиотекой так не получится.
Боюсь что с этой библиотекой так не получится.
А чего бояться-то? Взяли и попробовали! Вам нужно вывести отрицательное число, предложенный метод предназначен в том числе для этого (о чём в комментарии к нему написано!). Нюанс правда есть. У Вас сейчас после цифр выводится что-то обозначающее градусы, displayInt этого значка не нарисует. Но никто не запрещает сделать свой метод, который и то и другое выведет.