Помогите вставить минус
- Войдите на сайт для отправки комментариев
Втр, 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 этого значка не нарисует. Но никто не запрещает сделать свой метод, который и то и другое выведет.