const float ADC_VREF_V = 5.0;
const int ADC_RESOLUTION = 4095;
const int LM35 = 15;
const int ledPin1 = 23;
const int ledPin2 = 22;
// Define the segments for each digit
const byte SEG_A = 21;
const byte SEG_B = 19;
const byte SEG_C = 18;
const byte SEG_D = 5;
const byte SEG_E = 4;
const byte SEG_F = 2;
const byte SEG_G = 34;
const byte SEG_DP = 35; // Decimal point segment
// Define the pins for each digit
const byte DIGIT_1 = 32;
const byte DIGIT_2 = 33;
const byte DIGIT_3 = 25;
const byte DIGIT_4 = 26;
void setup() {
pinMode(LM35, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(SEG_A, OUTPUT);
pinMode(SEG_B, OUTPUT);
pinMode(SEG_C, OUTPUT);
pinMode(SEG_D, OUTPUT);
pinMode(SEG_E, OUTPUT);
pinMode(SEG_F, OUTPUT);
pinMode(SEG_G, OUTPUT);
pinMode(SEG_DP, OUTPUT);
pinMode(DIGIT_1, OUTPUT);
pinMode(DIGIT_2, OUTPUT);
pinMode(DIGIT_3, OUTPUT);
pinMode(DIGIT_4, OUTPUT);
Serial.begin(115200);
}
void displayDigit(byte digit, bool dp) {
Serial.println(digit);
// Define the segments for each digit
digitalWrite(DIGIT_1, LOW);
digitalWrite(DIGIT_2, LOW);
digitalWrite(DIGIT_3, LOW);
digitalWrite(DIGIT_4, LOW);
// Switch case to set segments based on the digit value
switch (digit) {
case 0:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, HIGH);
break;
case 1:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 2:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, HIGH);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, LOW);
break;
case 3:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, LOW);
break;
case 4:
digitalWrite(SEG_A, HIGH);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 5:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 6:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, HIGH);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 7:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, HIGH);
digitalWrite(SEG_G, HIGH);
break;
case 8:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, LOW);
digitalWrite(SEG_E, LOW);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
case 9:
digitalWrite(SEG_A, LOW);
digitalWrite(SEG_B, LOW);
digitalWrite(SEG_C, LOW);
digitalWrite(SEG_D, HIGH);
digitalWrite(SEG_E, HIGH);
digitalWrite(SEG_F, LOW);
digitalWrite(SEG_G, LOW);
break;
default:
// Handle default case here (if needed)
break;
}
// Set decimal point segment
digitalWrite(SEG_DP, dp);
}
void loop() {
int ADC;
float temp;
ADC = analogRead(LM35);
float voltage = ADC * (ADC_VREF_V / ADC_RESOLUTION);
temp = voltage * 100.0;
Serial.print("Tension = ");
Serial.print(voltage);
Serial.println(" V");
Serial.print("Température = ");
Serial.print(temp);
Serial.println(" °C");
// Display temperature on the 7-segment display
displayTemperature(temp);
if (temp >= 25) {
digitalWrite(ledPin1, HIGH);
} else {
digitalWrite(ledPin1, LOW);
}
if (temp >= 30) {
digitalWrite(ledPin2, HIGH);
} else {
digitalWrite(ledPin2, LOW);
}
delay(3000);
}
void displayTemperature(float temp) {
// Extract digits from the temperature value
int digit1 = int(temp) / 10;
int digit2 = int(temp) % 10;
int digit3 = int(temp * 10) % 10;
int digit4 = int(temp * 100) % 10;
Serial.print(digit1);
// Display digits on the 7-segment display
digitalWrite(DIGIT_1, HIGH);
displayDigit(digit1, false);
digitalWrite(DIGIT_2, HIGH);
displayDigit(digit2, true);
digitalWrite(DIGIT_3, HIGH);
displayDigit(digit3, false);
digitalWrite(DIGIT_4, HIGH);
displayDigit(digit4, false);
}