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.

Committer:
amasudch
Date:
Thu Apr 08 01:27:15 2021 +0000
Revision:
2:3f832f7f2f02
Parent:
0:b27dea26e7e6

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }