arduino stuffs
Diffstat (limited to 'car_driver/move.ino')
| -rw-r--r-- | car_driver/move.ino | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/car_driver/move.ino b/car_driver/move.ino deleted file mode 100644 index e407420..0000000 --- a/car_driver/move.ino +++ /dev/null @@ -1,241 +0,0 @@ -/************************************* - Drive: mid level movement functions -*************************************/ - -int moveState = MOV_STOP; // what robot is doing - -int moveSpeed = 0; // move speed stored here (0-100%) -int speedIncrement = 10; // percent to increase or decrease speed - -void moveBegin() -{ - motorBegin(MOTOR_LEFT); - motorBegin(MOTOR_RIGHT); - moveStop(); -} - -void moveLeft() -{ - changeMoveState(MOV_LEFT); - motorForward(MOTOR_LEFT, 0); - motorForward(MOTOR_RIGHT, moveSpeed); - Serial.println("were going left... maybe????"); -} - -void moveRight() -{ - changeMoveState(MOV_RIGHT); - motorForward(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, 0); - Serial.println("were going right... maybe????"); -} - -void moveForward() -{ - changeMoveState(MOV_FORWARD); - motorForward(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, moveSpeed); -} - -void moveBackward() -{ - changeMoveState(MOV_BACK); - motorReverse(MOTOR_LEFT, moveSpeed); - motorReverse(MOTOR_RIGHT, moveSpeed); -} - -void moveRotate(int angle) -{ - changeMoveState(MOV_ROTATE); - Serial.print("Rotating "); Serial.print(angle); - if(angle < 0) - { - Serial.println(" (left)"); - motorReverse(MOTOR_LEFT, moveSpeed); - motorForward(MOTOR_RIGHT, moveSpeed); - angle = -angle; - } - else if(angle > 0) - { - Serial.println(" (right)"); - motorForward(MOTOR_LEFT, moveSpeed); - motorReverse(MOTOR_RIGHT, moveSpeed); - } - int ms = rotationAngleToTime(angle, moveSpeed); - movingDelay(ms); - moveBrake(); -} - -void moveStop() -{ - changeMoveState(MOV_STOP); - motorStop(MOTOR_LEFT); - motorStop(MOTOR_RIGHT); - Serial.println("stop lmao"); -} - -void moveBrake() -{ - changeMoveState(MOV_STOP); - motorBrake(MOTOR_LEFT); - motorBrake(MOTOR_RIGHT); -} - -void moveSetSpeed(int speed) -{ - motorSetSpeed(MOTOR_LEFT, speed) ; - motorSetSpeed(MOTOR_RIGHT, speed) ; - moveSpeed = speed; // save the value -} - -void moveSlower(int decrement) -{ - Serial.print(" Slower: "); - if( moveSpeed >= speedIncrement + MIN_SPEED) - moveSpeed -= speedIncrement; - else moveSpeed = MIN_SPEED; - moveSetSpeed(moveSpeed); -} - - -void moveFaster(int increment) -{ - Serial.print(" Faster: "); - moveSpeed += speedIncrement; - if(moveSpeed > 100) - moveSpeed = 100; - moveSetSpeed(moveSpeed); -} - -int moveGetState() -{ - return moveState; -} - -/************************************* - functions to rotate the robot -*************************************/ - -// return the time in milliseconds to turn the given angle at the given speed -long rotationAngleToTime( int angle, int speed) -{ -int fullRotationTime; // time to rotate 360 degrees at given speed - - if(speed < MIN_SPEED) - return 0; // ignore speeds slower then the first table entry - - angle = abs(angle); - - if(speed >= 100) - fullRotationTime = rotationTime[NBR_SPEEDS-1]; // the last entry is 100% - else - { - int index = (speed - MIN_SPEED) / SPEED_TABLE_INTERVAL ; // index into speed and time tables - int t0 = rotationTime[index]; - int t1 = rotationTime[index+1]; // time of the next higher speed - fullRotationTime = map(speed, speedTable[index], speedTable[index+1], t0, t1); - // Serial.print("index= "); Serial.print(index); Serial.print(", t0 = "); Serial.print(t0); Serial.print(", t1 = "); Serial.print(t1); - } - // Serial.print(" full rotation time = "); Serial.println(fullRotationTime); - long result = map(angle, 0,360, 0, fullRotationTime); - return result; -} - - -// rotate the robot from MIN_SPEED to 100% increasing by SPEED_TABLE_INTERVAL -void calibrateRotationRate(int direction, int angle) -{ - Serial.print(locationString[direction]); - Serial.println(" calibration" ); - for(int speed = MIN_SPEED; speed <= 100; speed += SPEED_TABLE_INTERVAL) - { - - delay(1000); - //blinkNumber(speed/10); - - if( direction == DIR_LEFT) - { // rotate left - motorReverse(MOTOR_LEFT, speed); - motorForward(MOTOR_RIGHT, speed); - } - else if( direction == DIR_RIGHT) - { // rotate right - motorForward(MOTOR_LEFT, speed); - motorReverse(MOTOR_RIGHT, speed); - } - else - Serial.println("Invalid direction"); - - - int time = rotationAngleToTime(angle, speed); - - Serial.print(locationString[direction]); - Serial.print(": rotate "); - Serial.print(angle); - Serial.print(" degrees at speed "); - Serial.print(speed); - Serial.print(" for "); - Serial.print(time); - Serial.println("ms"); - delay(time); - motorStop(MOTOR_LEFT); - motorStop(MOTOR_RIGHT); - delay(2000); // two second delay between speeds - } -} - -// this is the low level movement state. -// it will differ from the command state when the robot is avoiding obstacles -void changeMoveState(int newState) -{ - if(newState != moveState) - { - Serial.print("Changing move state from "); Serial.print( states[moveState]); - Serial.print(" to "); Serial.println(states[newState]); - moveState = newState; - } -} - -/************* high level movement functions ****************/ - -//moves in the given direction at the current speed for the given duration in milliseconds -void timedMove(int direction, int duration) -{ - Serial.print("Timed move "); - if(direction == MOV_FORWARD) { - Serial.println("forward"); - moveForward(); - } - else if(direction == MOV_BACK) { - Serial.println("back"); - moveBackward(); - } - else - Serial.println("?"); - - movingDelay(duration); - moveStop(); -} - -// check for obstacles while delaying the given duration in ms - -void movingDelay(long duration) -{ - long startTime = millis(); - while(millis() - startTime < duration) { - // function in Look module checks for obstacle in direction of movement - if(checkMovement() == false) { - if( moveState != MOV_ROTATE) // rotate is only valid movement - { - Serial.println("Stopping in moving Delay()"); - moveBrake(); - } - } - } -} - -boolean checkMovement() { - return true; -} - - |