Ben Schueler
/
analog_test
Simple Voltage meter. The analog value is shown on a LCD and on the four LEDs ( fading mode ).
Diff: main.cpp
- 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); + } +}