Fixed Sonar
Dependencies: C12832 Servo mbed-rtos-edited mbed
Fork of NervousPuppy by
nervousPuppy.cpp
- Committer:
- SeanDoyle
- Date:
- 2015-01-19
- Revision:
- 5:cbb5d7460309
- Parent:
- 4:2b47356f4b7d
- Child:
- 6:f854aa2f41e2
File content as of revision 5:cbb5d7460309:
#include "nervousPuppy.h" /** * Constructor - contains running loop */ Servo tilt(p21); Servo rotate(p22); AnalogIn ain(p20); C12832 lcd(p5, p7, p6, p8, p11); nervousPuppy::nervousPuppy(){ bool isRunning = true; while(isRunning){ playerDistance = 254*ain.read(); lcd.cls(); if(shutdown()){//TurnOff //isRunning = !isRunning; } else if(isScared()){//MoveBack scared = true; playerError = playerDistance - SCARED; lcd.printf(" TOO CLOSE"); wait(2.0); scared = false; } else if(isLonely()){// MoveForward lonely = true; playerError = playerDistance - LONELY; lcd.printf(" TOO FAR"); wait(2.0); lonely = false; } } } /** * 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 issue){ if(issue == "Too Close"){ for(float theta = 0.0; theta < 45; theta++){ float c = RADIUS*Cos(theta); float y = RADIUS*Sin(theta); float b = RADIUS - c; float x = sqrt(pow(y,2) + pow((playerDistance+b),2)); if(x > SCARED){ return theta; } } } if(issue == "Too Far"){ for(float theta = 0.0; theta < 45; theta++){ float c = RADIUS*Cos(theta); float y = RADIUS*Sin(theta); float b = RADIUS - c; float e = playerDistance - b; float a = sqrt(pow(e,2) + pow(y,2)); if(a < LONELY){ return theta; } } } return 0.0; } /** * Move 'puppy' to the calculated 'safe' point */ void nervousPuppy::changePosition(string servo,float angle){ if(servo == "tilt"){ tilt.position(angle); } else if(servo == "rotate"){ rotate.position(angle); } } /** * 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(); }