// Definisi pin segment dan digit
const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8}; // Pin untuk segmen a, b, c, d, e, f, g
const int digitPins[4] = {10, 11, 12, 13}; // Pin untuk digit d1, d2, d3, d4
int lm35Pin = A0; // Pin untuk sensor suhu LM35
// Array pola bit untuk angka 0-9 (0-9 di seven-segment common cathode)
const byte digitPatterns[10] = {
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01101111 // 9
};
void setup() {
// Inisialisasi pin segment sebagai output
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Inisialisasi pin digit sebagai output
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
}
pinMode(lm35Pin, INPUT); // Pin sensor suhu sebagai input
}
void loop() {
int lm35Value = analogRead(lm35Pin); // Baca nilai dari sensor LM35
// Konversi nilai analog menjadi suhu Celsius
float voltage = lm35Value * (5.0 / 1023.0); // Konversi ke volt
float temperatureC = voltage * 100.0; // LM35: 10 mV per °C
int displayValue = (int)temperatureC; // Mengonversi suhu menjadi integer
// Batasi tampilan hanya untuk 3 digit (maksimum 999)
displayValue = displayValue % 1000; // Ambil tiga digit terakhir
// Tampilkan suhu pada seven segment
displayNumber(displayValue);
}
// Fungsi untuk menampilkan satu digit di seven-segment
void displayDigit(int digit, int value) {
// Matikan semua digit terlebih dahulu
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], HIGH); // HIGH untuk common cathode (mematikan digit)
}
// Aktifkan digit yang sesuai
digitalWrite(digitPins[digit], LOW); // Menyalakan digit (LOW untuk common cathode)
// Kirimkan pola segment untuk angka yang akan ditampilkan
byte pattern = digitPatterns[value];
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], (pattern >> i) & 0x01); // Mengatur tiap segmen (a-g)
}
delay(2); // Delay kecil untuk multiplexing
}
// Fungsi untuk menampilkan angka 3 digit pada seven-segment
void displayNumber(int number) {
int digits[4] = {0}; // Array untuk menyimpan tiap digit angka
// Pisahkan angka menjadi digit-digitnya
for (int i = 3; i >= 0; i--) {
digits[i] = number % 10;
number /= 10;
}
// Tampilkan digit ratusan, puluhan, dan satuan (abaikan ribuan)
for (int i = 1; i < 4; i++) { // Mulai dari digit ke-1 (ratusan)
displayDigit(i, digits[i]); // Tampilkan digit ratusan, puluhan, dan satuan
}
// Matikan digit ribuan
digitalWrite(digitPins[0], HIGH); // Matikan digit ribuan
}