Sara Karimi / Mbed 2 deprecated IntruptKeypadTerminal

Dependencies:   mbed

Committer:
sarakarimi
Date:
Wed Dec 10 03:41:31 2014 +0000
Revision:
1:857e1fecbe35
Parent:
0:e6c4994727c2
second

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarakarimi 0:e6c4994727c2 1 #include "mbed.h"
sarakarimi 0:e6c4994727c2 2 #include <string>
sarakarimi 0:e6c4994727c2 3
sarakarimi 0:e6c4994727c2 4 using namespace std;
sarakarimi 0:e6c4994727c2 5
sarakarimi 0:e6c4994727c2 6 DigitalOut R1 (D6);
sarakarimi 0:e6c4994727c2 7 DigitalOut R2 (D7);
sarakarimi 0:e6c4994727c2 8 DigitalOut R3 (D8);
sarakarimi 0:e6c4994727c2 9 DigitalOut R4 (D9);
sarakarimi 0:e6c4994727c2 10
sarakarimi 0:e6c4994727c2 11 InterruptIn C1 (D10);
sarakarimi 0:e6c4994727c2 12 DigitalIn C2 (D11);
sarakarimi 0:e6c4994727c2 13 DigitalIn C3 (D12);
sarakarimi 0:e6c4994727c2 14
sarakarimi 0:e6c4994727c2 15 DigitalOut keyled(LED1);
sarakarimi 0:e6c4994727c2 16 DigitalOut flash(LED4);
sarakarimi 0:e6c4994727c2 17
sarakarimi 0:e6c4994727c2 18 AnalogIn ain(PTB0);
sarakarimi 0:e6c4994727c2 19
sarakarimi 0:e6c4994727c2 20 Timer t;
sarakarimi 0:e6c4994727c2 21 float tm ;
sarakarimi 0:e6c4994727c2 22
sarakarimi 0:e6c4994727c2 23 char key;
sarakarimi 0:e6c4994727c2 24 int s=0;
sarakarimi 0:e6c4994727c2 25
sarakarimi 0:e6c4994727c2 26 float value_adc =0.0f;
sarakarimi 0:e6c4994727c2 27 int dig_value = 0;
sarakarimi 0:e6c4994727c2 28
sarakarimi 0:e6c4994727c2 29
sarakarimi 0:e6c4994727c2 30 unsigned char arrkey[12]={ '1' , '2' , '3' ,
sarakarimi 0:e6c4994727c2 31 '4' , '5' , '6' ,
sarakarimi 0:e6c4994727c2 32 '7' , '8' , '9' ,
sarakarimi 0:e6c4994727c2 33 '*' , '0' , '#' };
sarakarimi 0:e6c4994727c2 34
sarakarimi 0:e6c4994727c2 35
sarakarimi 0:e6c4994727c2 36 void unlock (){
sarakarimi 0:e6c4994727c2 37 printf("DOOR UNLOCK: Welcome!\n\r");
sarakarimi 0:e6c4994727c2 38 }
sarakarimi 0:e6c4994727c2 39
sarakarimi 0:e6c4994727c2 40 void lock (){
sarakarimi 1:857e1fecbe35 41 printf("TIME OUT DOOR LOCK\n\r");
sarakarimi 0:e6c4994727c2 42 }
sarakarimi 0:e6c4994727c2 43
sarakarimi 0:e6c4994727c2 44 unsigned char char_string[4]= {'*' ,'*' ,'*' ,'*'};
sarakarimi 0:e6c4994727c2 45 unsigned char password[4]={'1' , '2' , '3' , '4'};
sarakarimi 0:e6c4994727c2 46 unsigned char passwordA[4]={'4' , '5' , '6' , '7'};
sarakarimi 0:e6c4994727c2 47
sarakarimi 0:e6c4994727c2 48 unsigned char keypad(){
sarakarimi 0:e6c4994727c2 49 unsigned char r,b;
sarakarimi 0:e6c4994727c2 50
sarakarimi 0:e6c4994727c2 51 while(1){
sarakarimi 0:e6c4994727c2 52
sarakarimi 0:e6c4994727c2 53 for (r=0; r<4; r++){
sarakarimi 0:e6c4994727c2 54 b=4;
sarakarimi 0:e6c4994727c2 55 R1 = 1; R2 = 1 ; R3 = 1 ; R4 = 1;
sarakarimi 0:e6c4994727c2 56 if (r == 0) R1 = 0;
sarakarimi 0:e6c4994727c2 57 if (r == 1) R2 = 0;
sarakarimi 0:e6c4994727c2 58 if (r == 2) R3 = 0;
sarakarimi 0:e6c4994727c2 59 if (r == 3) R4 = 0;
sarakarimi 0:e6c4994727c2 60
sarakarimi 0:e6c4994727c2 61 if(C1==0) b=0;
sarakarimi 0:e6c4994727c2 62 if(C2==0) b=1;
sarakarimi 0:e6c4994727c2 63 if(C3==0) b=2;
sarakarimi 0:e6c4994727c2 64
sarakarimi 0:e6c4994727c2 65 if ((!(b==4))){
sarakarimi 0:e6c4994727c2 66 key=arrkey[(r*3)+b];
sarakarimi 0:e6c4994727c2 67 while(C1==0);
sarakarimi 0:e6c4994727c2 68 while(C2==0);
sarakarimi 0:e6c4994727c2 69 while(C3==0);
sarakarimi 0:e6c4994727c2 70
sarakarimi 0:e6c4994727c2 71 wait(0.2);
sarakarimi 0:e6c4994727c2 72
sarakarimi 0:e6c4994727c2 73 char_string[s] = key;
sarakarimi 0:e6c4994727c2 74 s++;
sarakarimi 0:e6c4994727c2 75 return key;
sarakarimi 0:e6c4994727c2 76 }
sarakarimi 0:e6c4994727c2 77
sarakarimi 0:e6c4994727c2 78 }
sarakarimi 0:e6c4994727c2 79 }
sarakarimi 0:e6c4994727c2 80 }
sarakarimi 0:e6c4994727c2 81
sarakarimi 0:e6c4994727c2 82 void handleKeypad (){
sarakarimi 1:857e1fecbe35 83
sarakarimi 1:857e1fecbe35 84 bool finished = false ;
sarakarimi 1:857e1fecbe35 85 printf("In Intruppt\n\r");
sarakarimi 1:857e1fecbe35 86 C1.disable_irq ();
sarakarimi 1:857e1fecbe35 87
sarakarimi 0:e6c4994727c2 88
sarakarimi 0:e6c4994727c2 89 t.start();
sarakarimi 0:e6c4994727c2 90
sarakarimi 1:857e1fecbe35 91 printf("The time taken was %f seconds\n\r", t.read());
sarakarimi 1:857e1fecbe35 92
sarakarimi 0:e6c4994727c2 93 int firsttime = 0;
sarakarimi 1:857e1fecbe35 94
sarakarimi 0:e6c4994727c2 95
sarakarimi 0:e6c4994727c2 96 if (firsttime == 0)
sarakarimi 0:e6c4994727c2 97 s = -1;
sarakarimi 0:e6c4994727c2 98
sarakarimi 1:857e1fecbe35 99 while ((! finished)&& (t.read() < 5)){
sarakarimi 0:e6c4994727c2 100
sarakarimi 0:e6c4994727c2 101 key = keypad();
sarakarimi 0:e6c4994727c2 102
sarakarimi 1:857e1fecbe35 103 if (s == 4 ){
sarakarimi 1:857e1fecbe35 104 finished = true;
sarakarimi 0:e6c4994727c2 105 firsttime = 1;
sarakarimi 0:e6c4994727c2 106 printf("Password: ");
sarakarimi 0:e6c4994727c2 107 for (int i = 0 ; i < 4 ; i++)
sarakarimi 0:e6c4994727c2 108 printf("%c", char_string[i]);
sarakarimi 0:e6c4994727c2 109 printf("\n\r");
sarakarimi 0:e6c4994727c2 110 s = 0;
sarakarimi 0:e6c4994727c2 111
sarakarimi 0:e6c4994727c2 112 int j = 0;
sarakarimi 0:e6c4994727c2 113 int matchSara = 1;
sarakarimi 0:e6c4994727c2 114 while (j < 4){
sarakarimi 0:e6c4994727c2 115 if (char_string [j] == password[j])
sarakarimi 0:e6c4994727c2 116 j++;
sarakarimi 0:e6c4994727c2 117 else{
sarakarimi 0:e6c4994727c2 118 matchSara = 0;
sarakarimi 0:e6c4994727c2 119 break;
sarakarimi 0:e6c4994727c2 120 }
sarakarimi 0:e6c4994727c2 121 }
sarakarimi 0:e6c4994727c2 122
sarakarimi 0:e6c4994727c2 123 int k = 0;
sarakarimi 0:e6c4994727c2 124 int matchAmir = 1;
sarakarimi 0:e6c4994727c2 125 while (k < 4){
sarakarimi 0:e6c4994727c2 126 if (char_string [k] == passwordA[k])
sarakarimi 0:e6c4994727c2 127 k++;
sarakarimi 0:e6c4994727c2 128 else{
sarakarimi 0:e6c4994727c2 129 matchAmir = 0;
sarakarimi 0:e6c4994727c2 130 break;
sarakarimi 0:e6c4994727c2 131 }
sarakarimi 0:e6c4994727c2 132 }
sarakarimi 0:e6c4994727c2 133
sarakarimi 0:e6c4994727c2 134 if (matchSara == 1){
sarakarimi 0:e6c4994727c2 135 printf("MATCH Sara\n\r");
sarakarimi 0:e6c4994727c2 136 unlock();
sarakarimi 1:857e1fecbe35 137 t.stop();
sarakarimi 0:e6c4994727c2 138 t.reset();
sarakarimi 1:857e1fecbe35 139 C1.enable_irq();
sarakarimi 0:e6c4994727c2 140 break;
sarakarimi 0:e6c4994727c2 141 }
sarakarimi 0:e6c4994727c2 142 else if (matchAmir == 1){
sarakarimi 0:e6c4994727c2 143 printf("MATCH Amir\n\r");
sarakarimi 0:e6c4994727c2 144 unlock();
sarakarimi 1:857e1fecbe35 145 t.stop();
sarakarimi 0:e6c4994727c2 146 t.reset();
sarakarimi 1:857e1fecbe35 147 C1.enable_irq();
sarakarimi 0:e6c4994727c2 148 break;
sarakarimi 0:e6c4994727c2 149 }
sarakarimi 0:e6c4994727c2 150 else{
sarakarimi 0:e6c4994727c2 151 printf("WRONG\n\r");
sarakarimi 0:e6c4994727c2 152 printf("lock for wrong password\n\r");
sarakarimi 1:857e1fecbe35 153 t.stop();
sarakarimi 0:e6c4994727c2 154 t.reset();
sarakarimi 1:857e1fecbe35 155 C1.enable_irq();
sarakarimi 0:e6c4994727c2 156 break;
sarakarimi 0:e6c4994727c2 157 //t.reset();
sarakarimi 0:e6c4994727c2 158 }
sarakarimi 0:e6c4994727c2 159
sarakarimi 0:e6c4994727c2 160 }
sarakarimi 0:e6c4994727c2 161 if (t.read() > 7){
sarakarimi 0:e6c4994727c2 162 lock();
sarakarimi 0:e6c4994727c2 163 t.stop();
sarakarimi 0:e6c4994727c2 164 t.reset();
sarakarimi 1:857e1fecbe35 165 C1.enable_irq();
sarakarimi 0:e6c4994727c2 166 break;
sarakarimi 0:e6c4994727c2 167 } // end timer
sarakarimi 0:e6c4994727c2 168
sarakarimi 0:e6c4994727c2 169 } // end while
sarakarimi 0:e6c4994727c2 170
sarakarimi 0:e6c4994727c2 171 }
sarakarimi 0:e6c4994727c2 172
sarakarimi 0:e6c4994727c2 173
sarakarimi 0:e6c4994727c2 174 void TestIntrpt(){
sarakarimi 0:e6c4994727c2 175 int counter = 0;
sarakarimi 0:e6c4994727c2 176
sarakarimi 0:e6c4994727c2 177 t.start();
sarakarimi 0:e6c4994727c2 178
sarakarimi 0:e6c4994727c2 179 while (1){
sarakarimi 0:e6c4994727c2 180 counter++ ;
sarakarimi 0:e6c4994727c2 181 keyled = 1;
sarakarimi 0:e6c4994727c2 182 wait(0.2);
sarakarimi 0:e6c4994727c2 183 keyled = 0;
sarakarimi 0:e6c4994727c2 184 wait(0.2);
sarakarimi 0:e6c4994727c2 185 // tm = t.read();
sarakarimi 0:e6c4994727c2 186 if (t.read() > 5){
sarakarimi 0:e6c4994727c2 187 keyled = 1;
sarakarimi 0:e6c4994727c2 188 t.stop();
sarakarimi 0:e6c4994727c2 189 t.reset();
sarakarimi 0:e6c4994727c2 190 C1.enable_irq();
sarakarimi 0:e6c4994727c2 191 break;
sarakarimi 0:e6c4994727c2 192 }
sarakarimi 0:e6c4994727c2 193 }
sarakarimi 0:e6c4994727c2 194 }
sarakarimi 0:e6c4994727c2 195
sarakarimi 0:e6c4994727c2 196
sarakarimi 0:e6c4994727c2 197 int main() {
sarakarimi 0:e6c4994727c2 198
sarakarimi 0:e6c4994727c2 199 keyled = 1;
sarakarimi 1:857e1fecbe35 200
sarakarimi 0:e6c4994727c2 201
sarakarimi 0:e6c4994727c2 202 while(1) { // wait around, interrupts will interrupt this!
sarakarimi 1:857e1fecbe35 203 R4 = 0;
sarakarimi 1:857e1fecbe35 204 C1.fall(&handleKeypad);
sarakarimi 1:857e1fecbe35 205 t.reset();
sarakarimi 0:e6c4994727c2 206 value_adc = ain.read();
sarakarimi 0:e6c4994727c2 207 printf("Analog %5.2f\n\r",value_adc);
sarakarimi 0:e6c4994727c2 208
sarakarimi 0:e6c4994727c2 209 if (value_adc < 0.2){
sarakarimi 0:e6c4994727c2 210 printf("Nobody is here!\n\r");
sarakarimi 0:e6c4994727c2 211 }
sarakarimi 0:e6c4994727c2 212 else {
sarakarimi 0:e6c4994727c2 213 printf("Somebody is here!\n\r");
sarakarimi 0:e6c4994727c2 214 }
sarakarimi 0:e6c4994727c2 215 wait(2);
sarakarimi 0:e6c4994727c2 216 //lcd.cls();
sarakarimi 0:e6c4994727c2 217
sarakarimi 0:e6c4994727c2 218 }
sarakarimi 0:e6c4994727c2 219
sarakarimi 0:e6c4994727c2 220 //TestIntrpt();
sarakarimi 0:e6c4994727c2 221 //handleKeypad();
sarakarimi 0:e6c4994727c2 222 }