![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Keg sharing system
Dependencies: 4DGL-uLCD-SE TextLCD mbed
Diff: main.cpp
- Revision:
- 1:f531f70a27c3
- Parent:
- 0:dd375f44efef
- Child:
- 2:7d499335dda5
diff -r dd375f44efef -r f531f70a27c3 main.cpp --- a/main.cpp Wed Dec 07 06:54:24 2016 +0000 +++ b/main.cpp Thu Dec 08 05:29:44 2016 +0000 @@ -1,6 +1,9 @@ #include "mbed.h" +#include "uLCD_4DGL.h" +#include "TextLCD.h" #include <mpr121.h> + // on-board LEDs DigitalOut led1 ( LED1 ) ; DigitalOut led2 ( LED2 ) ; @@ -8,57 +11,104 @@ DigitalOut led4 ( LED4 ) ; // COM port -Serial com( USBTX , USBRX , 9600 ); +Serial com ( USBTX , USBRX , 9600 ); // keypad InterruptIn interrupt ( p26 ) ; I2C i2c ( p9 , p10 ) ; Mpr121 keypad ( & i2c , Mpr121::ADD_VSS ) ; +// LCD ( tx , rx , reset ) +//uLCD_4DGL lcd( p28 , p27 , p30 ); +//uLCD_4DGL lcd( p28 , p27 , p11 ); +// text display +// TextLCD lcd ( p22 , p23 , p24 , p25 , p26 , p27 ) ; // rs, e, d4-d7 + +// flow meter +InterruptIn pulse_interrupt ( p5 ) ; +int unsigned pulse_count ( 0 ) ; +void pulse ( ) +{ + ++ pulse_count ; +// com.printf ( "PULSE (%d)" , pulse_count ) ; +// lcd.locate ( 0 , 4 ) ; +// lcd.printf ( "PULSE (%d)" , pulse_count ) ; +} + int unsigned pin_count ( 0 ) ; int unsigned pin_value ( 0 ) ; void keypad_callback ( ) { - // TEST led2 = ! led2 ; -// com.putc ( 'y' ) ; -// com.putc ( 'z' ) ; -// com.putc ( '\n' ) ; - int value ( keypad.read(0x00) ) ; - value += keypad.read(0x01) << 8 ; -// com.printf( "%x\n" , value ) ; - if ( value == 0 ) return ; - - switch ( value ) + + int value ( keypad.read(0x00) ) ; value += keypad.read(0x01) << 8 ; + + switch ( value ) // map keys to keypad values { -// case 0 : return ; + case 0 : return ; // key release case 0x1 : if ( pin_count != 0 ) -- pin_count ; pin_value /= 10 ; return ; // DELETE case 0x10 : pin_value = pin_value * 10 ; break ; // 0 - case 0x100 : pin_count = pin_value = 0 ; return ; // ENTER - case 0x2 : pin_value = pin_value * 10 + 1 ; break ; - case 0x20 : pin_value = pin_value * 10 + 2 ; break ; - case 0x200 : pin_value = pin_value * 10 + 3 ; break ; - case 0x4 : pin_value = pin_value * 10 + 4 ; break ; - case 0x40 : pin_value = pin_value * 10 + 5 ; break ; - case 0x400 : pin_value = pin_value * 10 + 6 ; break ; - case 0x8 : pin_value = pin_value * 10 + 7 ; break ; - case 0x80 : pin_value = pin_value * 10 + 8 ; break ; - case 0x800 : pin_value = pin_value * 10 + 9 ; break ; + case 0x100 : // DONE + float const milliLiters ( ( ( float ) pulse_count ) / 0.450f ) ; + com.printf ( "a%020f\n" , milliLiters ) ; + pulse_count = 0 ; + return ; + case 0x2 : pin_value = pin_value * 10 + 1 ; break ; // 1 + case 0x20 : pin_value = pin_value * 10 + 2 ; break ; // 2 + case 0x200 : pin_value = pin_value * 10 + 3 ; break ; // 3 + case 0x4 : pin_value = pin_value * 10 + 4 ; break ; // 4 + case 0x40 : pin_value = pin_value * 10 + 5 ; break ; // 5 + case 0x400 : pin_value = pin_value * 10 + 6 ; break ; // 6 + case 0x8 : pin_value = pin_value * 10 + 7 ; break ; // 7 + case 0x80 : pin_value = pin_value * 10 + 8 ; break ; // 8 + case 0x800 : pin_value = pin_value * 10 + 9 ; break ; // 9 } - if ( pin_count == 3 ) +// lcd.locate ( pin_count , 4 ) ; +// lcd.printf ( "*" ) ; + if ( pin_count == 3 ) { -// com.printf ( "{%d:%d}\n" , pin_value , pin_count ) ; - com.printf ( "%d\n\r" , pin_value ) ; +// lcd.locate ( 0 , 0 ) ; + // lcd.locate( 4 , 5 ) ; +// lcd.printf ( "Pin: %d" , pin_value ) ; + com.printf ( "p%04d\n\r" , pin_value ) ; // transmit pin pin_value = pin_count = 0 ; - return ; -// send pin // return ; + + char readbuffer [ 2 ] ; + com.gets( readbuffer , 2 ) ; // receive verification + +// lcd.locate ( 0 , 0 ) ; + switch ( readbuffer [ 0 ] ) // parse verification + { + case '0' : // INVALID +// lcd.filled_rectangle ( 0 , 0 , 128 , 128 , RED ) ; +// lcd.printf ( "INVALID PIN" ) ; + led3 = ! led3 ; + break ; + + case '1' : // VALID +// lcd.filled_rectangle ( 0 , 0 , 128 , 128 , GREEN ) ; +// lcd.printf ( "PIN ACCEPTED" ) ; + led4 = ! led4 ; + char buffer [ 32 ] ; + com.gets ( buffer , sizeof ( buffer ) ) ; +// lcd.printf ( "You owe $%s" , buffer ) ; +// float const owed ( atof ( buffer ) ) ; +// lcd.locate ( 0 , 6 ) ; +// lcd.printf ( + // charge account +// com.printf ( "Poured %d milliliters of beer.\n" , milliliters ) ; + break ; + + default: // ERROR +// lcd.filled_rectangle ( 0 , 0 , 128 , 128 , YELLOW ) ; +// lcd.printf ( "TRANSMISSION ERROR" ) ; + led2 = ! led2 ; + break ; + } + return ; } -// com.printf ( "%d : %d\n" , pin_value , pin_count ) ; ++ pin_count ; -// com.printf(8080) ; -// int unsigned num = 8080 ; -// com.write ( ) ; } int main ( ) @@ -66,6 +116,13 @@ // INIT interrupt.fall ( & keypad_callback ) ; interrupt.mode ( PullUp ) ; + pulse_interrupt.rise ( & pulse ) ; +// txt.locate ( 0 , 0 ) ; +// txt.printf ( "INITT" ) ; +// lcd.locate ( 2 , 2 ) ; +// lcd.printf ( "INIT" ) ; +// lcd.set_background ( RED ) ; + while(1) {