Blind flap motion emulator using stepper motor. Different input methods are used including Light Dependent Resistors, Bluetooth, Voice command, Hand Gesture, and on-board switches. FRDM-K64F board is used to develop the system.
main.cpp@0:b27dea26e7e6, 2020-05-07 (annotated)
- Committer:
- amasudch
- Date:
- Thu May 07 02:22:10 2020 +0000
- Revision:
- 0:b27dea26e7e6
This was prepared as the final project of the ECE595: Design with Embedded Systems project 2.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
amasudch | 0:b27dea26e7e6 | 1 | #include "mbed.h" |
amasudch | 0:b27dea26e7e6 | 2 | #include "platform/mbed_thread.h" |
amasudch | 0:b27dea26e7e6 | 3 | |
amasudch | 0:b27dea26e7e6 | 4 | //Pin Declaration |
amasudch | 0:b27dea26e7e6 | 5 | DigitalOut In1(D2); //Connection to In1 of L298N |
amasudch | 0:b27dea26e7e6 | 6 | DigitalOut In2(D3); //Connection to In2 of L298N |
amasudch | 0:b27dea26e7e6 | 7 | DigitalOut In3(D4); //Connection to In3 of L298N |
amasudch | 0:b27dea26e7e6 | 8 | DigitalOut In4(D5); //Connection to In4 of L298N |
amasudch | 0:b27dea26e7e6 | 9 | DigitalIn SW_Next_State(SW2); // Takes motor to next state, when SW2 is pushed. PTC6 --> SW2 |
amasudch | 0:b27dea26e7e6 | 10 | DigitalIn SW_Prev_State(SW3); // Takes motor to previous state, when SW2 is pushed. PTA4 --> SW3 |
amasudch | 0:b27dea26e7e6 | 11 | Serial BT(D1, D0); // Tx, Rx, Baudrate |
amasudch | 0:b27dea26e7e6 | 12 | AnalogIn LDR1 (PTB2); //Conntection for LDR1 for hand motion reading -->A0 |
amasudch | 0:b27dea26e7e6 | 13 | AnalogIn LDR2 (PTB3); //Conntection for LDR2 for hand motion reading -->A1 |
amasudch | 0:b27dea26e7e6 | 14 | AnalogIn LDR3 (PTB10); // Connection for daylight LDR -->A2 |
amasudch | 0:b27dea26e7e6 | 15 | |
amasudch | 0:b27dea26e7e6 | 16 | |
amasudch | 0:b27dea26e7e6 | 17 | //Function Prototyping |
amasudch | 0:b27dea26e7e6 | 18 | int motor_state_zero(); //Initializes the digital output for L298N input pins |
amasudch | 0:b27dea26e7e6 | 19 | int motor_state_one(); //Sets L298N input pin configurations to state 1 |
amasudch | 0:b27dea26e7e6 | 20 | int motor_state_two(); //Sets L298N input pin configurations to state 2 |
amasudch | 0:b27dea26e7e6 | 21 | int motor_state_three(); //Sets L298N input pin configurations to state 3 |
amasudch | 0:b27dea26e7e6 | 22 | int motor_state_four(); //Sets L298N input pin configurations to state 4 |
amasudch | 0:b27dea26e7e6 | 23 | void RotateCW_1step(); //Rotates the stepper motor 1 step, clockwise |
amasudch | 0:b27dea26e7e6 | 24 | void RotateCCW_1step(); //Rotates the stepper motor 1 step, counter-clockwise |
amasudch | 0:b27dea26e7e6 | 25 | int Retrieve_BT_State(char); //Gets the Bluetooth state in int data type |
amasudch | 0:b27dea26e7e6 | 26 | void check_handGesture(); //Retrieve hand gesture |
amasudch | 0:b27dea26e7e6 | 27 | void check_DayLight(); //Check daylight for automatic actuation |
amasudch | 0:b27dea26e7e6 | 28 | |
amasudch | 0:b27dea26e7e6 | 29 | //Global Variable Declaration & Initialization |
amasudch | 0:b27dea26e7e6 | 30 | int motor_state=0; |
amasudch | 0:b27dea26e7e6 | 31 | int Desired_Pos=0; |
amasudch | 0:b27dea26e7e6 | 32 | int Current_Pos=1; |
amasudch | 0:b27dea26e7e6 | 33 | float wait_delay=0.05; //wait for 0.05 seconds |
amasudch | 0:b27dea26e7e6 | 34 | char BT_state; |
amasudch | 0:b27dea26e7e6 | 35 | char BT_state_current; |
amasudch | 0:b27dea26e7e6 | 36 | char BT_AutoMode; |
amasudch | 0:b27dea26e7e6 | 37 | char AutomaticMode; |
amasudch | 0:b27dea26e7e6 | 38 | float ldr1_reading; |
amasudch | 0:b27dea26e7e6 | 39 | float ldr2_reading; |
amasudch | 0:b27dea26e7e6 | 40 | float ldr1_threshold=0.05; //Threshold value of LDR1 in hand gesture module |
amasudch | 0:b27dea26e7e6 | 41 | float ldr2_threshold=0.05; //Threshold value of LDR2 in hand gesture module |
amasudch | 0:b27dea26e7e6 | 42 | int LDR1_interrupted; |
amasudch | 0:b27dea26e7e6 | 43 | int LDR2_interrupted; |
amasudch | 0:b27dea26e7e6 | 44 | |
amasudch | 0:b27dea26e7e6 | 45 | int main(){ |
amasudch | 0:b27dea26e7e6 | 46 | // Initialise the digital output for L298N input pins |
amasudch | 0:b27dea26e7e6 | 47 | motor_state_zero(); |
amasudch | 0:b27dea26e7e6 | 48 | BT.printf("Reading data stream...\n\r"); |
amasudch | 0:b27dea26e7e6 | 49 | BT_state = 'z'; |
amasudch | 0:b27dea26e7e6 | 50 | BT_state_current; |
amasudch | 0:b27dea26e7e6 | 51 | while (BT.readable()==0); |
amasudch | 0:b27dea26e7e6 | 52 | |
amasudch | 0:b27dea26e7e6 | 53 | while(true){ |
amasudch | 0:b27dea26e7e6 | 54 | while (BT.readable()) { |
amasudch | 0:b27dea26e7e6 | 55 | |
amasudch | 0:b27dea26e7e6 | 56 | BT_state_current = BT.putc(BT.getc()); |
amasudch | 0:b27dea26e7e6 | 57 | printf("inside readable. BT_state_current = %c BT_state = %c\r\n",BT_state_current,BT_state); |
amasudch | 0:b27dea26e7e6 | 58 | |
amasudch | 0:b27dea26e7e6 | 59 | if (BT_state_current != BT_state){ |
amasudch | 0:b27dea26e7e6 | 60 | if((BT_state_current == 'x')||(BT_state_current == 'y')){ |
amasudch | 0:b27dea26e7e6 | 61 | if(BT_state_current == 'y'){ |
amasudch | 0:b27dea26e7e6 | 62 | AutomaticMode=1; |
amasudch | 0:b27dea26e7e6 | 63 | } |
amasudch | 0:b27dea26e7e6 | 64 | } |
amasudch | 0:b27dea26e7e6 | 65 | else{ |
amasudch | 0:b27dea26e7e6 | 66 | printf("%c \r\n", BT_state_current); |
amasudch | 0:b27dea26e7e6 | 67 | BT_state = BT_state_current; |
amasudch | 0:b27dea26e7e6 | 68 | Desired_Pos = Retrieve_BT_State(BT_state); |
amasudch | 0:b27dea26e7e6 | 69 | } |
amasudch | 0:b27dea26e7e6 | 70 | } |
amasudch | 0:b27dea26e7e6 | 71 | } |
amasudch | 0:b27dea26e7e6 | 72 | |
amasudch | 0:b27dea26e7e6 | 73 | |
amasudch | 0:b27dea26e7e6 | 74 | |
amasudch | 0:b27dea26e7e6 | 75 | |
amasudch | 0:b27dea26e7e6 | 76 | if (Current_Pos != Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 77 | |
amasudch | 0:b27dea26e7e6 | 78 | printf("---> Desired Position = %d\r\n", Desired_Pos); |
amasudch | 0:b27dea26e7e6 | 79 | printf("---> Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 80 | |
amasudch | 0:b27dea26e7e6 | 81 | while (Current_Pos > Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 82 | RotateCCW_1step(); //Rotate CCW 1 step |
amasudch | 0:b27dea26e7e6 | 83 | Current_Pos -= 1; //Decrement of Current_Pos by 1 |
amasudch | 0:b27dea26e7e6 | 84 | printf("Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 85 | } |
amasudch | 0:b27dea26e7e6 | 86 | |
amasudch | 0:b27dea26e7e6 | 87 | while (Current_Pos < Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 88 | RotateCW_1step(); //Rotate CW 1 step |
amasudch | 0:b27dea26e7e6 | 89 | Current_Pos += 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 90 | printf("Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 91 | } |
amasudch | 0:b27dea26e7e6 | 92 | } |
amasudch | 0:b27dea26e7e6 | 93 | |
amasudch | 0:b27dea26e7e6 | 94 | if ((SW_Next_State != 1) && (Desired_Pos<26)){ |
amasudch | 0:b27dea26e7e6 | 95 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 96 | if ((SW_Prev_State != 1) && (SW_Next_State != 1)){ |
amasudch | 0:b27dea26e7e6 | 97 | printf("Initializing Current Position as Initial Position\r\n"); |
amasudch | 0:b27dea26e7e6 | 98 | Current_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 99 | Desired_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 100 | BT_state_current = '1'; |
amasudch | 0:b27dea26e7e6 | 101 | BT_state = '1'; |
amasudch | 0:b27dea26e7e6 | 102 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 103 | } |
amasudch | 0:b27dea26e7e6 | 104 | else{ |
amasudch | 0:b27dea26e7e6 | 105 | RotateCW_1step(); //Use of on-board switch (SW2) to turn the stepper motor by one step, in the clockwise direction. |
amasudch | 0:b27dea26e7e6 | 106 | Current_Pos += 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 107 | Desired_Pos += 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 108 | printf("---> Desired Position = %d\r\n", Desired_Pos); |
amasudch | 0:b27dea26e7e6 | 109 | printf("---> Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 110 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 111 | } |
amasudch | 0:b27dea26e7e6 | 112 | } |
amasudch | 0:b27dea26e7e6 | 113 | |
amasudch | 0:b27dea26e7e6 | 114 | if ((SW_Prev_State != 1) && (Desired_Pos>1)){ |
amasudch | 0:b27dea26e7e6 | 115 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 116 | if ((SW_Prev_State != 1) && (SW_Next_State != 1)){ |
amasudch | 0:b27dea26e7e6 | 117 | printf("Initializing Current Position as Initial Position\r\n"); |
amasudch | 0:b27dea26e7e6 | 118 | Current_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 119 | Desired_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 120 | BT_state_current = '1'; |
amasudch | 0:b27dea26e7e6 | 121 | BT_state = '1'; |
amasudch | 0:b27dea26e7e6 | 122 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 123 | } |
amasudch | 0:b27dea26e7e6 | 124 | else{ |
amasudch | 0:b27dea26e7e6 | 125 | RotateCCW_1step(); //Use of on-board switch (SW3) to turn the stepper motor by one step, in the counterclockwise direction. |
amasudch | 0:b27dea26e7e6 | 126 | Current_Pos -= 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 127 | Desired_Pos -= 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 128 | printf("---> Desired Position = %d\r\n", Desired_Pos); |
amasudch | 0:b27dea26e7e6 | 129 | printf("---> Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 130 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 131 | } |
amasudch | 0:b27dea26e7e6 | 132 | } |
amasudch | 0:b27dea26e7e6 | 133 | |
amasudch | 0:b27dea26e7e6 | 134 | if ((SW_Prev_State != 1) && (SW_Next_State != 1)){ |
amasudch | 0:b27dea26e7e6 | 135 | printf("Initializing Current Position as Initial Position\r\n"); |
amasudch | 0:b27dea26e7e6 | 136 | Current_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 137 | Desired_Pos = 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 138 | BT_state_current = '1'; |
amasudch | 0:b27dea26e7e6 | 139 | BT_state = '1'; |
amasudch | 0:b27dea26e7e6 | 140 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 141 | } |
amasudch | 0:b27dea26e7e6 | 142 | |
amasudch | 0:b27dea26e7e6 | 143 | check_handGesture(); |
amasudch | 0:b27dea26e7e6 | 144 | |
amasudch | 0:b27dea26e7e6 | 145 | if (AutomaticMode==1){ |
amasudch | 0:b27dea26e7e6 | 146 | printf("Automatic mode ON\r\n"); |
amasudch | 0:b27dea26e7e6 | 147 | while(true){ |
amasudch | 0:b27dea26e7e6 | 148 | while (BT.readable()){ |
amasudch | 0:b27dea26e7e6 | 149 | BT_AutoMode = BT.putc(BT.getc()); |
amasudch | 0:b27dea26e7e6 | 150 | } |
amasudch | 0:b27dea26e7e6 | 151 | |
amasudch | 0:b27dea26e7e6 | 152 | check_DayLight(); |
amasudch | 0:b27dea26e7e6 | 153 | |
amasudch | 0:b27dea26e7e6 | 154 | if(BT_AutoMode == 'x'){ |
amasudch | 0:b27dea26e7e6 | 155 | printf("Automatic mode OFF\r\n"); |
amasudch | 0:b27dea26e7e6 | 156 | AutomaticMode=0; |
amasudch | 0:b27dea26e7e6 | 157 | BT_AutoMode='y'; |
amasudch | 0:b27dea26e7e6 | 158 | break; |
amasudch | 0:b27dea26e7e6 | 159 | } |
amasudch | 0:b27dea26e7e6 | 160 | } |
amasudch | 0:b27dea26e7e6 | 161 | } |
amasudch | 0:b27dea26e7e6 | 162 | } |
amasudch | 0:b27dea26e7e6 | 163 | } |
amasudch | 0:b27dea26e7e6 | 164 | |
amasudch | 0:b27dea26e7e6 | 165 | |
amasudch | 0:b27dea26e7e6 | 166 | //FUNCTION DEFINITION |
amasudch | 0:b27dea26e7e6 | 167 | int motor_state_zero(){ |
amasudch | 0:b27dea26e7e6 | 168 | In1=0; |
amasudch | 0:b27dea26e7e6 | 169 | In2=0; |
amasudch | 0:b27dea26e7e6 | 170 | In3=0; |
amasudch | 0:b27dea26e7e6 | 171 | In4=0; |
amasudch | 0:b27dea26e7e6 | 172 | motor_state=0; |
amasudch | 0:b27dea26e7e6 | 173 | //printf("motor_state = %d\r\n",motor_state); |
amasudch | 0:b27dea26e7e6 | 174 | return motor_state; |
amasudch | 0:b27dea26e7e6 | 175 | } |
amasudch | 0:b27dea26e7e6 | 176 | |
amasudch | 0:b27dea26e7e6 | 177 | int motor_state_one(){ |
amasudch | 0:b27dea26e7e6 | 178 | In1=1; |
amasudch | 0:b27dea26e7e6 | 179 | In2=0; |
amasudch | 0:b27dea26e7e6 | 180 | In3=0; |
amasudch | 0:b27dea26e7e6 | 181 | In4=0; |
amasudch | 0:b27dea26e7e6 | 182 | motor_state=1; |
amasudch | 0:b27dea26e7e6 | 183 | //printf("motor_state = %d\r\n",motor_state); |
amasudch | 0:b27dea26e7e6 | 184 | return motor_state; |
amasudch | 0:b27dea26e7e6 | 185 | } |
amasudch | 0:b27dea26e7e6 | 186 | |
amasudch | 0:b27dea26e7e6 | 187 | int motor_state_two(){ |
amasudch | 0:b27dea26e7e6 | 188 | In1=0; |
amasudch | 0:b27dea26e7e6 | 189 | In2=0; |
amasudch | 0:b27dea26e7e6 | 190 | In3=1; |
amasudch | 0:b27dea26e7e6 | 191 | In4=0; |
amasudch | 0:b27dea26e7e6 | 192 | motor_state=2; |
amasudch | 0:b27dea26e7e6 | 193 | //printf("motor_state = %d\r\n",motor_state); |
amasudch | 0:b27dea26e7e6 | 194 | return motor_state; |
amasudch | 0:b27dea26e7e6 | 195 | } |
amasudch | 0:b27dea26e7e6 | 196 | |
amasudch | 0:b27dea26e7e6 | 197 | int motor_state_three(){ |
amasudch | 0:b27dea26e7e6 | 198 | In1=0; |
amasudch | 0:b27dea26e7e6 | 199 | In2=1; |
amasudch | 0:b27dea26e7e6 | 200 | In3=0; |
amasudch | 0:b27dea26e7e6 | 201 | In4=0; |
amasudch | 0:b27dea26e7e6 | 202 | motor_state=3; |
amasudch | 0:b27dea26e7e6 | 203 | //printf("motor_state = %d\r\n",motor_state); |
amasudch | 0:b27dea26e7e6 | 204 | return motor_state; |
amasudch | 0:b27dea26e7e6 | 205 | } |
amasudch | 0:b27dea26e7e6 | 206 | |
amasudch | 0:b27dea26e7e6 | 207 | int motor_state_four(){ |
amasudch | 0:b27dea26e7e6 | 208 | In1=0; |
amasudch | 0:b27dea26e7e6 | 209 | In2=0; |
amasudch | 0:b27dea26e7e6 | 210 | In3=0; |
amasudch | 0:b27dea26e7e6 | 211 | In4=1; |
amasudch | 0:b27dea26e7e6 | 212 | motor_state=4; |
amasudch | 0:b27dea26e7e6 | 213 | //printf("motor_state = %d\r\n",motor_state); |
amasudch | 0:b27dea26e7e6 | 214 | return motor_state; |
amasudch | 0:b27dea26e7e6 | 215 | } |
amasudch | 0:b27dea26e7e6 | 216 | |
amasudch | 0:b27dea26e7e6 | 217 | void RotateCW_1step(){ |
amasudch | 0:b27dea26e7e6 | 218 | printf("Rotating Clockwise 1 step\r\n"); |
amasudch | 0:b27dea26e7e6 | 219 | if (motor_state==0){ |
amasudch | 0:b27dea26e7e6 | 220 | motor_state_one(); |
amasudch | 0:b27dea26e7e6 | 221 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 222 | } |
amasudch | 0:b27dea26e7e6 | 223 | else if (motor_state==1){ |
amasudch | 0:b27dea26e7e6 | 224 | motor_state_two(); |
amasudch | 0:b27dea26e7e6 | 225 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 226 | } |
amasudch | 0:b27dea26e7e6 | 227 | else if (motor_state==2){ |
amasudch | 0:b27dea26e7e6 | 228 | motor_state_three(); |
amasudch | 0:b27dea26e7e6 | 229 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 230 | } |
amasudch | 0:b27dea26e7e6 | 231 | else if (motor_state==3){ |
amasudch | 0:b27dea26e7e6 | 232 | motor_state_four(); |
amasudch | 0:b27dea26e7e6 | 233 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 234 | } |
amasudch | 0:b27dea26e7e6 | 235 | else if (motor_state==4){ |
amasudch | 0:b27dea26e7e6 | 236 | motor_state_one(); |
amasudch | 0:b27dea26e7e6 | 237 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 238 | } |
amasudch | 0:b27dea26e7e6 | 239 | } |
amasudch | 0:b27dea26e7e6 | 240 | |
amasudch | 0:b27dea26e7e6 | 241 | void RotateCCW_1step(){ |
amasudch | 0:b27dea26e7e6 | 242 | printf("Rotating CounterClockwise 1 step\r\n"); |
amasudch | 0:b27dea26e7e6 | 243 | if (motor_state==0){ |
amasudch | 0:b27dea26e7e6 | 244 | motor_state_four(); |
amasudch | 0:b27dea26e7e6 | 245 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 246 | } |
amasudch | 0:b27dea26e7e6 | 247 | else if (motor_state==1){ |
amasudch | 0:b27dea26e7e6 | 248 | motor_state_four(); |
amasudch | 0:b27dea26e7e6 | 249 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 250 | } |
amasudch | 0:b27dea26e7e6 | 251 | else if (motor_state==2){ |
amasudch | 0:b27dea26e7e6 | 252 | motor_state_one(); |
amasudch | 0:b27dea26e7e6 | 253 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 254 | } |
amasudch | 0:b27dea26e7e6 | 255 | else if (motor_state==3){ |
amasudch | 0:b27dea26e7e6 | 256 | motor_state_two(); |
amasudch | 0:b27dea26e7e6 | 257 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 258 | } |
amasudch | 0:b27dea26e7e6 | 259 | else if (motor_state==4){ |
amasudch | 0:b27dea26e7e6 | 260 | motor_state_three(); |
amasudch | 0:b27dea26e7e6 | 261 | wait(wait_delay); |
amasudch | 0:b27dea26e7e6 | 262 | } |
amasudch | 0:b27dea26e7e6 | 263 | } |
amasudch | 0:b27dea26e7e6 | 264 | |
amasudch | 0:b27dea26e7e6 | 265 | int Retrieve_BT_State(char BT_state){ |
amasudch | 0:b27dea26e7e6 | 266 | if (BT_state == '0'){ |
amasudch | 0:b27dea26e7e6 | 267 | Desired_Pos = 0; |
amasudch | 0:b27dea26e7e6 | 268 | } |
amasudch | 0:b27dea26e7e6 | 269 | else if (BT_state == '1'){ |
amasudch | 0:b27dea26e7e6 | 270 | Desired_Pos = 1; |
amasudch | 0:b27dea26e7e6 | 271 | } |
amasudch | 0:b27dea26e7e6 | 272 | else if (BT_state == '2'){ |
amasudch | 0:b27dea26e7e6 | 273 | Desired_Pos = 2; |
amasudch | 0:b27dea26e7e6 | 274 | } |
amasudch | 0:b27dea26e7e6 | 275 | else if (BT_state == '3'){ |
amasudch | 0:b27dea26e7e6 | 276 | Desired_Pos = 3; |
amasudch | 0:b27dea26e7e6 | 277 | } |
amasudch | 0:b27dea26e7e6 | 278 | else if (BT_state == '4'){ |
amasudch | 0:b27dea26e7e6 | 279 | Desired_Pos = 4; |
amasudch | 0:b27dea26e7e6 | 280 | } |
amasudch | 0:b27dea26e7e6 | 281 | else if (BT_state == '5'){ |
amasudch | 0:b27dea26e7e6 | 282 | Desired_Pos = 5; |
amasudch | 0:b27dea26e7e6 | 283 | } |
amasudch | 0:b27dea26e7e6 | 284 | else if (BT_state == '6'){ |
amasudch | 0:b27dea26e7e6 | 285 | Desired_Pos = 6; |
amasudch | 0:b27dea26e7e6 | 286 | } |
amasudch | 0:b27dea26e7e6 | 287 | else if (BT_state == '7'){ |
amasudch | 0:b27dea26e7e6 | 288 | Desired_Pos = 7; |
amasudch | 0:b27dea26e7e6 | 289 | } |
amasudch | 0:b27dea26e7e6 | 290 | else if (BT_state == '8'){ |
amasudch | 0:b27dea26e7e6 | 291 | Desired_Pos = 8; |
amasudch | 0:b27dea26e7e6 | 292 | } |
amasudch | 0:b27dea26e7e6 | 293 | else if (BT_state == '9'){ |
amasudch | 0:b27dea26e7e6 | 294 | Desired_Pos = 9; |
amasudch | 0:b27dea26e7e6 | 295 | } |
amasudch | 0:b27dea26e7e6 | 296 | else if (BT_state == 'a'){ |
amasudch | 0:b27dea26e7e6 | 297 | Desired_Pos = 10; |
amasudch | 0:b27dea26e7e6 | 298 | } |
amasudch | 0:b27dea26e7e6 | 299 | else if (BT_state == 'b'){ |
amasudch | 0:b27dea26e7e6 | 300 | Desired_Pos = 11; |
amasudch | 0:b27dea26e7e6 | 301 | } |
amasudch | 0:b27dea26e7e6 | 302 | else if (BT_state == 'c'){ |
amasudch | 0:b27dea26e7e6 | 303 | Desired_Pos = 12; |
amasudch | 0:b27dea26e7e6 | 304 | } |
amasudch | 0:b27dea26e7e6 | 305 | else if (BT_state == 'd'){ |
amasudch | 0:b27dea26e7e6 | 306 | Desired_Pos = 13; |
amasudch | 0:b27dea26e7e6 | 307 | } |
amasudch | 0:b27dea26e7e6 | 308 | else if (BT_state == 'e'){ |
amasudch | 0:b27dea26e7e6 | 309 | Desired_Pos = 14; |
amasudch | 0:b27dea26e7e6 | 310 | } |
amasudch | 0:b27dea26e7e6 | 311 | else if (BT_state == 'f'){ |
amasudch | 0:b27dea26e7e6 | 312 | Desired_Pos = 15; |
amasudch | 0:b27dea26e7e6 | 313 | } |
amasudch | 0:b27dea26e7e6 | 314 | else if (BT_state == 'g'){ |
amasudch | 0:b27dea26e7e6 | 315 | Desired_Pos = 16; |
amasudch | 0:b27dea26e7e6 | 316 | } |
amasudch | 0:b27dea26e7e6 | 317 | else if (BT_state == 'h'){ |
amasudch | 0:b27dea26e7e6 | 318 | Desired_Pos = 17; |
amasudch | 0:b27dea26e7e6 | 319 | } |
amasudch | 0:b27dea26e7e6 | 320 | else if (BT_state == 'i'){ |
amasudch | 0:b27dea26e7e6 | 321 | Desired_Pos = 18; |
amasudch | 0:b27dea26e7e6 | 322 | } |
amasudch | 0:b27dea26e7e6 | 323 | else if (BT_state == 'j'){ |
amasudch | 0:b27dea26e7e6 | 324 | Desired_Pos = 19; |
amasudch | 0:b27dea26e7e6 | 325 | } |
amasudch | 0:b27dea26e7e6 | 326 | else if (BT_state == 'k'){ |
amasudch | 0:b27dea26e7e6 | 327 | Desired_Pos = 20; |
amasudch | 0:b27dea26e7e6 | 328 | } |
amasudch | 0:b27dea26e7e6 | 329 | else if (BT_state == 'l'){ |
amasudch | 0:b27dea26e7e6 | 330 | Desired_Pos = 21; |
amasudch | 0:b27dea26e7e6 | 331 | } |
amasudch | 0:b27dea26e7e6 | 332 | else if (BT_state == 'm'){ |
amasudch | 0:b27dea26e7e6 | 333 | Desired_Pos = 22; |
amasudch | 0:b27dea26e7e6 | 334 | } |
amasudch | 0:b27dea26e7e6 | 335 | else if (BT_state == 'n'){ |
amasudch | 0:b27dea26e7e6 | 336 | Desired_Pos = 23; |
amasudch | 0:b27dea26e7e6 | 337 | } |
amasudch | 0:b27dea26e7e6 | 338 | else if (BT_state == 'o'){ |
amasudch | 0:b27dea26e7e6 | 339 | Desired_Pos = 24; |
amasudch | 0:b27dea26e7e6 | 340 | } |
amasudch | 0:b27dea26e7e6 | 341 | else if (BT_state == 'p'){ |
amasudch | 0:b27dea26e7e6 | 342 | Desired_Pos = 25; |
amasudch | 0:b27dea26e7e6 | 343 | } |
amasudch | 0:b27dea26e7e6 | 344 | else if (BT_state == 'q'){ |
amasudch | 0:b27dea26e7e6 | 345 | Desired_Pos = 26; |
amasudch | 0:b27dea26e7e6 | 346 | } |
amasudch | 0:b27dea26e7e6 | 347 | |
amasudch | 0:b27dea26e7e6 | 348 | return Desired_Pos; |
amasudch | 0:b27dea26e7e6 | 349 | } |
amasudch | 0:b27dea26e7e6 | 350 | |
amasudch | 0:b27dea26e7e6 | 351 | void check_handGesture(){ |
amasudch | 0:b27dea26e7e6 | 352 | |
amasudch | 0:b27dea26e7e6 | 353 | int i,loop_time; |
amasudch | 0:b27dea26e7e6 | 354 | |
amasudch | 0:b27dea26e7e6 | 355 | Timer loop; |
amasudch | 0:b27dea26e7e6 | 356 | ldr1_reading= LDR1; |
amasudch | 0:b27dea26e7e6 | 357 | ldr2_reading= LDR2; |
amasudch | 0:b27dea26e7e6 | 358 | |
amasudch | 0:b27dea26e7e6 | 359 | if (ldr1_reading < ldr1_threshold){ |
amasudch | 0:b27dea26e7e6 | 360 | if (Current_Pos<26){ |
amasudch | 0:b27dea26e7e6 | 361 | if(ldr2_reading > ldr2_threshold){ |
amasudch | 0:b27dea26e7e6 | 362 | for(i=0;i<50;i++){ |
amasudch | 0:b27dea26e7e6 | 363 | wait_ms(10); |
amasudch | 0:b27dea26e7e6 | 364 | ldr2_reading= LDR2; |
amasudch | 0:b27dea26e7e6 | 365 | //printf("LDR1 = %f LDR2 = %f\n\r",ldr1_reading,ldr2_reading); |
amasudch | 0:b27dea26e7e6 | 366 | if(ldr2_reading < ldr2_threshold){ |
amasudch | 0:b27dea26e7e6 | 367 | if (Current_Pos<13){ |
amasudch | 0:b27dea26e7e6 | 368 | Desired_Pos=13; |
amasudch | 0:b27dea26e7e6 | 369 | BT_state='d'; |
amasudch | 0:b27dea26e7e6 | 370 | } |
amasudch | 0:b27dea26e7e6 | 371 | else if(Current_Pos>=13){ |
amasudch | 0:b27dea26e7e6 | 372 | Desired_Pos=26; |
amasudch | 0:b27dea26e7e6 | 373 | BT_state='q'; |
amasudch | 0:b27dea26e7e6 | 374 | } |
amasudch | 0:b27dea26e7e6 | 375 | i=0; |
amasudch | 0:b27dea26e7e6 | 376 | break; |
amasudch | 0:b27dea26e7e6 | 377 | } |
amasudch | 0:b27dea26e7e6 | 378 | } |
amasudch | 0:b27dea26e7e6 | 379 | } |
amasudch | 0:b27dea26e7e6 | 380 | } |
amasudch | 0:b27dea26e7e6 | 381 | else{ |
amasudch | 0:b27dea26e7e6 | 382 | printf("Motor in Position 26. No More Clockwise Rotation... \r\n"); |
amasudch | 0:b27dea26e7e6 | 383 | } |
amasudch | 0:b27dea26e7e6 | 384 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 385 | } |
amasudch | 0:b27dea26e7e6 | 386 | |
amasudch | 0:b27dea26e7e6 | 387 | if (ldr2_reading < ldr2_threshold){ |
amasudch | 0:b27dea26e7e6 | 388 | if (Current_Pos>1){ |
amasudch | 0:b27dea26e7e6 | 389 | if(ldr1_reading > ldr1_threshold){ |
amasudch | 0:b27dea26e7e6 | 390 | for(i=0;i<50;i++){ |
amasudch | 0:b27dea26e7e6 | 391 | wait_ms(10); |
amasudch | 0:b27dea26e7e6 | 392 | ldr1_reading= LDR1; |
amasudch | 0:b27dea26e7e6 | 393 | if(ldr1_reading < ldr1_threshold){ |
amasudch | 0:b27dea26e7e6 | 394 | if (Current_Pos>13){ |
amasudch | 0:b27dea26e7e6 | 395 | Desired_Pos=13; |
amasudch | 0:b27dea26e7e6 | 396 | BT_state='d'; |
amasudch | 0:b27dea26e7e6 | 397 | } |
amasudch | 0:b27dea26e7e6 | 398 | else if(Current_Pos<=13){ |
amasudch | 0:b27dea26e7e6 | 399 | Desired_Pos=1; |
amasudch | 0:b27dea26e7e6 | 400 | BT_state='1'; |
amasudch | 0:b27dea26e7e6 | 401 | } |
amasudch | 0:b27dea26e7e6 | 402 | i=0; |
amasudch | 0:b27dea26e7e6 | 403 | break; |
amasudch | 0:b27dea26e7e6 | 404 | } |
amasudch | 0:b27dea26e7e6 | 405 | } |
amasudch | 0:b27dea26e7e6 | 406 | } |
amasudch | 0:b27dea26e7e6 | 407 | } |
amasudch | 0:b27dea26e7e6 | 408 | else{ |
amasudch | 0:b27dea26e7e6 | 409 | printf("Motor in Position 1. No More Counter-Clockwise Rotation... \r\n"); |
amasudch | 0:b27dea26e7e6 | 410 | } |
amasudch | 0:b27dea26e7e6 | 411 | wait_ms(500); |
amasudch | 0:b27dea26e7e6 | 412 | } |
amasudch | 0:b27dea26e7e6 | 413 | } |
amasudch | 0:b27dea26e7e6 | 414 | |
amasudch | 0:b27dea26e7e6 | 415 | void check_DayLight(){ |
amasudch | 0:b27dea26e7e6 | 416 | static float LDR_daylightThreshold = 0.15; |
amasudch | 0:b27dea26e7e6 | 417 | static float LDR_daylightReading; |
amasudch | 0:b27dea26e7e6 | 418 | LDR_daylightReading = LDR3; |
amasudch | 0:b27dea26e7e6 | 419 | |
amasudch | 0:b27dea26e7e6 | 420 | //printf("LDR_daylightReading = %f\r\n", LDR_daylightReading); |
amasudch | 0:b27dea26e7e6 | 421 | |
amasudch | 0:b27dea26e7e6 | 422 | if (LDR_daylightReading<LDR_daylightThreshold){ //it's night/dark |
amasudch | 0:b27dea26e7e6 | 423 | Desired_Pos=1; //close flap get state 1 |
amasudch | 0:b27dea26e7e6 | 424 | BT_state='1'; |
amasudch | 0:b27dea26e7e6 | 425 | |
amasudch | 0:b27dea26e7e6 | 426 | } |
amasudch | 0:b27dea26e7e6 | 427 | if (LDR_daylightReading>LDR_daylightThreshold){ //it's day |
amasudch | 0:b27dea26e7e6 | 428 | Desired_Pos=13; //open flaps get state 13 |
amasudch | 0:b27dea26e7e6 | 429 | BT_state='d'; |
amasudch | 0:b27dea26e7e6 | 430 | } |
amasudch | 0:b27dea26e7e6 | 431 | |
amasudch | 0:b27dea26e7e6 | 432 | if (Current_Pos != Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 433 | |
amasudch | 0:b27dea26e7e6 | 434 | printf("---> Desired Position = %d\r\n", Desired_Pos); |
amasudch | 0:b27dea26e7e6 | 435 | printf("---> Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 436 | |
amasudch | 0:b27dea26e7e6 | 437 | while (Current_Pos > Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 438 | RotateCCW_1step(); //Rotate CCW 1 step |
amasudch | 0:b27dea26e7e6 | 439 | Current_Pos -= 1; //Decrement of Current_Pos by 1 |
amasudch | 0:b27dea26e7e6 | 440 | printf("Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 441 | } |
amasudch | 0:b27dea26e7e6 | 442 | |
amasudch | 0:b27dea26e7e6 | 443 | while (Current_Pos < Desired_Pos){ |
amasudch | 0:b27dea26e7e6 | 444 | RotateCW_1step(); //Rotate CW 1 step |
amasudch | 0:b27dea26e7e6 | 445 | Current_Pos += 1; //Increment of Current_POS by 1 |
amasudch | 0:b27dea26e7e6 | 446 | printf("Current Position = %d\r\n", Current_Pos); |
amasudch | 0:b27dea26e7e6 | 447 | } |
amasudch | 0:b27dea26e7e6 | 448 | } |
amasudch | 0:b27dea26e7e6 | 449 | |
amasudch | 0:b27dea26e7e6 | 450 | } |