A simple voltage divider(5:1 i.e. for 5 Volts of input the output should be 1 Volt) is used to Keep the measuring voltage range i.e 0-30 volt within Arduino's ADC input voltage range, i.e. 0-5 Volt. Another Resistance of 1 Ohm is used to drop the voltage across it, which is propertional to the current through it.This voltage across the 1 Ohm resistor is measured by the ADC of the Arduino.

(Note: This is not a very reliable setup, as the current is limited to maximum 5 Ampere Theoritically, however in practice if your ammeter will drop about 5 Volt than of course the voltage source wont be very helpful.But for small current circuit, it can be implemented very well.

Arduino Code:
  1.  
  2.  
  3. #include "LiquidCrystal.h"
  4.  
  5. LiquidCrystal lcd(6, 5, 7, 4, 3, 2);
  6.  
  7. int VoltMeterProbe = A4;
  8. int AmmeterProbe = A5;
  9.  
  10. void setup() {
  11. lcd.begin(16, 2);
  12. lcd.clear();
  13. lcd.setCursor(0, 0);
  14. lcd.print(" Energy Meter ");
  15. lcd.setCursor(0, 1);
  16. lcd.print(" by Debashish ");
  17. delay(3000);
  18. lcd.clear();
  19. }
  20.  
  21. void loop() {
  22. float VoltMeterReading = analogRead(VoltMeterProbe);
  23. delay(50);
  24. VoltMeterReading = analogRead(VoltMeterProbe);
  25. //float Voltage = map(VoltMeterReading, 0, 1023, 0.00, 20.20);
  26. float Voltage = mapfloat(VoltMeterReading, 0, 1023, 0.00, 20.20);
  27.  
  28. float AmmeterReading = analogRead(AmmeterProbe);
  29. delay(50);
  30. AmmeterReading = analogRead(AmmeterProbe);
  31.  
  32. //float Current = map(AmmeterReading, 0, 1023, 0, 5000);
  33. float Current = mapfloat(AmmeterReading, 0, 1023, 0, 5000);
  34.  
  35. lcd.setCursor(0, 0);
  36. lcd.print("Volts: ");
  37. lcd.setCursor(7, 0);
  38. lcd.print(" ");
  39. lcd.setCursor(7, 0);
  40. lcd.print(Voltage);
  41. lcd.setCursor(14, 0);
  42. lcd.print("V");
  43.  
  44. lcd.setCursor(0, 1);
  45. lcd.print("Amps: ");
  46. lcd.setCursor(6, 1);
  47. lcd.print(" ");
  48. lcd.setCursor(6, 1);
  49. lcd.print(Current);
  50. lcd.setCursor(14, 1);
  51. lcd.print("mA");
  52.  
  53. delay(900);
  54. }
  55.  
  56. //A floating Point Map function
  57. float mapfloat(long x, long in_min, long in_max, long out_min, long out_max)
  58. {
  59. return (float)(x - in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
  60. }
  61.