//https://www.circuitbasics.com/arduino-7-segment-display-tutorial/
#include "SevSeg.h"
SevSeg sevseg;
int ThermistorPin = 0;
#define termres 10500 //Valor do termistor, no caso estamos utilizando um termistor de 10k
#define tempnominal 25 //Temperatura nominal do ntc utilizado, esse dado deve ser pesquisado no datasheet
//do ntc que você está utilizando
#define numsamples 20 //Número de amostras
#define beta 3400 //Valor do beta, esse valor varia conforme ntc, você deve verificar o datasheet
#define res 10000
int amostra[numsamples];
char testStrings[5];
#define PATTERN_CHANGE_TIME 100
unsigned long timer = millis() - PATTERN_CHANGE_TIME;
//----------------------------------------------------------------------
void setup() {
Serial.begin(115200);
byte numDigits = 4;
//byte digitPins[] = {10, 11, 12, 13};
//byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
// D1 D2 D3 D4
byte digitPins[] = {8, 9, 10, 2};
// A B C D E F G DP
byte segmentPins[] = {11, 13, 4, 6, 7, 12, 3, 5};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_ANODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
}
//----------------------------------------------------------------------
void loop() {
float media;
for (int i = 0; i < numsamples; i++) {
amostra[i] = analogRead(ThermistorPin);
// delay(1);
}
media = 0;
for (int i = 0; i < numsamples; i++) { //quantidade de amostras
media += amostra[i];
}
media /= numsamples;
media = 1023 / media - 1;
media = res / media;
float temperatura; //Faz o cálculo pela fórmula do Fator Beta
temperatura = media / termres; // (R/Ro)
temperatura = log(temperatura); // ln(R/Ro)
temperatura /= beta; // 1/B * ln(R/Ro)
temperatura += 1.0 / (tempnominal + 273.15); // + (1/To)
temperatura = 1.0 / temperatura; // Inverte o valor
temperatura -= 273.15; // Converte para Celsius
//temperatura = 2;
int convTemp = abs(int(temperatura * 10));
//convTemp = 900;
int dez = (convTemp / 100) + 48;
int unit = ((convTemp - (dez - 48) * 100) / 10) + 48;
byte point = 0b00101110;
int dec = ((convTemp - (dez - 48) * 100 ) - (unit - 48) * 10) + 48;
byte simbol = 0x63;
byte negative = 0x40;
/*Serial.print(temperatura);
Serial.print(" ");
Serial.print(convTemp);
Serial.print(" ");
Serial.print(dez);
Serial.print(" ");
Serial.print(unit);
Serial.print(" ");
Serial.println(dec);
Serial.println(" ");
*/
if (temperatura < 0) {
if (convTemp > 99) {
testStrings[0] = negative;
testStrings[1] = dez;
testStrings[2] = unit;
testStrings[3] = point;
testStrings[4] = dec;
sevseg.setSegmentsDigit(3, simbol);
}
else {
testStrings[0] = negative;
testStrings[1] = unit;
testStrings[2] = point;
testStrings[3] = dec;
sevseg.setSegmentsDigit(3, simbol);
}
}
else {
testStrings[0] = dez;
testStrings[1] = unit;
testStrings[2] = point;
testStrings[3] = dec;
sevseg.setSegmentsDigit(3, simbol);
if (dez == 48)
sevseg.setSegmentsDigit(0, 0x00);
}
if (millis() > (timer + PATTERN_CHANGE_TIME)) {
sevseg.setChars(testStrings);
timer = millis();
}
sevseg.refreshDisplay(); // Must run repeatedly
}