Aiuto termometro con display 7 segmenti

Ciao a tutti, sono nuovo del mondoArduino e sto cercando di creare un termometro con 3 display 7 segmenti. Ho trovato in rete questo circuito:

sto cercando di adattarlo alle mie esigenze e con questo codice riesco a leggere solo le prime due cifre

questo e il codice che sto usando

#include <math.h>

void setup() 
{
  pinMode(10, OUTPUT);  // Segment C, Pin 7
  pinMode(9, OUTPUT);  // Segment G, Pin 1
  pinMode(8, OUTPUT);  // Segment B, Pin 9
  pinMode(7, OUTPUT);  // Segment D, Pin 5
  pinMode(6, OUTPUT);  // Segment F, Pin 2
  pinMode(5, OUTPUT);  // Segment A, Pin 10
  pinMode(4, OUTPUT);  // Segment E, Pin 4
  pinMode(3, OUTPUT);  // Display 3 
  pinMode(2, OUTPUT);  // Display 2
  pinMode(1, OUTPUT);  // Display 1
}

void Zero() // A, B, C, D, E, F
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void One()  // B, C
{
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void Two() // A, B, D, E, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(10, LOW);  // Segment C
  digitalWrite(6, LOW);  // Segment F
}

void Three() // A, B, C, D, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(9, HIGH);  // Segment G  
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
}

void Four() // B, C, F, G
{
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
}

void Five() // A, C, D, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(8, LOW);  // Segment B
  digitalWrite(4, LOW);  // Segment E
}

void Six() // A, C, D, E, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(8, LOW);  // Segment B
}

void Seven() // A, B, C
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void Eight() // A, B, C, D, E, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
}

void Nine() // A, B, C, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
}

void Blank()
{
  digitalWrite(10, LOW);  // Segment C
  digitalWrite(9, LOW);  // Segment G
  digitalWrite(8, LOW);  // Segment B
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(4, LOW);  // Segment E
}

void displayDigit(int digit)
{
  if (digit == 0){
    Zero();
  }
  else if (digit == 1){
    One();
  }
  else if (digit == 2){
    Two();
  }
  else if (digit == 3){
    Three();
  }
  else if (digit == 4){
    Four();
  }
  else if (digit == 5){
    Five();
  }
  else if (digit == 6){
    Six();
  }
  else if (digit == 7){
    Seven();
  }
  else if (digit == 8){
    Eight();
  }
  else if (digit == 9){
    Nine();
  }
  else{
    Blank();
  }
}

double Thermistor(int RawADC){
  double Temp;
  // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
  Temp = Temp - 273.15; // Convert Kelvin to Celcius
  return Temp;
}

void loop()
{
  int count = 0;
  int displayLoop = 25;
  int digOne;
  int digTwo;
  int ThermistorInput = A0;
  int ThermistorValue = 0;
  double fTemp; // Temp in degrees Fahrenheit
  double temp;

  while(count < 10){
    // Read thermistor and determine temperature in degrees F
    temp = Thermistor(analogRead(ThermistorInput)); // Read thermistor value
    fTemp = (temp * 1.8) + 32 - 7; // Convert degrees C to F
    
    // Split two digit fTemp variable into individual digits to display
    digOne = fTemp / 10;  // Determine what to display for digit # 1
    digTwo = fTemp - digOne*10;  // Determine what to display for digit # 2

    // Alternate between displaying each digit for 10 mS 
    while (displayLoop > 0){
      digitalWrite(3, LOW);
      digitalWrite(2, HIGH);
      displayDigit(digOne);
      delay(10);

      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);
      displayDigit(digTwo);

      delay(10);
      displayLoop --;
    }
    displayLoop = 250;
  }
  count = 0;  // Reset counter */
}

C'e qualcuno che puo darmi una mano? con l'elettronica non ho grossi problemi ma con i codici abbastanza :disappointed_relieved:

Grazie

Ciaooo

Studiati attentamente il comportamento di "digiOne" e "digiTwo", sono le due cifre che stanno funzionando; ti basta creare allo stesso modo "digiThree" e "digiFour" ed è fatta :wink:

kuchy74:
Ciao a tutti, sono nuovo del mondoArduino e sto cercando di creare un termometro con 3 display 7 segmenti. Ho trovato in rete questo circuito:
Avventura Arduino: primi passi

sto cercando di adattarlo alle mie esigenze e con questo codice riesco a leggere solo le prime due cifre

questo e il codice che sto usando

#include <math.h>

void setup()
{
  pinMode(10, OUTPUT);  // Segment C, Pin 7
  pinMode(9, OUTPUT);  // Segment G, Pin 1
  pinMode(8, OUTPUT);  // Segment B, Pin 9
  pinMode(7, OUTPUT);  // Segment D, Pin 5
  pinMode(6, OUTPUT);  // Segment F, Pin 2
  pinMode(5, OUTPUT);  // Segment A, Pin 10
  pinMode(4, OUTPUT);  // Segment E, Pin 4
  pinMode(3, OUTPUT);  // Display 3
  pinMode(2, OUTPUT);  // Display 2
  pinMode(1, OUTPUT);  // Display 1
}

