![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
attempt 1
Dependencies: mbed
main.cpp@0:fda0081e634b, 2015-03-20 (annotated)
- 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?
User | Revision | Line number | New 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 | } |