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() {
23. delay(50);
25. //float Voltage = map(VoltMeterReading, 0, 1023, 0.00, 20.20);
26. float Voltage = mapfloat(VoltMeterReading, 0, 1023, 0.00, 20.20);
27.
29. delay(50);
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.