Keg sharing system

Dependencies:   4DGL-uLCD-SE TextLCD mbed

Committer:
taylornichols
Date:
Thu Dec 08 05:29:44 2016 +0000
Revision:
1:f531f70a27c3
Parent:
0:dd375f44efef
Child:
2:7d499335dda5
WORKING!!! no lcd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylornichols 0:dd375f44efef 1 #include "mbed.h"
taylornichols 1:f531f70a27c3 2 #include "uLCD_4DGL.h"
taylornichols 1:f531f70a27c3 3 #include "TextLCD.h"
taylornichols 0:dd375f44efef 4 #include <mpr121.h>
taylornichols 0:dd375f44efef 5
taylornichols 1:f531f70a27c3 6
taylornichols 0:dd375f44efef 7 // on-board LEDs
taylornichols 0:dd375f44efef 8 DigitalOut led1 ( LED1 ) ;
taylornichols 0:dd375f44efef 9 DigitalOut led2 ( LED2 ) ;
taylornichols 0:dd375f44efef 10 DigitalOut led3 ( LED3 ) ;
taylornichols 0:dd375f44efef 11 DigitalOut led4 ( LED4 ) ;
taylornichols 0:dd375f44efef 12
taylornichols 0:dd375f44efef 13 // COM port
taylornichols 1:f531f70a27c3 14 Serial com ( USBTX , USBRX , 9600 );
taylornichols 0:dd375f44efef 15
taylornichols 0:dd375f44efef 16 // keypad
taylornichols 0:dd375f44efef 17 InterruptIn interrupt ( p26 ) ;
taylornichols 0:dd375f44efef 18 I2C i2c ( p9 , p10 ) ;
taylornichols 0:dd375f44efef 19 Mpr121 keypad ( & i2c , Mpr121::ADD_VSS ) ;
taylornichols 0:dd375f44efef 20
taylornichols 1:f531f70a27c3 21 // LCD ( tx , rx , reset )
taylornichols 1:f531f70a27c3 22 //uLCD_4DGL lcd( p28 , p27 , p30 );
taylornichols 1:f531f70a27c3 23 //uLCD_4DGL lcd( p28 , p27 , p11 );
taylornichols 1:f531f70a27c3 24 // text display
taylornichols 1:f531f70a27c3 25 // TextLCD lcd ( p22 , p23 , p24 , p25 , p26 , p27 ) ; // rs, e, d4-d7
taylornichols 1:f531f70a27c3 26
taylornichols 1:f531f70a27c3 27 // flow meter
taylornichols 1:f531f70a27c3 28 InterruptIn pulse_interrupt ( p5 ) ;
taylornichols 1:f531f70a27c3 29 int unsigned pulse_count ( 0 ) ;
taylornichols 1:f531f70a27c3 30 void pulse ( )
taylornichols 1:f531f70a27c3 31 {
taylornichols 1:f531f70a27c3 32 ++ pulse_count ;
taylornichols 1:f531f70a27c3 33 // com.printf ( "PULSE (%d)" , pulse_count ) ;
taylornichols 1:f531f70a27c3 34 // lcd.locate ( 0 , 4 ) ;
taylornichols 1:f531f70a27c3 35 // lcd.printf ( "PULSE (%d)" , pulse_count ) ;
taylornichols 1:f531f70a27c3 36 }
taylornichols 1:f531f70a27c3 37
taylornichols 0:dd375f44efef 38 int unsigned pin_count ( 0 ) ;
taylornichols 0:dd375f44efef 39 int unsigned pin_value ( 0 ) ;
taylornichols 0:dd375f44efef 40 void keypad_callback ( )
taylornichols 0:dd375f44efef 41 {
taylornichols 0:dd375f44efef 42 led2 = ! led2 ;
taylornichols 1:f531f70a27c3 43
taylornichols 1:f531f70a27c3 44 int value ( keypad.read(0x00) ) ; value += keypad.read(0x01) << 8 ;
taylornichols 1:f531f70a27c3 45
taylornichols 1:f531f70a27c3 46 switch ( value ) // map keys to keypad values
taylornichols 0:dd375f44efef 47 {
taylornichols 1:f531f70a27c3 48 case 0 : return ; // key release
taylornichols 0:dd375f44efef 49 case 0x1 : if ( pin_count != 0 ) -- pin_count ; pin_value /= 10 ; return ; // DELETE
taylornichols 0:dd375f44efef 50 case 0x10 : pin_value = pin_value * 10 ; break ; // 0
taylornichols 1:f531f70a27c3 51 case 0x100 : // DONE
taylornichols 1:f531f70a27c3 52 float const milliLiters ( ( ( float ) pulse_count ) / 0.450f ) ;
taylornichols 1:f531f70a27c3 53 com.printf ( "a%020f\n" , milliLiters ) ;
taylornichols 1:f531f70a27c3 54 pulse_count = 0 ;
taylornichols 1:f531f70a27c3 55 return ;
taylornichols 1:f531f70a27c3 56 case 0x2 : pin_value = pin_value * 10 + 1 ; break ; // 1
taylornichols 1:f531f70a27c3 57 case 0x20 : pin_value = pin_value * 10 + 2 ; break ; // 2
taylornichols 1:f531f70a27c3 58 case 0x200 : pin_value = pin_value * 10 + 3 ; break ; // 3
taylornichols 1:f531f70a27c3 59 case 0x4 : pin_value = pin_value * 10 + 4 ; break ; // 4
taylornichols 1:f531f70a27c3 60 case 0x40 : pin_value = pin_value * 10 + 5 ; break ; // 5
taylornichols 1:f531f70a27c3 61 case 0x400 : pin_value = pin_value * 10 + 6 ; break ; // 6
taylornichols 1:f531f70a27c3 62 case 0x8 : pin_value = pin_value * 10 + 7 ; break ; // 7
taylornichols 1:f531f70a27c3 63 case 0x80 : pin_value = pin_value * 10 + 8 ; break ; // 8
taylornichols 1:f531f70a27c3 64 case 0x800 : pin_value = pin_value * 10 + 9 ; break ; // 9
taylornichols 0:dd375f44efef 65 }
taylornichols 1:f531f70a27c3 66 // lcd.locate ( pin_count , 4 ) ;
taylornichols 1:f531f70a27c3 67 // lcd.printf ( "*" ) ;
taylornichols 1:f531f70a27c3 68 if ( pin_count == 3 )
taylornichols 0:dd375f44efef 69 {
taylornichols 1:f531f70a27c3 70 // lcd.locate ( 0 , 0 ) ;
taylornichols 1:f531f70a27c3 71 // lcd.locate( 4 , 5 ) ;
taylornichols 1:f531f70a27c3 72 // lcd.printf ( "Pin: %d" , pin_value ) ;
taylornichols 1:f531f70a27c3 73 com.printf ( "p%04d\n\r" , pin_value ) ; // transmit pin
taylornichols 0:dd375f44efef 74 pin_value = pin_count = 0 ;
taylornichols 0:dd375f44efef 75 // return ;
taylornichols 1:f531f70a27c3 76
taylornichols 1:f531f70a27c3 77 char readbuffer [ 2 ] ;
taylornichols 1:f531f70a27c3 78 com.gets( readbuffer , 2 ) ; // receive verification
taylornichols 1:f531f70a27c3 79
taylornichols 1:f531f70a27c3 80 // lcd.locate ( 0 , 0 ) ;
taylornichols 1:f531f70a27c3 81 switch ( readbuffer [ 0 ] ) // parse verification
taylornichols 1:f531f70a27c3 82 {
taylornichols 1:f531f70a27c3 83 case '0' : // INVALID
taylornichols 1:f531f70a27c3 84 // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , RED ) ;
taylornichols 1:f531f70a27c3 85 // lcd.printf ( "INVALID PIN" ) ;
taylornichols 1:f531f70a27c3 86 led3 = ! led3 ;
taylornichols 1:f531f70a27c3 87 break ;
taylornichols 1:f531f70a27c3 88
taylornichols 1:f531f70a27c3 89 case '1' : // VALID
taylornichols 1:f531f70a27c3 90 // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , GREEN ) ;
taylornichols 1:f531f70a27c3 91 // lcd.printf ( "PIN ACCEPTED" ) ;
taylornichols 1:f531f70a27c3 92 led4 = ! led4 ;
taylornichols 1:f531f70a27c3 93 char buffer [ 32 ] ;
taylornichols 1:f531f70a27c3 94 com.gets ( buffer , sizeof ( buffer ) ) ;
taylornichols 1:f531f70a27c3 95 // lcd.printf ( "You owe $%s" , buffer ) ;
taylornichols 1:f531f70a27c3 96 // float const owed ( atof ( buffer ) ) ;
taylornichols 1:f531f70a27c3 97 // lcd.locate ( 0 , 6 ) ;
taylornichols 1:f531f70a27c3 98 // lcd.printf (
taylornichols 1:f531f70a27c3 99 // charge account
taylornichols 1:f531f70a27c3 100 // com.printf ( "Poured %d milliliters of beer.\n" , milliliters ) ;
taylornichols 1:f531f70a27c3 101 break ;
taylornichols 1:f531f70a27c3 102
taylornichols 1:f531f70a27c3 103 default: // ERROR
taylornichols 1:f531f70a27c3 104 // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , YELLOW ) ;
taylornichols 1:f531f70a27c3 105 // lcd.printf ( "TRANSMISSION ERROR" ) ;
taylornichols 1:f531f70a27c3 106 led2 = ! led2 ;
taylornichols 1:f531f70a27c3 107 break ;
taylornichols 1:f531f70a27c3 108 }
taylornichols 1:f531f70a27c3 109 return ;
taylornichols 0:dd375f44efef 110 }
taylornichols 0:dd375f44efef 111 ++ pin_count ;
taylornichols 0:dd375f44efef 112 }
taylornichols 0:dd375f44efef 113
taylornichols 0:dd375f44efef 114 int main ( )
taylornichols 0:dd375f44efef 115 {
taylornichols 0:dd375f44efef 116 // INIT
taylornichols 0:dd375f44efef 117 interrupt.fall ( & keypad_callback ) ;
taylornichols 0:dd375f44efef 118 interrupt.mode ( PullUp ) ;
taylornichols 1:f531f70a27c3 119 pulse_interrupt.rise ( & pulse ) ;
taylornichols 1:f531f70a27c3 120 // txt.locate ( 0 , 0 ) ;
taylornichols 1:f531f70a27c3 121 // txt.printf ( "INITT" ) ;
taylornichols 1:f531f70a27c3 122 // lcd.locate ( 2 , 2 ) ;
taylornichols 1:f531f70a27c3 123 // lcd.printf ( "INIT" ) ;
taylornichols 1:f531f70a27c3 124 // lcd.set_background ( RED ) ;
taylornichols 1:f531f70a27c3 125
taylornichols 0:dd375f44efef 126
taylornichols 0:dd375f44efef 127 while(1)
taylornichols 0:dd375f44efef 128 {
taylornichols 0:dd375f44efef 129 led1 = 1;
taylornichols 0:dd375f44efef 130 wait(0.2);
taylornichols 0:dd375f44efef 131 led1 = 0;
taylornichols 0:dd375f44efef 132 wait(0.2);
taylornichols 0:dd375f44efef 133 }
taylornichols 0:dd375f44efef 134 }