Slams doors

Dependencies:   Motor RemoteIR TextLCD mbed

Committer:
mversteeg3
Date:
Fri Oct 12 17:49:16 2012 +0000
Revision:
0:15e49f97cb3d
Door slammer;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mversteeg3 0:15e49f97cb3d 1 #include "mbed.h"
mversteeg3 0:15e49f97cb3d 2 #include "func.h"
mversteeg3 0:15e49f97cb3d 3 #include "define.h"
mversteeg3 0:15e49f97cb3d 4 #include "globlvar.h"
mversteeg3 0:15e49f97cb3d 5
mversteeg3 0:15e49f97cb3d 6
mversteeg3 0:15e49f97cb3d 7 int main()
mversteeg3 0:15e49f97cb3d 8 {
mversteeg3 0:15e49f97cb3d 9 int myButton;
mversteeg3 0:15e49f97cb3d 10 //For developer use
mversteeg3 0:15e49f97cb3d 11 //GetIRCodes();
mversteeg3 0:15e49f97cb3d 12 //GetForces();
mversteeg3 0:15e49f97cb3d 13 format = RemoteIR::SONY;
mversteeg3 0:15e49f97cb3d 14 while(1) {
mversteeg3 0:15e49f97cb3d 15 //The state machine switch statement
mversteeg3 0:15e49f97cb3d 16 switch( state) {
mversteeg3 0:15e49f97cb3d 17 //The initialization state
mversteeg3 0:15e49f97cb3d 18 case BOOT:
mversteeg3 0:15e49f97cb3d 19 pc.printf("BOOTING UP\n\r");
mversteeg3 0:15e49f97cb3d 20 forceThresh = DEFAULT_FORCE;
mversteeg3 0:15e49f97cb3d 21 pushSpeed = DEFAULT_SPEED;
mversteeg3 0:15e49f97cb3d 22 state = LISTEN;
mversteeg3 0:15e49f97cb3d 23 newState = true;
mversteeg3 0:15e49f97cb3d 24 held = false;
mversteeg3 0:15e49f97cb3d 25 lcd.cls();
mversteeg3 0:15e49f97cb3d 26 lcd.printf("RON SWANSON \nDOOR SLAMMER!");
mversteeg3 0:15e49f97cb3d 27 break;
mversteeg3 0:15e49f97cb3d 28 //Listen for IR signal
mversteeg3 0:15e49f97cb3d 29 case LISTEN:
mversteeg3 0:15e49f97cb3d 30 if(newState)
mversteeg3 0:15e49f97cb3d 31 pc.printf("LISTENING FOR IR\n\r");
mversteeg3 0:15e49f97cb3d 32 newState = false;
mversteeg3 0:15e49f97cb3d 33 myButton = IRListen();
mversteeg3 0:15e49f97cb3d 34
mversteeg3 0:15e49f97cb3d 35 switch(myButton) {
mversteeg3 0:15e49f97cb3d 36 case NONE:
mversteeg3 0:15e49f97cb3d 37 break;
mversteeg3 0:15e49f97cb3d 38 case RUN:
mversteeg3 0:15e49f97cb3d 39 pc.printf("OK Button\n\r");
mversteeg3 0:15e49f97cb3d 40 state = CLOSE_DOOR;
mversteeg3 0:15e49f97cb3d 41 newState = true;
mversteeg3 0:15e49f97cb3d 42 held = true;
mversteeg3 0:15e49f97cb3d 43 break;
mversteeg3 0:15e49f97cb3d 44 case SPD_UP:
mversteeg3 0:15e49f97cb3d 45 if(pushSpeed+SPEED_INC<=1)
mversteeg3 0:15e49f97cb3d 46 pushSpeed += SPEED_INC;
mversteeg3 0:15e49f97cb3d 47 else
mversteeg3 0:15e49f97cb3d 48 pushSpeed = 1;
mversteeg3 0:15e49f97cb3d 49 speedPercent = (int)(pushSpeed*100.0f);
mversteeg3 0:15e49f97cb3d 50 lcd.cls();
mversteeg3 0:15e49f97cb3d 51 lcd.printf("Speed:\n%3d%%\n\r", speedPercent);
mversteeg3 0:15e49f97cb3d 52 pc.printf("Speed:\n%3d%%\n\r", speedPercent);
mversteeg3 0:15e49f97cb3d 53 break;
mversteeg3 0:15e49f97cb3d 54 case SPD_DN:
mversteeg3 0:15e49f97cb3d 55 if(pushSpeed-SPEED_INC>=SPEED_MIN)
mversteeg3 0:15e49f97cb3d 56 pushSpeed -= SPEED_INC;
mversteeg3 0:15e49f97cb3d 57 else
mversteeg3 0:15e49f97cb3d 58 pushSpeed = SPEED_MIN;
mversteeg3 0:15e49f97cb3d 59 speedPercent = (int)(pushSpeed*100.0f);
mversteeg3 0:15e49f97cb3d 60 lcd.cls();
mversteeg3 0:15e49f97cb3d 61 lcd.printf("Speed:\n%3d%%\n\r", speedPercent);
mversteeg3 0:15e49f97cb3d 62 pc.printf("Speed:\n%3d%%\n\r", speedPercent);
mversteeg3 0:15e49f97cb3d 63 break;
mversteeg3 0:15e49f97cb3d 64 case RST:
mversteeg3 0:15e49f97cb3d 65 pc.printf("Exit Button\n\r");
mversteeg3 0:15e49f97cb3d 66 state = BOOT;
mversteeg3 0:15e49f97cb3d 67 break;
mversteeg3 0:15e49f97cb3d 68 case FRC_UP:
mversteeg3 0:15e49f97cb3d 69
mversteeg3 0:15e49f97cb3d 70 if(forceThresh+FORCE_INC<=1)
mversteeg3 0:15e49f97cb3d 71 forceThresh+=FORCE_INC;
mversteeg3 0:15e49f97cb3d 72 lcd.cls();
mversteeg3 0:15e49f97cb3d 73 lcd.printf("Force threshold:\n%f pounds\n", (forceThresh*200.0f)/4.44822162f);
mversteeg3 0:15e49f97cb3d 74 pc.printf("Force threshold:\n\r%f pounds\n\r", (forceThresh*200.0f)/4.44822162f);
mversteeg3 0:15e49f97cb3d 75 break;
mversteeg3 0:15e49f97cb3d 76 case FRC_DN:
mversteeg3 0:15e49f97cb3d 77 if(forceThresh-FORCE_INC>0)
mversteeg3 0:15e49f97cb3d 78 forceThresh-=FORCE_INC;
mversteeg3 0:15e49f97cb3d 79 lcd.cls();
mversteeg3 0:15e49f97cb3d 80 lcd.printf("Force threshold:\n%f pounds\n", (forceThresh*200.0f)/4.44822162f);
mversteeg3 0:15e49f97cb3d 81 pc.printf("Force threshold:\n\r%f pounds\n\r", (forceThresh*200.0f)/4.44822162f);
mversteeg3 0:15e49f97cb3d 82 break;
mversteeg3 0:15e49f97cb3d 83 default:
mversteeg3 0:15e49f97cb3d 84 pc.printf("Unknown Button: %d\n\r", myButton);
mversteeg3 0:15e49f97cb3d 85 break;
mversteeg3 0:15e49f97cb3d 86 }
mversteeg3 0:15e49f97cb3d 87 break;
mversteeg3 0:15e49f97cb3d 88 case CLOSE_DOOR:
mversteeg3 0:15e49f97cb3d 89 lcd.cls();
mversteeg3 0:15e49f97cb3d 90 lcd.printf("GET OUT\n");
mversteeg3 0:15e49f97cb3d 91 pc.printf("CLOSING DOOR\n\r");
mversteeg3 0:15e49f97cb3d 92 state = CHECK_IR;
mversteeg3 0:15e49f97cb3d 93 break;
mversteeg3 0:15e49f97cb3d 94 case CHECK_IR:
mversteeg3 0:15e49f97cb3d 95 pc.printf("CHECKING FOR CANCEL SIGNAL\n\r");
mversteeg3 0:15e49f97cb3d 96 if(IRListen()==-1)
mversteeg3 0:15e49f97cb3d 97 held = false;
mversteeg3 0:15e49f97cb3d 98 else if(!held) {
mversteeg3 0:15e49f97cb3d 99 pc.printf("CANCEL SIGNAL RECEIVED\n\r");
mversteeg3 0:15e49f97cb3d 100 state = RESET;
mversteeg3 0:15e49f97cb3d 101 break;
mversteeg3 0:15e49f97cb3d 102 }
mversteeg3 0:15e49f97cb3d 103 state = CHECK_FORCE;
mversteeg3 0:15e49f97cb3d 104 break;
mversteeg3 0:15e49f97cb3d 105 case CHECK_FORCE:
mversteeg3 0:15e49f97cb3d 106 force = doorForce;
mversteeg3 0:15e49f97cb3d 107 pc.printf("CHECKING FORCE: %f\n\r", force);
mversteeg3 0:15e49f97cb3d 108 if(force<FORCE_MIN)
mversteeg3 0:15e49f97cb3d 109 speed = COAST_SPEED;
mversteeg3 0:15e49f97cb3d 110 else if(force<forceThresh)
mversteeg3 0:15e49f97cb3d 111 speed = pushSpeed;
mversteeg3 0:15e49f97cb3d 112 else {
mversteeg3 0:15e49f97cb3d 113 wait(PUSH_TIME);
mversteeg3 0:15e49f97cb3d 114 state = RESET;
mversteeg3 0:15e49f97cb3d 115 break;
mversteeg3 0:15e49f97cb3d 116 }
mversteeg3 0:15e49f97cb3d 117 state = RUN_MOTOR;
mversteeg3 0:15e49f97cb3d 118 pc.printf("\tNEW SPEED: %f\n\r", speed);
mversteeg3 0:15e49f97cb3d 119 break;
mversteeg3 0:15e49f97cb3d 120 case RUN_MOTOR:
mversteeg3 0:15e49f97cb3d 121 myMotor.speed(DIRECTION*speed);
mversteeg3 0:15e49f97cb3d 122
mversteeg3 0:15e49f97cb3d 123 state = CHECK_IR;
mversteeg3 0:15e49f97cb3d 124 break;
mversteeg3 0:15e49f97cb3d 125 case RESET:
mversteeg3 0:15e49f97cb3d 126 pc.printf("RETURNING TO IDLE\n\r");
mversteeg3 0:15e49f97cb3d 127 myMotor.speed(0);
mversteeg3 0:15e49f97cb3d 128 myMotor.speed(DIRECTION*REVERSE_SPEED);
mversteeg3 0:15e49f97cb3d 129 state = CHECK_WALL;
mversteeg3 0:15e49f97cb3d 130 break;
mversteeg3 0:15e49f97cb3d 131 case CHECK_WALL:
mversteeg3 0:15e49f97cb3d 132 wall = wallForce;
mversteeg3 0:15e49f97cb3d 133 if(wall>=WALL_THRESH||IRListen()>=0) {
mversteeg3 0:15e49f97cb3d 134 myMotor.speed(0);
mversteeg3 0:15e49f97cb3d 135 state = LISTEN;
mversteeg3 0:15e49f97cb3d 136 lcd.printf("AND STAY OUT!");
mversteeg3 0:15e49f97cb3d 137 pc.printf("WALL DETECTED, ENTERING IDLE STATE\n\r");
mversteeg3 0:15e49f97cb3d 138
mversteeg3 0:15e49f97cb3d 139 break;
mversteeg3 0:15e49f97cb3d 140 }
mversteeg3 0:15e49f97cb3d 141 pc.printf("CHECKING WALL: %f\n\r", wall);
mversteeg3 0:15e49f97cb3d 142
mversteeg3 0:15e49f97cb3d 143 break;
mversteeg3 0:15e49f97cb3d 144 default:
mversteeg3 0:15e49f97cb3d 145 break;
mversteeg3 0:15e49f97cb3d 146 }
mversteeg3 0:15e49f97cb3d 147
mversteeg3 0:15e49f97cb3d 148
mversteeg3 0:15e49f97cb3d 149 }
mversteeg3 0:15e49f97cb3d 150 }
mversteeg3 0:15e49f97cb3d 151