attempt 1

Dependencies:   mbed

Committer:
jaredwil
Date:
Fri Mar 20 21:00:49 2015 +0000
Revision:
0:fda0081e634b
Child:
1:54ae0e3ae1b7
elevator lab attempt 1;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jaredwil 0:fda0081e634b 1 #include "mbed.h"
jaredwil 0:fda0081e634b 2 #include <map>
jaredwil 0:fda0081e634b 3
jaredwil 0:fda0081e634b 4 //elevator I/O
jaredwil 0:fda0081e634b 5 BusOut leds(LED1,LED2,LED3,LED4);
jaredwil 0:fda0081e634b 6 PwmOut DC(p21);
jaredwil 0:fda0081e634b 7 PwmOut servo1(p22);
jaredwil 0:fda0081e634b 8 PwmOut servo2(p23);
jaredwil 0:fda0081e634b 9 AnalogIn irIN(p16);
jaredwil 0:fda0081e634b 10
jaredwil 0:fda0081e634b 11 Serial pc(USBTX, USBRX);
jaredwil 0:fda0081e634b 12
jaredwil 0:fda0081e634b 13
jaredwil 0:fda0081e634b 14 //itizilize digital I/O for keypad
jaredwil 0:fda0081e634b 15 DigitalOut row1(p24);
jaredwil 0:fda0081e634b 16 DigitalOut row2(p25);
jaredwil 0:fda0081e634b 17 DigitalIn col1(p20);
jaredwil 0:fda0081e634b 18 DigitalIn col2(p19);
jaredwil 0:fda0081e634b 19 DigitalIn col3(p18);
jaredwil 0:fda0081e634b 20
jaredwil 0:fda0081e634b 21 //timer for row switch
jaredwil 0:fda0081e634b 22 Timer t1;
jaredwil 0:fda0081e634b 23 Timer irT;
jaredwil 0:fda0081e634b 24 //init keypad map
jaredwil 0:fda0081e634b 25 map<int, int> keypadMap;
jaredwil 0:fda0081e634b 26
jaredwil 0:fda0081e634b 27 void init(){
jaredwil 0:fda0081e634b 28 keypadMap[0x11]= 0x1;
jaredwil 0:fda0081e634b 29 keypadMap[0x12]= 0x2;
jaredwil 0:fda0081e634b 30 keypadMap[0x14]= 0x4;
jaredwil 0:fda0081e634b 31 keypadMap[0x18]= 0x0;
jaredwil 0:fda0081e634b 32 keypadMap[0x21]= 0x8;
jaredwil 0:fda0081e634b 33 keypadMap[0x22]= 0x0;
jaredwil 0:fda0081e634b 34 keypadMap[0x24]= 0x0;
jaredwil 0:fda0081e634b 35 keypadMap[0x28]= 0x0;
jaredwil 0:fda0081e634b 36 }
jaredwil 0:fda0081e634b 37
jaredwil 0:fda0081e634b 38 int main() {
jaredwil 0:fda0081e634b 39
jaredwil 0:fda0081e634b 40 init();
jaredwil 0:fda0081e634b 41 //Initialize rows to 0 and keypad stuff
jaredwil 0:fda0081e634b 42 row1 = 0;
jaredwil 0:fda0081e634b 43 row2 = 0;
jaredwil 0:fda0081e634b 44 t1.start();
jaredwil 0:fda0081e634b 45 int cur_input = 0x00;
jaredwil 0:fda0081e634b 46 int prev_input = 0x00;
jaredwil 0:fda0081e634b 47 float irPeriod = 0;
jaredwil 0:fda0081e634b 48
jaredwil 0:fda0081e634b 49 int nofloor = 0; //set nofloor state to 0
jaredwil 0:fda0081e634b 50
jaredwil 0:fda0081e634b 51 //initialize servo and dc motor
jaredwil 0:fda0081e634b 52 float freq = 50;
jaredwil 0:fda0081e634b 53 DC.period(1/freq); // set PWM period to user specified for high tone
jaredwil 0:fda0081e634b 54 DC=0.4; // set duty cycle to 50%
jaredwil 0:fda0081e634b 55 servo1.period(1/freq); // set PWM period to user specified for high tone
jaredwil 0:fda0081e634b 56 servo1=0.0375; // set duty cycle to 50%
jaredwil 0:fda0081e634b 57 servo2.period(1/freq); // set PWM period to user specified for high tone
jaredwil 0:fda0081e634b 58 servo2=0.1125; // set duty cycle to 50%
jaredwil 0:fda0081e634b 59
jaredwil 0:fda0081e634b 60 while(1) {
jaredwil 0:fda0081e634b 61
jaredwil 0:fda0081e634b 62 /////////////////////////////floor detection//////////////////////////////////////
jaredwil 0:fda0081e634b 63
jaredwil 0:fda0081e634b 64
jaredwil 0:fda0081e634b 65 //floor detected
jaredwil 0:fda0081e634b 66 if(irIN > 0.95){
jaredwil 0:fda0081e634b 67 irT.start(); //start IRfloor timer
jaredwil 0:fda0081e634b 68 nofloor = 0; //set nofloor state to 0
jaredwil 0:fda0081e634b 69 }
jaredwil 0:fda0081e634b 70 else if(irIN < 0.5 && nofloor == 0){
jaredwil 0:fda0081e634b 71 irT.stop(); //stop timer
jaredwil 0:fda0081e634b 72 irPeriod = irT.read_us(); //read time
jaredwil 0:fda0081e634b 73 irT.reset(); //reset
jaredwil 0:fda0081e634b 74 nofloor = 1; //no current floor detcted
jaredwil 0:fda0081e634b 75 //make floor decision based on irPeriod
jaredwil 0:fda0081e634b 76 pc.printf("Detected Period: %f val %f\r",irPeriod,irIN.read());
jaredwil 0:fda0081e634b 77
jaredwil 0:fda0081e634b 78 }
jaredwil 0:fda0081e634b 79
jaredwil 0:fda0081e634b 80
jaredwil 0:fda0081e634b 81
jaredwil 0:fda0081e634b 82 /////////////Below contains all code in order to detect current input from keypad////////////////////////////
jaredwil 0:fda0081e634b 83 if(prev_input == 0){
jaredwil 0:fda0081e634b 84
jaredwil 0:fda0081e634b 85 row1 = 0;
jaredwil 0:fda0081e634b 86 row2 = 0;
jaredwil 0:fda0081e634b 87 //Keep each pin on for 4ms
jaredwil 0:fda0081e634b 88 //"turn on" appropriat bit in map when on.
jaredwil 0:fda0081e634b 89 switch(t1.read_ms()%8){
jaredwil 0:fda0081e634b 90 case 0:
jaredwil 0:fda0081e634b 91 row1 = 1;
jaredwil 0:fda0081e634b 92 cur_input |= 0x10;
jaredwil 0:fda0081e634b 93 break;
jaredwil 0:fda0081e634b 94 case 4:
jaredwil 0:fda0081e634b 95 row2 = 1;
jaredwil 0:fda0081e634b 96 cur_input |= 0x20;
jaredwil 0:fda0081e634b 97 break;
jaredwil 0:fda0081e634b 98 }
jaredwil 0:fda0081e634b 99 }
jaredwil 0:fda0081e634b 100
jaredwil 0:fda0081e634b 101 //Check each colum to see if it is high
jaredwil 0:fda0081e634b 102 //if it is "turn on" that respective bit
jaredwil 0:fda0081e634b 103 if(col1 == 1)
jaredwil 0:fda0081e634b 104 cur_input |= 0x01;
jaredwil 0:fda0081e634b 105 else if(col2 == 1)
jaredwil 0:fda0081e634b 106 cur_input |= 0x02;
jaredwil 0:fda0081e634b 107 else if(col3 == 1)
jaredwil 0:fda0081e634b 108 cur_input |= 0x04;
jaredwil 0:fda0081e634b 109 else cur_input = 0; //Detect button release or no input set input to 0
jaredwil 0:fda0081e634b 110
jaredwil 0:fda0081e634b 111 leds = keypadMap[cur_input];
jaredwil 0:fda0081e634b 112 //Maintain the past input
jaredwil 0:fda0081e634b 113 prev_input = cur_input;
jaredwil 0:fda0081e634b 114 /////////////////////////////////////////END KEYPAD//////////////////////////////////////////////////////////
jaredwil 0:fda0081e634b 115
jaredwil 0:fda0081e634b 116
jaredwil 0:fda0081e634b 117 }
jaredwil 0:fda0081e634b 118
jaredwil 0:fda0081e634b 119
jaredwil 0:fda0081e634b 120 }