Skip to content

Instantly share code, notes, and snippets.

@mithi
Created July 3, 2015 08:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mithi/ba4fc5c09052aa1ffe25 to your computer and use it in GitHub Desktop.
Save mithi/ba4fc5c09052aa1ffe25 to your computer and use it in GitHub Desktop.
Arcbotic's Sparki pushes obstacles out of a given perimeter.
#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