Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ESE519_Lab3_v4 by
Revision 5:5380953108bb, committed 2015-10-16
- Comitter:
- jfields
- Date:
- Fri Oct 16 17:41:00 2015 +0000
- Parent:
- 4:0b22363eb57c
- Commit message:
- ec
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Oct 16 17:22:40 2015 +0000 +++ b/main.cpp Fri Oct 16 17:41:00 2015 +0000 @@ -6,11 +6,11 @@ Serial pc(USBTX,USBRX); // functions -//void find_keys(); void check_floor(); void get_floor(); // uses floor period to set cur_floor void get_period(); void led_update(); +void update_q(); // Threads void bpc_func(void const *args); @@ -25,15 +25,6 @@ InterruptIn IRSensor(p10); // read IR sensor AnalogIn Button(p15); // elevator button press Voltage = 3.3*0.2*n ; n = Floor Number -// keyboard read -/* -DigitalIn col1(p20); -DigitalIn col2(p19); -DigitalIn col3(p18); -DigitalOut row1(p30); -DigitalOut row2(p27); -*/ - // LEDs for testing DigitalOut led1(LED1); DigitalOut led2(LED2); @@ -53,12 +44,17 @@ int count = 0; int test_readings = 0; // need 4 consecutive readings to declare cur_floor int test_floor = 0; +int el_q [4]; +int el_q_size = 0; int main() { // init interrupt handler IRSensor.fall(&get_period); + // init queue + for (int i=0;i<4;i++) el_q[i] = 0; + // set period (constant) dc_motor.period(period); servo1.period(period); @@ -87,12 +83,10 @@ //find_keys(); // execute elevator alg - if (keyPressed) { + if (!el_q_size) { - led1 = 1; - led2 = 1; - led3 = 1; - led4 = 1; + desired_floor = el_q[0]; + update_q(); // check if need to move if (cur_floor != desired_floor) { @@ -123,45 +117,13 @@ // open door servo1.write(dty_servo_open); servo2.write(dty_servo_open); - keyPressed = 0; + wait(2); + //keyPressed = 0; } } } -/* -void find_keys() { - - // check row 1 - row1 = 0; - row2 = 1; - if (!col1) { - desired_floor = 1; - keyPressed = 1; - } - if (!col2) { - desired_floor = 2; - keyPressed = 1; - } - if (!col3) { - desired_floor = 3; - keyPressed = 1; - } - - // check row 2 - row1 = 1; - row2 = 0; - if (!col1) { - desired_floor = 4; - keyPressed = 1; - } - if (!col2) { - desired_floor = 5; - keyPressed = 1; - } -} -*/ - void get_floor() { if(floor_period > 9900 && floor_period < 10100) { if (test_floor == 1) { @@ -257,24 +219,41 @@ float ADC_val = Button.read(); int val = ADC_val*10; if(val == 2) { - desired_floor = 1; - keyPressed = 1; + //desired_floor = 1; + //keyPressed = 1; + el_q[el_q_size] = 1; + el_q_size++; } else if(val == 4) { - desired_floor = 2; - keyPressed = 1; + //desired_floor = 2; + //keyPressed = 1; + el_q[el_q_size] = 2; + el_q_size++; } else if(val == 6) { - desired_floor = 3; - keyPressed = 1; + //desired_floor = 3; + //keyPressed = 1; + el_q[el_q_size] = 3; + el_q_size++; } else if(val == 8) { - desired_floor = 4; - keyPressed = 1; + //desired_floor = 4; + //keyPressed = 1; + el_q[el_q_size] = 4; + el_q_size++; } else if(val == 10) { - desired_floor = 5; - keyPressed = 1; + //desired_floor = 5; + //keyPressed = 1; + el_q[el_q_size] = 5; + el_q_size++; } wait(0.1); - while (keyPressed) { // wait for elevator to arrive at desired floor - wait(.2); + while (el_q_size == 4) { // wait for queue to empty + wait(0.2); } } -} \ No newline at end of file +} + +void update_q() { + for (int i=1;i<el_q_size;i++) { + el_q[i-1] = el_q[i]; + } + el_q_size--; +}