Mrkněte ještě na úpravu níže. Ta by měla odstranit i to blikání. Dá se totiž nastavit neblokující provádění konverze dat teplotního senzoru viz níže v upraveném příkladu.
Kód: Vybrat vše
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
#include "SevSeg.h"
SevSeg sevseg;
const unsigned long eventInterval = 1000;
unsigned long previousTime = 0;
unsigned long currentTime = 0;
byte numDigits = 4;
byte digitPins[] = {A5, A4, A3, A2};
byte segmentPins[] = {2, 13, 6, 4, 3, 12, 7, 5};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
bool updateWithDelays = true;
bool leadingZeros = false;
bool disableDecPoint = false;
bool cekaniNaKonverzi = false;
float tempC;
void setup()
{
Serial.begin(9600);
sensor.begin();
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins,
resistorsOnSegments, updateWithDelays, leadingZeros,
disableDecPoint);
sevseg.setBrightness(90);
sensor.setResolution(11);
}
void loop()
{
currentTime = millis();
if (!cekaniNaKonverzi && (currentTime - previousTime) >= eventInterval) {
previousTime = currentTime;
// nastavit neblokující volání
sensor.setWaitForConversion(false);
// následující volání skončí hned bez čekání a konverze bude probíhat na pozadí
// na dokončení konverze se bude čekat bez blokování viz níže
sensor.requestTemperatures();
// nastavit příznak neblokujícího čekání na dokončení konverze dat senzoru na pozadí
cekaniNaKonverzi = true;
};
if (cekaniNaKonverzi) {
// neblokující dotaz zda konverze dat na pozadí již byla dokončena
if (sensor.isConversionComplete()) {
// konverze dat dokončena
cekaniNaKonverzi = false;
// teprve nyní načíst a zobrazit data
// a to by již mělo být rychlé bez bliknutí
tempC = sensor.getTempCByIndex(0);
Serial.println(tempC);
sevseg.setNumberF(tempC, 1);
};
};
sevseg.refreshDisplay();
}