Skip to main content

Problems coding a 12 pin 7 segment display and grove temperature sensor with arduino uno

Hi I am trying to code my 12 pin 7 segment display to display the temperature from my grove temperature sensor. I am new to this and I have been struggling if anyone code help that would be muchly appreciated. I don't have a reputation over 10 so I can't put in images :( My temperature sensor is displaying its information in the serial monitor I want the temperature displayed with the 7 segment display. (Thats where I need help)

//Temperature Variables
//thermistor = value of the thermistor
int a;
float temperature;
int thermistor=3975;
float resistance;
boolean DigitOn = LOW;
boolean DigitOff = HIGH;
boolean SegOn=HIGH;
boolean SegOff=LOW;

int DigitPins[] = {2, 3, 4, 5};
int SegmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};

//N is for numbers and NxP is a number with a decimal point behind
int BLANK[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
int N0[]    = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW};
int N0P[]   = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, HIGH};
int N1[]    = {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW};
int N1P[]   = {LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH};
int N2[]    = {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, LOW};
int N2P[]   = {HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH};
int N3[]    = {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, LOW};
int N3P[]   = {HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, HIGH};
int N4[]    = {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW};
int N4P[]   = {LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, HIGH};
int N5[]    = {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
int N5P[]   = {HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, HIGH};
int N6[]    = {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int N6P[]   = {HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int N7[]    = {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW};
int N7P[]   = {HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, HIGH};
int N8[]    = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW};
int N8P[]   = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
int N9[]    = {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW};
int N9P[]   = {HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, HIGH};
int MIN[]   = {LOW, LOW, LOW, LOW, LOW, LOW, HIGH, LOW};
 
//Array of pointers for the 4 digits
int* lights[4];
 
//char array coming from the serial interface
//4 numbers or chars, 4 optional decimal points, 1 end-of-line char
char incoming[9] = {};
 
void setup() {
  Serial.begin(19200);
  for (byte digit=0;digit<4;digit++) {
    pinMode(DigitPins[digit], OUTPUT);
  }

  for (byte seg=0;seg<8;seg++) {
    pinMode(SegmentPins[seg], OUTPUT);
  }

  //initialize display with 1.234
  lights[0] = N7;
  lights[1] = N9P;
  lights[2] = N3;
  lights[3] = N4;
}
 
void loop() {

  //Temperature Sensor

    a=analogRead(5);

    resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor;

    temperature=1/(log(resistance/10000)/thermistor+1/298.15)-273.15;

//convert to temperature via datasheet&nbsp;;

    //delay(1000);

    Serial.print("Current temperature is ");

    Serial.println(temperature);

    //delay(500);
  
  //read the numbers and / or chars from the serial interface

  if (Serial.available() > 0) {

    int i = 0;

    //clear the array of char

    memset(incoming, 0, sizeof(incoming));

    while (Serial.available() > 0 && i < sizeof(incoming) - 1) {

      incoming[i] = Serial.read();

      i++;

      delay(3);

    }

    Serial.println(incoming);
     
    //show the input values

    for (int y = 0; y < 4; y++) {

      Serial.print(y);

      Serial.print(": ");

      for (int z = 0; z < 8; z++) {

        Serial.print(lights[y][z]);

      }

      Serial.println("");

    }

  }

      //end if, i.e. reading from serial interface
 
      //This part of the code is from the library SevSeg by Dean Reading

  for (byte seg=0;seg<8;seg++) {

        //Turn the relevant segment on

    digitalWrite(SegmentPins[seg],SegOn);
 
    //For each digit, turn relevant digits on

    for (byte digit=0;digit<4;digit++){

      if (lights[digit][seg]==1) {

        digitalWrite(DigitPins[digit],DigitOn);

      }

      //delay(200); //Uncomment this to see it in slow motion

    }

    //Turn all digits off

    for (byte digit=0;digit<4;digit++){

      digitalWrite(DigitPins[digit],DigitOff);

    }
 
    //Turn the relevant segment off

    digitalWrite(SegmentPins[seg],SegOff);

  } 

    //end of for

}