Keg sharing system

Dependencies:   4DGL-uLCD-SE TextLCD mbed

Committer:
taylornichols
Date:
Fri Dec 09 02:01:55 2016 +0000
Revision:
3:861e3433e5e1
Parent:
2:7d499335dda5
Child:
4:bcb5be37a0e1
with LCD but doesn't do callback after validation;

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 0:dd375f44efef 6 // on-board LEDs
taylornichols 0:dd375f44efef 7 DigitalOut led1 ( LED1 ) ;
taylornichols 0:dd375f44efef 8 DigitalOut led2 ( LED2 ) ;
taylornichols 0:dd375f44efef 9 DigitalOut led3 ( LED3 ) ;
taylornichols 0:dd375f44efef 10 DigitalOut led4 ( LED4 ) ;
taylornichols 0:dd375f44efef 11
taylornichols 3:861e3433e5e1 12 // COM port
taylornichols 1:f531f70a27c3 13 Serial com ( USBTX , USBRX , 9600 );
taylornichols 0:dd375f44efef 14
taylornichols 3:861e3433e5e1 15 // keypad
taylornichols 0:dd375f44efef 16 InterruptIn interrupt ( p26 ) ;
taylornichols 0:dd375f44efef 17 I2C i2c ( p9 , p10 ) ;
taylornichols 0:dd375f44efef 18 Mpr121 keypad ( & i2c , Mpr121::ADD_VSS ) ;
taylornichols 0:dd375f44efef 19
taylornichols 1:f531f70a27c3 20 // LCD ( tx , rx , reset )
taylornichols 3:861e3433e5e1 21 uLCD_4DGL lcd ( p28 , p27 , p5 ) ;
taylornichols 1:f531f70a27c3 22
taylornichols 1:f531f70a27c3 23 // flow meter
taylornichols 3:861e3433e5e1 24 InterruptIn pulse_interrupt ( p11 ) ;
taylornichols 1:f531f70a27c3 25 int unsigned pulse_count ( 0 ) ;
taylornichols 3:861e3433e5e1 26 float pulse_milliLiters ( )
taylornichols 3:861e3433e5e1 27 {
taylornichols 3:861e3433e5e1 28 return ( ( float ) pulse_count ) / 0.450f ;
taylornichols 3:861e3433e5e1 29 }
taylornichols 1:f531f70a27c3 30 void pulse ( )
taylornichols 1:f531f70a27c3 31 {
taylornichols 1:f531f70a27c3 32 ++ pulse_count ;
taylornichols 3:861e3433e5e1 33 lcd.locate ( 4 , 8 ) ;
taylornichols 3:861e3433e5e1 34 lcd.printf ( "%f mL" , pulse_milliLiters ( ) ) ;
taylornichols 2:7d499335dda5 35 }
taylornichols 2:7d499335dda5 36
taylornichols 3:861e3433e5e1 37 void read_pin ( )
taylornichols 3:861e3433e5e1 38 {
taylornichols 3:861e3433e5e1 39 lcd.filled_rectangle ( 0 , 0 , 128 , 128 , BLACK ) ;
taylornichols 3:861e3433e5e1 40 lcd.locate ( 4 , 6 ) ;
taylornichols 3:861e3433e5e1 41 lcd.printf ( "Enter PIN" ) ;
taylornichols 3:861e3433e5e1 42 lcd.locate ( 4 , 7 ) ;
taylornichols 3:861e3433e5e1 43 lcd.printf ( "on keypad" ) ;
taylornichols 3:861e3433e5e1 44 }
taylornichols 3:861e3433e5e1 45
taylornichols 3:861e3433e5e1 46 enum
taylornichols 3:861e3433e5e1 47 {
taylornichols 3:861e3433e5e1 48 pin_row = 8 , pin_col = 6
taylornichols 3:861e3433e5e1 49 } ;
taylornichols 1:f531f70a27c3 50
taylornichols 0:dd375f44efef 51 int unsigned pin_count ( 0 ) ;
taylornichols 0:dd375f44efef 52 int unsigned pin_value ( 0 ) ;
taylornichols 3:861e3433e5e1 53
taylornichols 0:dd375f44efef 54 void keypad_callback ( )
taylornichols 0:dd375f44efef 55 {
taylornichols 0:dd375f44efef 56 led2 = ! led2 ;
taylornichols 1:f531f70a27c3 57
taylornichols 1:f531f70a27c3 58 int value ( keypad.read(0x00) ) ; value += keypad.read(0x01) << 8 ;
taylornichols 1:f531f70a27c3 59
taylornichols 1:f531f70a27c3 60 switch ( value ) // map keys to keypad values
taylornichols 0:dd375f44efef 61 {
taylornichols 1:f531f70a27c3 62 case 0 : return ; // key release
taylornichols 3:861e3433e5e1 63
taylornichols 3:861e3433e5e1 64 case 0x1 :
taylornichols 3:861e3433e5e1 65 // DELETE
taylornichols 3:861e3433e5e1 66 lcd.locate ( pin_col + pin_count , pin_row ) ;
taylornichols 3:861e3433e5e1 67 lcd.printf ( " " ) ;
taylornichols 3:861e3433e5e1 68 if ( pin_count != 0 )
taylornichols 3:861e3433e5e1 69 {
taylornichols 3:861e3433e5e1 70 -- pin_count ;
taylornichols 3:861e3433e5e1 71 }
taylornichols 3:861e3433e5e1 72 pin_value /= 10 ;
taylornichols 3:861e3433e5e1 73 return ;
taylornichols 3:861e3433e5e1 74
taylornichols 3:861e3433e5e1 75 case 0x100 :
taylornichols 3:861e3433e5e1 76 // DONE
taylornichols 3:861e3433e5e1 77 com.printf ( "a%020f\n" , pulse_milliLiters ( ) ) ;
taylornichols 3:861e3433e5e1 78 lcd.locate ( 0 , 10 ) ;
taylornichols 3:861e3433e5e1 79 lcd.printf ( "Done pouring." ) ;
taylornichols 3:861e3433e5e1 80 pulse_count = 0 ;
taylornichols 3:861e3433e5e1 81 read_pin ( ) ;
taylornichols 3:861e3433e5e1 82 return ;
taylornichols 3:861e3433e5e1 83
taylornichols 0:dd375f44efef 84 case 0x10 : pin_value = pin_value * 10 ; break ; // 0
taylornichols 1:f531f70a27c3 85 case 0x2 : pin_value = pin_value * 10 + 1 ; break ; // 1
taylornichols 1:f531f70a27c3 86 case 0x20 : pin_value = pin_value * 10 + 2 ; break ; // 2
taylornichols 1:f531f70a27c3 87 case 0x200 : pin_value = pin_value * 10 + 3 ; break ; // 3
taylornichols 1:f531f70a27c3 88 case 0x4 : pin_value = pin_value * 10 + 4 ; break ; // 4
taylornichols 1:f531f70a27c3 89 case 0x40 : pin_value = pin_value * 10 + 5 ; break ; // 5
taylornichols 1:f531f70a27c3 90 case 0x400 : pin_value = pin_value * 10 + 6 ; break ; // 6
taylornichols 1:f531f70a27c3 91 case 0x8 : pin_value = pin_value * 10 + 7 ; break ; // 7
taylornichols 1:f531f70a27c3 92 case 0x80 : pin_value = pin_value * 10 + 8 ; break ; // 8
taylornichols 1:f531f70a27c3 93 case 0x800 : pin_value = pin_value * 10 + 9 ; break ; // 9
taylornichols 0:dd375f44efef 94 }
taylornichols 3:861e3433e5e1 95
taylornichols 3:861e3433e5e1 96 lcd.locate ( pin_col + pin_count , pin_row ) ;
taylornichols 3:861e3433e5e1 97 lcd.printf ( "*" ) ;
taylornichols 3:861e3433e5e1 98
taylornichols 1:f531f70a27c3 99 if ( pin_count == 3 )
taylornichols 0:dd375f44efef 100 {
taylornichols 1:f531f70a27c3 101 com.printf ( "p%04d\n\r" , pin_value ) ; // transmit pin
taylornichols 3:861e3433e5e1 102
taylornichols 3:861e3433e5e1 103 pin_value = pin_count = 0 ; // reset pin
taylornichols 3:861e3433e5e1 104
taylornichols 1:f531f70a27c3 105 char readbuffer [ 2 ] ;
taylornichols 3:861e3433e5e1 106 com.gets ( readbuffer , 2 ) ; // receive verification
taylornichols 3:861e3433e5e1 107
taylornichols 3:861e3433e5e1 108 lcd.locate ( 4 , 6 ) ;
taylornichols 1:f531f70a27c3 109
taylornichols 1:f531f70a27c3 110 switch ( readbuffer [ 0 ] ) // parse verification
taylornichols 1:f531f70a27c3 111 {
taylornichols 1:f531f70a27c3 112 case '0' : // INVALID
taylornichols 3:861e3433e5e1 113 lcd.filled_rectangle ( 0 , 0 , 128 , 128 , RED ) ;
taylornichols 3:861e3433e5e1 114 lcd.locate ( 4 , 5 ) ;
taylornichols 3:861e3433e5e1 115 lcd.printf ( "INVALID PIN" ) ;
taylornichols 1:f531f70a27c3 116 led3 = ! led3 ;
taylornichols 3:861e3433e5e1 117 wait_ms ( 1024 ) ;
taylornichols 3:861e3433e5e1 118 read_pin ( ) ;
taylornichols 1:f531f70a27c3 119 break ;
taylornichols 1:f531f70a27c3 120
taylornichols 1:f531f70a27c3 121 case '1' : // VALID
taylornichols 3:861e3433e5e1 122 lcd.filled_rectangle ( 0 , 0 , 128 , 128 , GREEN ) ;
taylornichols 3:861e3433e5e1 123 lcd.printf ( "Pour beer" ) ;
taylornichols 3:861e3433e5e1 124 lcd.locate ( 4 , 8 ) ;
taylornichols 1:f531f70a27c3 125 led4 = ! led4 ;
taylornichols 3:861e3433e5e1 126 char buffer [ 6 ] ;
taylornichols 1:f531f70a27c3 127 com.gets ( buffer , sizeof ( buffer ) ) ;
taylornichols 3:861e3433e5e1 128 lcd.locate ( 4 , 10 ) ;
taylornichols 3:861e3433e5e1 129 lcd.printf ( "Current owed: $%s" , buffer ) ;
taylornichols 1:f531f70a27c3 130 break ;
taylornichols 1:f531f70a27c3 131
taylornichols 1:f531f70a27c3 132 default: // ERROR
taylornichols 3:861e3433e5e1 133 lcd.filled_rectangle ( 0 , 0 , 128 , 128 , YELLOW ) ;
taylornichols 3:861e3433e5e1 134 lcd.printf ( "TRANSMISSION ERROR" ) ;
taylornichols 1:f531f70a27c3 135 led2 = ! led2 ;
taylornichols 3:861e3433e5e1 136 exit ( 1 ) ;
taylornichols 1:f531f70a27c3 137 break ;
taylornichols 1:f531f70a27c3 138 }
taylornichols 1:f531f70a27c3 139 return ;
taylornichols 0:dd375f44efef 140 }
taylornichols 0:dd375f44efef 141 ++ pin_count ;
taylornichols 0:dd375f44efef 142 }
taylornichols 0:dd375f44efef 143
taylornichols 0:dd375f44efef 144 int main ( )
taylornichols 0:dd375f44efef 145 {
taylornichols 2:7d499335dda5 146 pulse_interrupt.rise ( & pulse ) ;
taylornichols 0:dd375f44efef 147 interrupt.fall ( & keypad_callback ) ;
taylornichols 0:dd375f44efef 148 interrupt.mode ( PullUp ) ;
taylornichols 3:861e3433e5e1 149
taylornichols 3:861e3433e5e1 150 read_pin ( ) ;
taylornichols 0:dd375f44efef 151
taylornichols 0:dd375f44efef 152 while(1)
taylornichols 0:dd375f44efef 153 {
taylornichols 0:dd375f44efef 154 led1 = 1;
taylornichols 0:dd375f44efef 155 wait(0.2);
taylornichols 0:dd375f44efef 156 led1 = 0;
taylornichols 0:dd375f44efef 157 wait(0.2);
taylornichols 0:dd375f44efef 158 }
taylornichols 0:dd375f44efef 159 }