ECE 4180 Final Project

Dependencies:   4DGL-uLCD-SE mbed

Committer:
dbegasse
Date:
Wed Dec 02 01:31:21 2015 +0000
Revision:
0:69cae396d104
Child:
1:f7383e13e64f
before i added the xbee code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dbegasse 0:69cae396d104 1 //Daniel Begasse
dbegasse 0:69cae396d104 2 //ECE 4180 Final Project
dbegasse 0:69cae396d104 3
dbegasse 0:69cae396d104 4 #include "mbed.h"
dbegasse 0:69cae396d104 5 #include "uLCD_4DGL.h"
dbegasse 0:69cae396d104 6 #include <stdio.h>
dbegasse 0:69cae396d104 7 #include <stdlib.h>
dbegasse 0:69cae396d104 8 #include <mpr121.h>
dbegasse 0:69cae396d104 9 #include <vector>
dbegasse 0:69cae396d104 10 #include <iostream>
dbegasse 0:69cae396d104 11 #include <string>
dbegasse 0:69cae396d104 12
dbegasse 0:69cae396d104 13 using namespace std;
dbegasse 0:69cae396d104 14
dbegasse 0:69cae396d104 15 //Set up the interrupt pin
dbegasse 0:69cae396d104 16 InterruptIn interrupt(p26);
dbegasse 0:69cae396d104 17
dbegasse 0:69cae396d104 18 // Setup the i2c bus on pins 9 and 10
dbegasse 0:69cae396d104 19 I2C i2c(p9, p10);
dbegasse 0:69cae396d104 20
dbegasse 0:69cae396d104 21 // constructor(i2c object, i2c address of the mpr121)
dbegasse 0:69cae396d104 22 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
dbegasse 0:69cae396d104 23
dbegasse 0:69cae396d104 24 //create a global lcd project
dbegasse 0:69cae396d104 25 uLCD_4DGL uLCD(p28, p27, p30);
dbegasse 0:69cae396d104 26
dbegasse 0:69cae396d104 27 // Setup the Serial to the PC for debugging
dbegasse 0:69cae396d104 28 Serial pc(USBTX, USBRX);
dbegasse 0:69cae396d104 29
dbegasse 0:69cae396d104 30 //Setup the timer
dbegasse 0:69cae396d104 31 //Timer t;
dbegasse 0:69cae396d104 32
dbegasse 0:69cae396d104 33
dbegasse 0:69cae396d104 34 volatile bool tripped = false;
dbegasse 0:69cae396d104 35 volatile bool validkey;//This represents if the key pressed was a valid key
dbegasse 0:69cae396d104 36 volatile int oldpressed;//This is the previous key that was pressed
dbegasse 0:69cae396d104 37 volatile int value;//This is the value coming in from the register
dbegasse 0:69cae396d104 38 volatile int pressed;//This is the current key being pressed
dbegasse 0:69cae396d104 39 volatile int pressedcount = 0;//This is how many times the current key has been repeatedly pressed
dbegasse 0:69cae396d104 40 int cursor_row = 0;
dbegasse 0:69cae396d104 41 int cursor_col = 0;
dbegasse 0:69cae396d104 42 char message[100];
dbegasse 0:69cae396d104 43 int char_count = 0;//This is the number of times the space button has been pressed for the current message
dbegasse 0:69cae396d104 44
dbegasse 0:69cae396d104 45 char key_1[1] = {'1'};
dbegasse 0:69cae396d104 46 char key_2[4] = {'a','b','c','2'};
dbegasse 0:69cae396d104 47 char key_3[4] = {'d','e','f','3'};
dbegasse 0:69cae396d104 48 char key_4[4] = {'g','h','i','4'};
dbegasse 0:69cae396d104 49 char key_5[4] = {'j','k','l','5'};
dbegasse 0:69cae396d104 50 char key_6[4] = {'m','n','o','6'};
dbegasse 0:69cae396d104 51 char key_7[5] = {'p','q','r','s','7'};
dbegasse 0:69cae396d104 52 char key_8[4] = {'t','u','v','8'};
dbegasse 0:69cae396d104 53 char key_9[5] = {'w','x','y','z','9'};
dbegasse 0:69cae396d104 54 char key_10[1] = {' '};
dbegasse 0:69cae396d104 55
dbegasse 0:69cae396d104 56
dbegasse 0:69cae396d104 57
dbegasse 0:69cae396d104 58 void fallInterrupt() {
dbegasse 0:69cae396d104 59
dbegasse 0:69cae396d104 60 validkey = false;//Each key pressed is invalid until proven to be valid
dbegasse 0:69cae396d104 61 value = mpr121.read(0x00);
dbegasse 0:69cae396d104 62 value += mpr121.read(0x01)<<8;
dbegasse 0:69cae396d104 63 //pc.printf("Value: %x \r\n", value);
dbegasse 0:69cae396d104 64
dbegasse 0:69cae396d104 65
dbegasse 0:69cae396d104 66 //Take the value from the register and use it to assign a key #
dbegasse 0:69cae396d104 67 switch(value){
dbegasse 0:69cae396d104 68
dbegasse 0:69cae396d104 69 case (0x1):
dbegasse 0:69cae396d104 70 pressed = 10;
dbegasse 0:69cae396d104 71 validkey = true;
dbegasse 0:69cae396d104 72 break;
dbegasse 0:69cae396d104 73 case (0x10):
dbegasse 0:69cae396d104 74 pressed = 11;
dbegasse 0:69cae396d104 75 validkey = true;
dbegasse 0:69cae396d104 76 break;
dbegasse 0:69cae396d104 77 case (0x100):
dbegasse 0:69cae396d104 78 pressed = 12;
dbegasse 0:69cae396d104 79 validkey = true;
dbegasse 0:69cae396d104 80 break;
dbegasse 0:69cae396d104 81 case (0x2):
dbegasse 0:69cae396d104 82 pressed = 7;
dbegasse 0:69cae396d104 83 validkey = true;
dbegasse 0:69cae396d104 84 break;
dbegasse 0:69cae396d104 85 case (0x20):
dbegasse 0:69cae396d104 86 pressed = 8;
dbegasse 0:69cae396d104 87 validkey = true;
dbegasse 0:69cae396d104 88 break;
dbegasse 0:69cae396d104 89 case (0x200):
dbegasse 0:69cae396d104 90 pressed = 9;
dbegasse 0:69cae396d104 91 validkey = true;
dbegasse 0:69cae396d104 92 break;
dbegasse 0:69cae396d104 93 case (0x4):
dbegasse 0:69cae396d104 94 pressed = 4;
dbegasse 0:69cae396d104 95 validkey = true;
dbegasse 0:69cae396d104 96 break;
dbegasse 0:69cae396d104 97 case (0x40):
dbegasse 0:69cae396d104 98 pressed = 5;
dbegasse 0:69cae396d104 99 validkey = true;
dbegasse 0:69cae396d104 100 break;
dbegasse 0:69cae396d104 101 case (0x400):
dbegasse 0:69cae396d104 102 pressed = 6;
dbegasse 0:69cae396d104 103 validkey = true;
dbegasse 0:69cae396d104 104 break;
dbegasse 0:69cae396d104 105 case (0x8):
dbegasse 0:69cae396d104 106 pressed = 1;
dbegasse 0:69cae396d104 107 validkey = true;
dbegasse 0:69cae396d104 108 break;
dbegasse 0:69cae396d104 109 case (0x80):
dbegasse 0:69cae396d104 110 pressed = 2;
dbegasse 0:69cae396d104 111 validkey = true;
dbegasse 0:69cae396d104 112 break;
dbegasse 0:69cae396d104 113 case (0x800):
dbegasse 0:69cae396d104 114 pressed = 3;
dbegasse 0:69cae396d104 115 validkey = true;
dbegasse 0:69cae396d104 116 break;
dbegasse 0:69cae396d104 117 default:
dbegasse 0:69cae396d104 118 validkey = false;
dbegasse 0:69cae396d104 119 break;
dbegasse 0:69cae396d104 120 }
dbegasse 0:69cae396d104 121
dbegasse 0:69cae396d104 122
dbegasse 0:69cae396d104 123 //If the two values are different, assign pressed to oldpressed
dbegasse 0:69cae396d104 124 if ((pressed != oldpressed) && (validkey == true) ){
dbegasse 0:69cae396d104 125
dbegasse 0:69cae396d104 126 oldpressed = pressed;
dbegasse 0:69cae396d104 127 pressedcount = 0;
dbegasse 0:69cae396d104 128 char_count++;//move the cursor over if there is a new key
dbegasse 0:69cae396d104 129
dbegasse 0:69cae396d104 130
dbegasse 0:69cae396d104 131 }
dbegasse 0:69cae396d104 132
dbegasse 0:69cae396d104 133 else if ((pressed == oldpressed) && (value != 0)) {
dbegasse 0:69cae396d104 134
dbegasse 0:69cae396d104 135 pressedcount++;
dbegasse 0:69cae396d104 136
dbegasse 0:69cae396d104 137 }
dbegasse 0:69cae396d104 138
dbegasse 0:69cae396d104 139
dbegasse 0:69cae396d104 140 }
dbegasse 0:69cae396d104 141
dbegasse 0:69cae396d104 142
dbegasse 0:69cae396d104 143 void checkCharacter(){
dbegasse 0:69cae396d104 144
dbegasse 0:69cae396d104 145
dbegasse 0:69cae396d104 146 if (pressed == 1){
dbegasse 0:69cae396d104 147
dbegasse 0:69cae396d104 148 if (pressedcount > 0){
dbegasse 0:69cae396d104 149
dbegasse 0:69cae396d104 150 pressedcount = 0;
dbegasse 0:69cae396d104 151
dbegasse 0:69cae396d104 152 }
dbegasse 0:69cae396d104 153
dbegasse 0:69cae396d104 154 message[char_count] = '1';
dbegasse 0:69cae396d104 155
dbegasse 0:69cae396d104 156 }
dbegasse 0:69cae396d104 157
dbegasse 0:69cae396d104 158
dbegasse 0:69cae396d104 159 if (pressed == 2){
dbegasse 0:69cae396d104 160
dbegasse 0:69cae396d104 161 if (pressedcount > 3){
dbegasse 0:69cae396d104 162
dbegasse 0:69cae396d104 163 pressedcount = 0;
dbegasse 0:69cae396d104 164
dbegasse 0:69cae396d104 165 }
dbegasse 0:69cae396d104 166
dbegasse 0:69cae396d104 167 message[char_count] = key_2[pressedcount];
dbegasse 0:69cae396d104 168
dbegasse 0:69cae396d104 169 }
dbegasse 0:69cae396d104 170
dbegasse 0:69cae396d104 171 if (pressed == 3){
dbegasse 0:69cae396d104 172
dbegasse 0:69cae396d104 173 if (pressedcount > 3){
dbegasse 0:69cae396d104 174
dbegasse 0:69cae396d104 175 pressedcount = 0;
dbegasse 0:69cae396d104 176
dbegasse 0:69cae396d104 177 }
dbegasse 0:69cae396d104 178
dbegasse 0:69cae396d104 179 message[char_count] = key_3[pressedcount];
dbegasse 0:69cae396d104 180
dbegasse 0:69cae396d104 181 }
dbegasse 0:69cae396d104 182
dbegasse 0:69cae396d104 183 if (pressed == 4){
dbegasse 0:69cae396d104 184
dbegasse 0:69cae396d104 185 if (pressedcount > 3){
dbegasse 0:69cae396d104 186
dbegasse 0:69cae396d104 187 pressedcount = 0;
dbegasse 0:69cae396d104 188
dbegasse 0:69cae396d104 189 }
dbegasse 0:69cae396d104 190
dbegasse 0:69cae396d104 191 message[char_count] = key_4[pressedcount];
dbegasse 0:69cae396d104 192
dbegasse 0:69cae396d104 193 }
dbegasse 0:69cae396d104 194
dbegasse 0:69cae396d104 195 if (pressed == 5){
dbegasse 0:69cae396d104 196
dbegasse 0:69cae396d104 197 if (pressedcount > 3){
dbegasse 0:69cae396d104 198
dbegasse 0:69cae396d104 199 pressedcount = 0;
dbegasse 0:69cae396d104 200
dbegasse 0:69cae396d104 201 }
dbegasse 0:69cae396d104 202
dbegasse 0:69cae396d104 203 message[char_count] = key_5[pressedcount];
dbegasse 0:69cae396d104 204
dbegasse 0:69cae396d104 205 }
dbegasse 0:69cae396d104 206
dbegasse 0:69cae396d104 207 if (pressed == 6){
dbegasse 0:69cae396d104 208
dbegasse 0:69cae396d104 209 if (pressedcount > 3){
dbegasse 0:69cae396d104 210
dbegasse 0:69cae396d104 211 pressedcount = 0;
dbegasse 0:69cae396d104 212
dbegasse 0:69cae396d104 213 }
dbegasse 0:69cae396d104 214
dbegasse 0:69cae396d104 215 message[char_count] = key_6[pressedcount];
dbegasse 0:69cae396d104 216
dbegasse 0:69cae396d104 217 }
dbegasse 0:69cae396d104 218
dbegasse 0:69cae396d104 219 if (pressed == 7){
dbegasse 0:69cae396d104 220
dbegasse 0:69cae396d104 221 if (pressedcount > 4){
dbegasse 0:69cae396d104 222
dbegasse 0:69cae396d104 223 pressedcount = 0;
dbegasse 0:69cae396d104 224
dbegasse 0:69cae396d104 225 }
dbegasse 0:69cae396d104 226
dbegasse 0:69cae396d104 227 message[char_count] = key_7[pressedcount];
dbegasse 0:69cae396d104 228
dbegasse 0:69cae396d104 229 }
dbegasse 0:69cae396d104 230
dbegasse 0:69cae396d104 231 if (pressed == 8){
dbegasse 0:69cae396d104 232
dbegasse 0:69cae396d104 233 if (pressedcount > 3){
dbegasse 0:69cae396d104 234
dbegasse 0:69cae396d104 235 pressedcount = 0;
dbegasse 0:69cae396d104 236
dbegasse 0:69cae396d104 237 }
dbegasse 0:69cae396d104 238
dbegasse 0:69cae396d104 239 message[char_count] = key_8[pressedcount];
dbegasse 0:69cae396d104 240
dbegasse 0:69cae396d104 241 }
dbegasse 0:69cae396d104 242
dbegasse 0:69cae396d104 243 if (pressed == 9){
dbegasse 0:69cae396d104 244
dbegasse 0:69cae396d104 245 if (pressedcount > 4){
dbegasse 0:69cae396d104 246
dbegasse 0:69cae396d104 247 pressedcount = 0;
dbegasse 0:69cae396d104 248
dbegasse 0:69cae396d104 249 }
dbegasse 0:69cae396d104 250
dbegasse 0:69cae396d104 251 message[char_count] = key_9[pressedcount];
dbegasse 0:69cae396d104 252
dbegasse 0:69cae396d104 253 }
dbegasse 0:69cae396d104 254
dbegasse 0:69cae396d104 255
dbegasse 0:69cae396d104 256 if (pressed == 10) {
dbegasse 0:69cae396d104 257
dbegasse 0:69cae396d104 258
dbegasse 0:69cae396d104 259 message[char_count] = ' ';
dbegasse 0:69cae396d104 260
dbegasse 0:69cae396d104 261 }
dbegasse 0:69cae396d104 262
dbegasse 0:69cae396d104 263 }
dbegasse 0:69cae396d104 264
dbegasse 0:69cae396d104 265 void printMessage(){
dbegasse 0:69cae396d104 266
dbegasse 0:69cae396d104 267 uLCD.locate(cursor_col ,cursor_row);
dbegasse 0:69cae396d104 268
dbegasse 0:69cae396d104 269 //To save time only print if the size of the array has changed
dbegasse 0:69cae396d104 270 //look at char count to tell
dbegasse 0:69cae396d104 271
dbegasse 0:69cae396d104 272 for ( unsigned i = 0; i <= char_count; i++ ){
dbegasse 0:69cae396d104 273
dbegasse 0:69cae396d104 274 uLCD.printf("%c", message[i]);
dbegasse 0:69cae396d104 275 }
dbegasse 0:69cae396d104 276
dbegasse 0:69cae396d104 277 //message[char_count + 1] = '|';
dbegasse 0:69cae396d104 278
dbegasse 0:69cae396d104 279
dbegasse 0:69cae396d104 280
dbegasse 0:69cae396d104 281 }
dbegasse 0:69cae396d104 282
dbegasse 0:69cae396d104 283 void printCursor(){
dbegasse 0:69cae396d104 284
dbegasse 0:69cae396d104 285 uLCD.text_char('|',char_count + 1, cursor_row, BLUE);
dbegasse 0:69cae396d104 286 wait(.5);
dbegasse 0:69cae396d104 287 uLCD.text_char('|',char_count + 1, cursor_row, BLACK);
dbegasse 0:69cae396d104 288 wait(.5);
dbegasse 0:69cae396d104 289
dbegasse 0:69cae396d104 290 }
dbegasse 0:69cae396d104 291
dbegasse 0:69cae396d104 292
dbegasse 0:69cae396d104 293 int main(){
dbegasse 0:69cae396d104 294
dbegasse 0:69cae396d104 295 pc.baud(9600);
dbegasse 0:69cae396d104 296
dbegasse 0:69cae396d104 297 interrupt.mode(PullUp);
dbegasse 0:69cae396d104 298 wait(.001);
dbegasse 0:69cae396d104 299 interrupt.fall(&fallInterrupt);
dbegasse 0:69cae396d104 300
dbegasse 0:69cae396d104 301 //Timer t;
dbegasse 0:69cae396d104 302
dbegasse 0:69cae396d104 303 while(1){
dbegasse 0:69cae396d104 304
dbegasse 0:69cae396d104 305
dbegasse 0:69cae396d104 306
dbegasse 0:69cae396d104 307 //pc.printf("Whats in the list... %c\n", message[char_count]);
dbegasse 0:69cae396d104 308 checkCharacter();
dbegasse 0:69cae396d104 309 //printCursor();
dbegasse 0:69cae396d104 310 printMessage();
dbegasse 0:69cae396d104 311
dbegasse 0:69cae396d104 312 //USE A PUSH BUTTON TO MOVE THE CURSOR MANUALLY
dbegasse 0:69cae396d104 313 //WHEN YOU MOVE THE CURSOR, ADD THE PREVIOUS CHARACTER TO THE MESSAGE VECTOR
dbegasse 0:69cae396d104 314 //THEN WHEN YOU TRY TO SEND YOU SEND THE VECTORO
dbegasse 0:69cae396d104 315
dbegasse 0:69cae396d104 316 }
dbegasse 0:69cae396d104 317
dbegasse 0:69cae396d104 318 }
dbegasse 0:69cae396d104 319
dbegasse 0:69cae396d104 320
dbegasse 0:69cae396d104 321
dbegasse 0:69cae396d104 322
dbegasse 0:69cae396d104 323