![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Keg sharing system
Dependencies: 4DGL-uLCD-SE TextLCD mbed
main.cpp@2:7d499335dda5, 2016-12-09 (annotated)
- Committer:
- taylornichols
- Date:
- Fri Dec 09 00:21:58 2016 +0000
- Revision:
- 2:7d499335dda5
- Parent:
- 1:f531f70a27c3
- Child:
- 3:861e3433e5e1
Before uLCD;
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 | 2:7d499335dda5 | 22 | uLCD_4DGL lcd(p28,p27,p5); // serial tx, serial rx, reset pin; |
taylornichols | 2:7d499335dda5 | 23 | |
taylornichols | 1:f531f70a27c3 | 24 | //uLCD_4DGL lcd( p28 , p27 , p30 ); |
taylornichols | 1:f531f70a27c3 | 25 | //uLCD_4DGL lcd( p28 , p27 , p11 ); |
taylornichols | 1:f531f70a27c3 | 26 | // text display |
taylornichols | 2:7d499335dda5 | 27 | |
taylornichols | 2:7d499335dda5 | 28 | //TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD20x4); // rs, e, d4-d7 |
taylornichols | 2:7d499335dda5 | 29 | //TextLCD lcd ( p22 , p23 , p24 , p25 , p26 , p27 ) ; // rs, e, d4-d7 |
taylornichols | 1:f531f70a27c3 | 30 | |
taylornichols | 1:f531f70a27c3 | 31 | // flow meter |
taylornichols | 2:7d499335dda5 | 32 | |
taylornichols | 2:7d499335dda5 | 33 | |
taylornichols | 1:f531f70a27c3 | 34 | InterruptIn pulse_interrupt ( p5 ) ; |
taylornichols | 2:7d499335dda5 | 35 | |
taylornichols | 1:f531f70a27c3 | 36 | int unsigned pulse_count ( 0 ) ; |
taylornichols | 2:7d499335dda5 | 37 | |
taylornichols | 1:f531f70a27c3 | 38 | void pulse ( ) |
taylornichols | 1:f531f70a27c3 | 39 | { |
taylornichols | 1:f531f70a27c3 | 40 | ++ pulse_count ; |
taylornichols | 2:7d499335dda5 | 41 | } |
taylornichols | 2:7d499335dda5 | 42 | |
taylornichols | 1:f531f70a27c3 | 43 | // com.printf ( "PULSE (%d)" , pulse_count ) ; |
taylornichols | 1:f531f70a27c3 | 44 | // lcd.locate ( 0 , 4 ) ; |
taylornichols | 1:f531f70a27c3 | 45 | // lcd.printf ( "PULSE (%d)" , pulse_count ) ; |
taylornichols | 1:f531f70a27c3 | 46 | |
taylornichols | 0:dd375f44efef | 47 | int unsigned pin_count ( 0 ) ; |
taylornichols | 0:dd375f44efef | 48 | int unsigned pin_value ( 0 ) ; |
taylornichols | 0:dd375f44efef | 49 | void keypad_callback ( ) |
taylornichols | 0:dd375f44efef | 50 | { |
taylornichols | 0:dd375f44efef | 51 | led2 = ! led2 ; |
taylornichols | 1:f531f70a27c3 | 52 | |
taylornichols | 1:f531f70a27c3 | 53 | int value ( keypad.read(0x00) ) ; value += keypad.read(0x01) << 8 ; |
taylornichols | 1:f531f70a27c3 | 54 | |
taylornichols | 1:f531f70a27c3 | 55 | switch ( value ) // map keys to keypad values |
taylornichols | 0:dd375f44efef | 56 | { |
taylornichols | 1:f531f70a27c3 | 57 | case 0 : return ; // key release |
taylornichols | 0:dd375f44efef | 58 | case 0x1 : if ( pin_count != 0 ) -- pin_count ; pin_value /= 10 ; return ; // DELETE |
taylornichols | 0:dd375f44efef | 59 | case 0x10 : pin_value = pin_value * 10 ; break ; // 0 |
taylornichols | 1:f531f70a27c3 | 60 | case 0x100 : // DONE |
taylornichols | 1:f531f70a27c3 | 61 | float const milliLiters ( ( ( float ) pulse_count ) / 0.450f ) ; |
taylornichols | 1:f531f70a27c3 | 62 | com.printf ( "a%020f\n" , milliLiters ) ; |
taylornichols | 1:f531f70a27c3 | 63 | pulse_count = 0 ; |
taylornichols | 1:f531f70a27c3 | 64 | return ; |
taylornichols | 1:f531f70a27c3 | 65 | case 0x2 : pin_value = pin_value * 10 + 1 ; break ; // 1 |
taylornichols | 1:f531f70a27c3 | 66 | case 0x20 : pin_value = pin_value * 10 + 2 ; break ; // 2 |
taylornichols | 1:f531f70a27c3 | 67 | case 0x200 : pin_value = pin_value * 10 + 3 ; break ; // 3 |
taylornichols | 1:f531f70a27c3 | 68 | case 0x4 : pin_value = pin_value * 10 + 4 ; break ; // 4 |
taylornichols | 1:f531f70a27c3 | 69 | case 0x40 : pin_value = pin_value * 10 + 5 ; break ; // 5 |
taylornichols | 1:f531f70a27c3 | 70 | case 0x400 : pin_value = pin_value * 10 + 6 ; break ; // 6 |
taylornichols | 1:f531f70a27c3 | 71 | case 0x8 : pin_value = pin_value * 10 + 7 ; break ; // 7 |
taylornichols | 1:f531f70a27c3 | 72 | case 0x80 : pin_value = pin_value * 10 + 8 ; break ; // 8 |
taylornichols | 1:f531f70a27c3 | 73 | case 0x800 : pin_value = pin_value * 10 + 9 ; break ; // 9 |
taylornichols | 0:dd375f44efef | 74 | } |
taylornichols | 1:f531f70a27c3 | 75 | // lcd.locate ( pin_count , 4 ) ; |
taylornichols | 1:f531f70a27c3 | 76 | // lcd.printf ( "*" ) ; |
taylornichols | 1:f531f70a27c3 | 77 | if ( pin_count == 3 ) |
taylornichols | 0:dd375f44efef | 78 | { |
taylornichols | 1:f531f70a27c3 | 79 | // lcd.locate ( 0 , 0 ) ; |
taylornichols | 1:f531f70a27c3 | 80 | // lcd.locate( 4 , 5 ) ; |
taylornichols | 1:f531f70a27c3 | 81 | // lcd.printf ( "Pin: %d" , pin_value ) ; |
taylornichols | 1:f531f70a27c3 | 82 | com.printf ( "p%04d\n\r" , pin_value ) ; // transmit pin |
taylornichols | 0:dd375f44efef | 83 | pin_value = pin_count = 0 ; |
taylornichols | 0:dd375f44efef | 84 | // return ; |
taylornichols | 1:f531f70a27c3 | 85 | |
taylornichols | 1:f531f70a27c3 | 86 | char readbuffer [ 2 ] ; |
taylornichols | 1:f531f70a27c3 | 87 | com.gets( readbuffer , 2 ) ; // receive verification |
taylornichols | 1:f531f70a27c3 | 88 | |
taylornichols | 1:f531f70a27c3 | 89 | // lcd.locate ( 0 , 0 ) ; |
taylornichols | 1:f531f70a27c3 | 90 | switch ( readbuffer [ 0 ] ) // parse verification |
taylornichols | 1:f531f70a27c3 | 91 | { |
taylornichols | 1:f531f70a27c3 | 92 | case '0' : // INVALID |
taylornichols | 1:f531f70a27c3 | 93 | // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , RED ) ; |
taylornichols | 1:f531f70a27c3 | 94 | // lcd.printf ( "INVALID PIN" ) ; |
taylornichols | 1:f531f70a27c3 | 95 | led3 = ! led3 ; |
taylornichols | 1:f531f70a27c3 | 96 | break ; |
taylornichols | 1:f531f70a27c3 | 97 | |
taylornichols | 1:f531f70a27c3 | 98 | case '1' : // VALID |
taylornichols | 1:f531f70a27c3 | 99 | // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , GREEN ) ; |
taylornichols | 1:f531f70a27c3 | 100 | // lcd.printf ( "PIN ACCEPTED" ) ; |
taylornichols | 1:f531f70a27c3 | 101 | led4 = ! led4 ; |
taylornichols | 1:f531f70a27c3 | 102 | char buffer [ 32 ] ; |
taylornichols | 1:f531f70a27c3 | 103 | com.gets ( buffer , sizeof ( buffer ) ) ; |
taylornichols | 1:f531f70a27c3 | 104 | // lcd.printf ( "You owe $%s" , buffer ) ; |
taylornichols | 1:f531f70a27c3 | 105 | // float const owed ( atof ( buffer ) ) ; |
taylornichols | 1:f531f70a27c3 | 106 | // lcd.locate ( 0 , 6 ) ; |
taylornichols | 1:f531f70a27c3 | 107 | // lcd.printf ( |
taylornichols | 1:f531f70a27c3 | 108 | // charge account |
taylornichols | 1:f531f70a27c3 | 109 | // com.printf ( "Poured %d milliliters of beer.\n" , milliliters ) ; |
taylornichols | 1:f531f70a27c3 | 110 | break ; |
taylornichols | 1:f531f70a27c3 | 111 | |
taylornichols | 1:f531f70a27c3 | 112 | default: // ERROR |
taylornichols | 1:f531f70a27c3 | 113 | // lcd.filled_rectangle ( 0 , 0 , 128 , 128 , YELLOW ) ; |
taylornichols | 1:f531f70a27c3 | 114 | // lcd.printf ( "TRANSMISSION ERROR" ) ; |
taylornichols | 1:f531f70a27c3 | 115 | led2 = ! led2 ; |
taylornichols | 1:f531f70a27c3 | 116 | break ; |
taylornichols | 1:f531f70a27c3 | 117 | } |
taylornichols | 1:f531f70a27c3 | 118 | return ; |
taylornichols | 0:dd375f44efef | 119 | } |
taylornichols | 0:dd375f44efef | 120 | ++ pin_count ; |
taylornichols | 0:dd375f44efef | 121 | } |
taylornichols | 0:dd375f44efef | 122 | |
taylornichols | 0:dd375f44efef | 123 | int main ( ) |
taylornichols | 0:dd375f44efef | 124 | { |
taylornichols | 2:7d499335dda5 | 125 | lcd.printf("\nHello uLCD World\n"); //Default Green on black text |
taylornichols | 2:7d499335dda5 | 126 | lcd.printf("\n Starting Demo..."); |
taylornichols | 2:7d499335dda5 | 127 | // return 0 ; |
taylornichols | 2:7d499335dda5 | 128 | pulse_interrupt.rise ( & pulse ) ; |
taylornichols | 2:7d499335dda5 | 129 | |
taylornichols | 2:7d499335dda5 | 130 | // ... |
taylornichols | 2:7d499335dda5 | 131 | |
taylornichols | 2:7d499335dda5 | 132 | // lcd.locate(0,0); |
taylornichols | 2:7d499335dda5 | 133 | // lcd.printf("tst"); |
taylornichols | 2:7d499335dda5 | 134 | |
taylornichols | 0:dd375f44efef | 135 | // INIT |
taylornichols | 0:dd375f44efef | 136 | interrupt.fall ( & keypad_callback ) ; |
taylornichols | 0:dd375f44efef | 137 | interrupt.mode ( PullUp ) ; |
taylornichols | 1:f531f70a27c3 | 138 | // txt.locate ( 0 , 0 ) ; |
taylornichols | 1:f531f70a27c3 | 139 | // txt.printf ( "INITT" ) ; |
taylornichols | 1:f531f70a27c3 | 140 | // lcd.locate ( 2 , 2 ) ; |
taylornichols | 1:f531f70a27c3 | 141 | // lcd.printf ( "INIT" ) ; |
taylornichols | 1:f531f70a27c3 | 142 | // lcd.set_background ( RED ) ; |
taylornichols | 1:f531f70a27c3 | 143 | |
taylornichols | 0:dd375f44efef | 144 | |
taylornichols | 0:dd375f44efef | 145 | while(1) |
taylornichols | 0:dd375f44efef | 146 | { |
taylornichols | 0:dd375f44efef | 147 | led1 = 1; |
taylornichols | 0:dd375f44efef | 148 | wait(0.2); |
taylornichols | 0:dd375f44efef | 149 | led1 = 0; |
taylornichols | 0:dd375f44efef | 150 | wait(0.2); |
taylornichols | 0:dd375f44efef | 151 | } |
taylornichols | 0:dd375f44efef | 152 | } |