Fixed Sonar
Dependencies: C12832 Servo mbed-rtos-edited mbed
Fork of NervousPuppy by
nervousPuppy.cpp
- Committer:
- SeanDoyle
- Date:
- 2015-01-13
- Revision:
- 2:8415bea33a95
- Parent:
- 1:8fe6802d6971
- Child:
- 3:74dfce05dd99
File content as of revision 2:8415bea33a95:
#include "nervousPuppy.h" /** * Constructor - contains running loop */ nervousPuppy::nervousPuppy(){ bool isRunning = true; while(isRunning){ if(shutdown()){//TurnOff isRunning = !isRunning; } else if(isScared()){//MoveBack scared = true; playerError = playerDistance - SCARED; if(calculateVerticalAdjustment() != 0)changePosition("tilt",calculateVerticalAdjustment()); else changePosition("rotate",calculateHorizontalAdjustment()); scared = false; } else if(isLonely()){// MoveForward lonely = true; playerError = playerDistance - LONELY; if(calculateVerticalAdjustment() !=0)changePosition("tilt",calculateVerticalAdjustment()); else changePosition("rotate",calculateHorizontalAdjustment()); lonely = false; } } } /** * Returns the vertical adjustment */ float nervousPuppy::calculateVerticalAdjustment(){ return calculateAngle("Vertical"); } /** * Returns the horizontal adjustment */ float nervousPuppy::calculateHorizontalAdjustment(){ return calculateAngle("Horizontal"); } /** * Calculates the angle required to bring the 'puppy' to a 'safe distance' * Returns 0 if it cannot find a 'safe distance' */ float nervousPuppy::calculateAngle(string axis){ float deltaDist = 0.0; float limiter,y; if(axis == "Vertical") limiter = SERVO_TILT_LIMIT; else limiter = SERVO_ROTATE_LIMIT; for(float theta = 0.0; theta < limiter; ++theta){ y = RADIUS*Sin(theta); deltaDist = sqrt(pow(y,2) + pow(playerDistance,2)); if(scared){ if((deltaDist - SCARED) > SCARED) return theta; }else if(lonely){ if((deltaDist - LONELY) < LONELY) return theta; } } return 0.0; } /** * Move 'puppy' to the calculated 'safe' point */ void nervousPuppy::changePosition(string servo,float angle){ if(servo == "tilt"){} else if(servo == "rotate"){} } /** * Thread -> Running sonar to detect player */ void nervousPuppy::detectPlayer(){ } /** check if we shutdown **/ bool nervousPuppy::shutdown(){ if(playerDistance < SHUTDOWN)return true; else return false; } /** check if player is to far away **/ bool nervousPuppy::isLonely(){ if(playerDistance > LONELY)return true; else return false; } /** check if player is to close **/ bool nervousPuppy::isScared(){ if(playerDistance < SCARED)return true; else return false; } /** get player distance value **/ float nervousPuppy::getPlayerDistance(){ return playerDistance; } /** set player distance value **/ void nervousPuppy::setPlayerDistance(float dist){ playerDistance = dist; } int main(){ nervousPuppy(); }