// Kitaplık Yöneticisi'nden kurulacak: // "LiquidCrystal I2C" #include #include // Ölçülen gerilimin girdiği analog pin const int INPUT_PIN = A0; // Arduino'nun 5V'u: multimetren varsa // 5V pininde ölçtüğünü yaz, sonuç düzelir const float VREF = 5.00; // Ortalaması alınan okuma sayısı const int SAMPLES = 16; // Ölçümler arası süre (ms) const unsigned long READ_EVERY = 300; // I2C adresi çoğunda 0x27, bazısında 0x3F LiquidCrystal_I2C lcd(0x27, 16, 2); // Çubuğun beş parçası: 1-5 sütunu dolu // kutular, LCD'ye özel karakter olarak void makeBars() { for (int level = 0; level < 5; level++) { // Soldan level+1 sütunu dolu satır byte row = 0; for (int col = 0; col <= level; col++) { row |= 0x10 >> col; } byte shape[8]; for (int y = 0; y < 8; y++) shape[y] = row; lcd.createChar(level, shape); } } // Okumaların ortalaması: sayı titremez int readAverage() { long sum = 0; for (int i = 0; i < SAMPLES; i++) { sum += analogRead(INPUT_PIN); } return sum / SAMPLES; } // Alt satır: 0-5 V, 16 kutuluk bir çubuk; // her kutu 5 adım, toplam 80 adım void showBar(int raw) { int steps = (long)raw * 80 / 1023; lcd.setCursor(0, 1); for (int cell = 0; cell < 16; cell++) { int fill = steps - cell * 5; if (fill >= 5) { lcd.write(byte(4)); } else if (fill > 0) { lcd.write(byte(fill - 1)); } else { lcd.print(' '); } } } void setup() { lcd.init(); lcd.backlight(); makeBars(); Serial.begin(9600); } void loop() { int raw = readAverage(); // 0-1023 arası okuma, volta çevrilir float volts = raw * VREF / 1023.0; lcd.setCursor(0, 0); lcd.print("Gerilim: "); lcd.print(volts, 2); // Sondaki boşluk eski yazıyı siler lcd.print(" V "); showBar(raw); Serial.print("Gerilim: "); Serial.print(volts, 2); Serial.print(" V (A0 = "); Serial.print(raw); Serial.println(")"); delay(READ_EVERY); }