![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Keg sharing system
Dependencies: 4DGL-uLCD-SE TextLCD mbed
main.cpp@1:f531f70a27c3, 2016-12-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |