Thermister and 7 segment display

1. Connect the thermister with a 10k resistor. One side connects to 5V, one side connects to GND.



2. If  you have a common anode 7 segment display module, refer to the following diagram.



3. First, test your temperature sensor and display it using the Serial Monitor. code

int tempPin = 0;
void setup()
{
  Serial.begin(9600);
  pinMode(tempPin, INPUT);
}

void loop()
{
  int tempReading = analogRead(tempPin);
  double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );       //  Temp Kelvin
  float tempC = tempK - 273.15;            // Convert Kelvin to Celcius
  delay(500);
  Serial.println(tempC);
}



4. Connect your 74595 chip and display module to the temperature sensor and modify this code to display temperature.

const int digitPins[4] = {
  4,5,6,7};                 //4 common anode pins of the display
const int clockPin = 11;    //74HC595 Pin 11
const int latchPin = 12;    //74HC595 Pin 12
const int dataPin = 13;     //74HC595 Pin 14
const byte digit[10] =      //seven segment digits in bits
{// the following code is for common cathode but the following code inversed it so it becomes common anode.
  B00111111, //0
  B00000110, //1
  B01011011, //2
  B01001111, //3
  B01100110, //4
  B01101101, //5
  B01111101, //6
  B00000111, //7
  B01111111, //8
  B01101111  //9
};
int digitBuffer[4] = {
  0};
int digitScan = 0, flag=0,  soft_scaler = 0;
int tempPin = 0;

void setup()
{
//  Serial.begin(9600);
  for(int i=0;i<4;i++)
  {
    pinMode(digitPins[i],OUTPUT); // set up pinMode in a faster way
  }
  pinMode(tempPin, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
}

void updateDisp(){
  for(byte j=0; j<4; j++) 
    digitalWrite(digitPins[j], LOW); // when there is only one line after the 'for' statement, it doesn't need a {}
 
  digitalWrite(latchPin, LOW); 
  shiftOut(dataPin, clockPin, MSBFIRST, B11111111); // clear all display first
  digitalWrite(latchPin, HIGH);
 
  delayMicroseconds(100);
  digitalWrite(digitPins[digitScan], HIGH);
 
  digitalWrite(latchPin, LOW); 
  if(digitScan==2)
  // the inverse '~' is to fit it for the common anode application.
    shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B10000000)); //print the decimal point on the 3rd digit
  else
    shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);
 
  digitalWrite(latchPin, HIGH);
  digitScan++;
  if(digitScan>3) digitScan=0;
}

void loop()
{
  int tempReading = analogRead(tempPin);
  double tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
  tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK )) * tempK );       //  Temp Kelvin
  float tempC = tempK - 273.15;            // Convert Kelvin to Celcius
  digitBuffer[3] = int(tempC)/1000;
  digitBuffer[2] = (int(tempC)%1000)/100;
  digitBuffer[1] = (int(tempC)%100)/10;
  digitBuffer[0] = (int(tempC)%100)%10;
  updateDisp();
  delay(2);
//  Serial.println(tempC);
}