void Zero() // A, B, C, D, E, F
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void One()  // B, C
{
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void Two() // A, B, D, E, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(10, LOW);  // Segment C
  digitalWrite(6, LOW);  // Segment F
}

void Three() // A, B, C, D, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(9, HIGH);  // Segment G 
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
}

void Four() // B, C, F, G
{
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
}

void Five() // A, C, D, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(8, LOW);  // Segment B
  digitalWrite(4, LOW);  // Segment E
}

void Six() // A, C, D, E, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(8, LOW);  // Segment B
}

void Seven() // A, B, C
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(9, LOW);  // Segment G
}

void Eight() // A, B, C, D, E, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(7, HIGH);  // Segment D
  digitalWrite(4, HIGH);  // Segment E
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
}

void Nine() // A, B, C, F, G
{
  digitalWrite(5, HIGH);  // Segment A
  digitalWrite(8, HIGH);  // Segment B
  digitalWrite(10, HIGH);  // Segment C
  digitalWrite(6, HIGH);  // Segment F
  digitalWrite(9, HIGH);  // Segment G
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(4, LOW);  // Segment E
}

void Blank()
{
  digitalWrite(10, LOW);  // Segment C
  digitalWrite(9, LOW);  // Segment G
  digitalWrite(8, LOW);  // Segment B
  digitalWrite(7, LOW);  // Segment D
  digitalWrite(6, LOW);  // Segment F
  digitalWrite(5, LOW);  // Segment A
  digitalWrite(4, LOW);  // Segment E
}

void displayDigit(int digit)
{
  if (digit == 0){
    Zero();
  }
  else if (digit == 1){
    One();
  }
  else if (digit == 2){
    Two();
  }
  else if (digit == 3){
    Three();
  }
  else if (digit == 4){
    Four();
  }
  else if (digit == 5){
    Five();
  }
  else if (digit == 6){
    Six();
  }
  else if (digit == 7){
    Seven();
  }
  else if (digit == 8){
    Eight();
  }
  else if (digit == 9){
    Nine();
  }
  else{
    Blank();
  }
}

double Thermistor(int RawADC){
  double Temp;
  // See Thermistor - Wikipedia for explanation of formula
  Temp = log(((10240000/RawADC) - 10000));
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
  Temp = Temp - 273.15; // Convert Kelvin to Celcius
  return Temp;
}

void loop()
{
  int count = 0;
  int displayLoop = 25;
  int digOne;
  int digTwo;
  int ThermistorInput = A0;
  int ThermistorValue = 0;
  double fTemp; // Temp in degrees Fahrenheit
  double temp;

while(count < 10){
    // Read thermistor and determine temperature in degrees F
    temp = Thermistor(analogRead(ThermistorInput)); // Read thermistor value
    fTemp = (temp * 1.8) + 32 - 7; // Convert degrees C to F
   
    // Split two digit fTemp variable into individual digits to display
    digOne = fTemp / 10;  // Determine what to display for digit # 1
    digTwo = fTemp - digOne*10;  // Determine what to display for digit # 2

// Alternate between displaying each digit for 10 mS
    while (displayLoop > 0){
      digitalWrite(3, LOW);
      digitalWrite(2, HIGH);
      displayDigit(digOne);
      delay(10);

digitalWrite(3, HIGH);
      digitalWrite(2, LOW);
      displayDigit(digTwo);

delay(10);
      displayLoop --;
    }
    displayLoop = 250;
  }
  count = 0;  // Reset counter */
}




C'e qualcuno che puo darmi una mano? con l'elettronica non ho grossi problemi ma con i codici abbastanza :disappointed_relieved:

Grazie

Ciaooo

devi dare più informazioni, il display deve visualizzarti anche il punto decimale che scala ha il "termometro" ?

è un semplice misuratore ambientale? deve visualizzare temperature sottozero tipo -3 -11

che sonda c'è nel progetto ecc ecc,,

devi dare più informazioni, il display deve visualizzarti anche il punto decimale che scala ha il "termometro" ?

è un semplice misuratore ambientale? deve visualizzare temperature sottozero tipo -3 -11

che sonda c'è nel progetto ecc ecc,,

devo misurare la temperatura dell'aria che esce da un phon e il range di temperatura varia tra 150-250 gradi celsius.

come sensore sto usando un termistore ntc da 10k.

ciao e grazie

allora la cosa si semplifica molto perché di visualizzatori 7 segmenti a più cifre c'è ne fin troppi

devi solo "aggiustarti" la lettura dell'ntc mettendolo in serie a una resistenza da 10 k e prelevando la lettura tra la resistenza e ntc classico partitore di tensione

qui inizia il primo "inghippo" non penso che basti una formuletta per ricavare i gradi dalla tensione

lA strada più lunga (e sicuramente funzionante) e quello di affiancare la misura del partitore con un termometro serio e ti segni i volt in uscita in base alla temperatura del termometro
poi con una bella serie di if ti fai la variabile che visualizza la temperatura

oppure puoi tentare la funzione map