Simple Voltage meter. The analog value is shown on a LCD and on the four LEDs ( fading mode ).

Dependencies:   TextLCD mbed

Revision:
0:13f61a33458d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Feb 14 08:12:38 2011 +0000
@@ -0,0 +1,54 @@
+#include "mbed.h"
+#include "TextLCD.h"
+
+
+//TextLCD lcd( p11, p12, p30, p29, p28, p27, TextLCD::LCD20x4 ); // rs, e, d0-d3
+//TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d4, d5, d6, d7
+TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, rw, e, d4, d5, d6, d7
+Serial pc( USBTX, USBRX );
+//DigitalOut LEDOUT0( LED1 );
+//DigitalOut LEDOUT1( LED2 );
+//DigitalOut LEDOUT2( LED3 );
+//DigitalOut LEDOUT3( LED4 );
+PwmOut led1 (LED1);
+PwmOut led2 (LED2);
+PwmOut led3 (LED3);
+PwmOut led4 (LED4);
+AnalogIn A0( p20 );
+
+float i;
+float l;
+int j;
+int cnt = 0;
+
+int main() {
+    led1 =  led2 =  led3 = led4 = 0;
+    pc.printf("\x1B\x48\x1B\x4A");
+    pc.printf("Voltmeter\n\r");
+    lcd.printf("Voltmeter");
+    lcd.locate(0,2);
+    lcd.printf("0-----1-----2-----3-");
+    while(1) {
+        i = A0;
+        l = i * 4;
+        cnt = cnt < 8 ? ++cnt : 0;
+        if (cnt == 0 )
+        {
+            i *= 3.3; // 1.0 -> 3.3V
+            lcd.locate(0,1);
+            lcd.printf( "%1.3f   " , i );
+            for ( int j = 0; j < 20 ; j++ )
+            {
+                lcd.locate(j,3);
+                if ( ( (float) j ) / 20 * 3.3 < i ) { lcd.printf( "\xFF" ); } else { lcd.printf( "_" ); }
+            }
+            pc.printf("\x1B\x48");
+            pc.printf( "\n\n\rMeasured : %1.3f" , i );        
+        }
+        if ( l < 1 ) { led1 = l; l = 0; } else { led1 = 1; l = l - 1; }
+        if ( l < 1 ) { led2 = l; l = 0; } else { led2 = 1; l = l - 1; }
+        if ( l < 1 ) { led3 = l; l = 0; } else { led3 = 1; l = l - 1; }
+        if ( l < 1 ) { led4 = l; l = 0; } else { led4 = 1; l = l - 1; }
+        wait(0.05);
+    }
+}