Created
July 3, 2015 08:32
-
-
Save mithi/ba4fc5c09052aa1ffe25 to your computer and use it in GitHub Desktop.
Arcbotic's Sparki pushes obstacles out of a given perimeter.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Sparki.h> | |
#define LEFT 1 | |
#define RIGHT 0 | |
class CleaningRobot{ | |
int pingThresh; | |
int lineThresh; | |
byte turnDir; | |
int angle; | |
int dist; | |
int degInc; | |
int backDist; | |
public: | |
CleaningRobot(int vpingThresh, int vlineThresh, byte vturnDir, int vdist, int vdegInc, int vbackDist){ | |
pingThresh = vpingThresh; | |
lineThresh = vlineThresh; | |
turnDir = vturnDir; | |
dist = vdist; | |
degInc = vdegInc; | |
backDist = vbackDist; | |
} | |
void init(){ | |
sparki.servo(SERVO_CENTER); | |
sparki.gripperOpen(); | |
delay(7000); | |
sparki.gripperStop(); | |
sparki.beep(); | |
} | |
void showPing(){ | |
sparki.clearLCD(); | |
sparki.println("PING"); | |
sparki.println(sparki.ping()); | |
sparki.updateLCD(); | |
} | |
void showEdge(){ | |
sparki.clearLCD(); | |
sparki.println("LINE CENTER"); | |
sparki.println(sparki.lineCenter()); | |
sparki.updateLCD(); | |
} | |
boolean obstacleDetected(){ | |
showPing(); | |
return sparki.ping() < pingThresh ? true : false; | |
} | |
void tryCenter(){ //instead of stopping immediately, rotate a bit more to center obstacle after it has been found | |
turnDir == LEFT ? sparki.moveLeft(2*degInc) : sparki.moveRight(2*degInc); | |
sparki.moveStop(); delay(100); | |
} | |
void search(){ | |
while(!obstacleDetected()){ | |
turnDir == LEFT ? sparki.moveLeft() : sparki.moveRight();delay(150); | |
} | |
tryCenter(); | |
} | |
boolean atEdge(){ | |
showEdge(); | |
return sparki.lineCenter() < lineThresh ? true : false; | |
} | |
void pushOut(){ | |
while(!atEdge()){ | |
sparki.moveForward(1); | |
} | |
sparki.moveStop(); delay(100); | |
} | |
void reposition(){ | |
sparki.moveBackward(backDist); | |
sparki.moveLeft(4*degInc); | |
} | |
void act(){ | |
search(); | |
pushOut(); | |
reposition(); | |
} | |
}; | |
CleaningRobot cleaningRobot(15, 200, LEFT, 20, 2, 5); | |
void setup(){ | |
cleaningRobot.init(); | |
} | |
void loop(){ | |
cleaningRobot.act(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment