#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const int Analog = A0;
const int MAX_VOLTAGE = 4.3;
const int BAR_WIDTH = 14;
const int numReadings = 5;
int readings[numReadings];
int index = 0;
int total = 0;
int average = 0;
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Volume: ");
lcd.setCursor(11, 0);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("[ ]");
for (int i = 0; i < numReadings; i++) {
readings[i] = 0;
}
}
void loop() {
total -= readings[index];
readings[index] = analogRead(Analog);
total += readings[index];
index++;
if (index >= numReadings) {
index = 0;
}
average = total / numReadings;
float voltage = (average * MAX_VOLTAGE) / 1023.0;
float log_voltage = log10(voltage + 1);
float max_log_voltage = log10(MAX_VOLTAGE + 1);
int percentage = (int)((log_voltage / max_log_voltage) * 100);
percentage = constrain(percentage, 0, 100);
int barLength = (percentage * BAR_WIDTH) / 100;
lcd.setCursor(8, 0);
lcd.print(percentage);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("[ ]");
for (int i = 1; i <= BAR_WIDTH; i++) {
lcd.setCursor(i, 1);
if(i <= barLength){
lcd.write(0xFF);
} else{
lcd.write(0xFE);
}
}
delay(200);
}
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:GND.2
uno:RESET.2
uno:0
uno:1
uno:13
uno:3.3V
uno:AREF
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
uno:A6
uno:A7
uno:5V
uno:RESET
uno:GND.1
uno:VIN
uno:12.2
uno:5V.2
uno:13.2
uno:11.2
uno:RESET.3
uno:GND.3
lcd:VSS
lcd:VDD
lcd:V0
lcd:RS
lcd:RW
lcd:E
lcd:D0
lcd:D1
lcd:D2
lcd:D3
lcd:D4
lcd:D5
lcd:D6
lcd:D7
lcd:A
lcd:K
r1:1
r1:2
pot1:GND
pot1:SIG
pot1:VCC
r2:1
r2:2
r3:1
r3:2
vcc1:VCC
gnd1:GND