aboutsummaryrefslogtreecommitdiff
path: root/libraries/Robot_Control/examples/explore/R10_Rescue
diff options
context:
space:
mode:
authorCristian Maglie <c.maglie@bug.st>2013-06-01 23:16:02 +0200
committerCristian Maglie <c.maglie@bug.st>2013-06-01 23:16:02 +0200
commit177ad96f866714a4962be57f69cd3d5a6334cde1 (patch)
tree1072239986340d6a239adac924eddf2e1d1ca566 /libraries/Robot_Control/examples/explore/R10_Rescue
parent6cff36ac5e85c74bcb45cc53491ad69d64520b36 (diff)
parentd90fcca5839d13d57ed527d4009b78d22dafbde7 (diff)
Merge branch 'merge-1.0.5' into ide-1.5.x-discovery
Diffstat (limited to 'libraries/Robot_Control/examples/explore/R10_Rescue')
-rw-r--r--libraries/Robot_Control/examples/explore/R10_Rescue/R10_Rescue.ino124
1 files changed, 124 insertions, 0 deletions
diff --git a/libraries/Robot_Control/examples/explore/R10_Rescue/R10_Rescue.ino b/libraries/Robot_Control/examples/explore/R10_Rescue/R10_Rescue.ino
new file mode 100644
index 0000000..48044db
--- /dev/null
+++ b/libraries/Robot_Control/examples/explore/R10_Rescue/R10_Rescue.ino
@@ -0,0 +1,124 @@
+/* Robot Rescue
+
+ In this example, the robot enters the line following mode and
+ plays some music until it reaches its target. Once it finds the
+ target, it pushes it out of the track. It then returns to the
+ track and looks for a second target.
+
+ You can make the robot push as many objects as you want to, just
+ add more to calls to the rescue function or even move that code
+ into the loop.
+
+ Circuit:
+ * Arduino Robot
+ * some objects for the robot to push
+ * a line-following circuit
+
+ created 1 May 2013
+ by X. Yang
+ modified 12 May 2013
+ by D. Cuartielles
+
+ This example is in the public domain
+ */
+
+#include <ArduinoRobot.h> // include the robot library
+
+void setup(){
+ // initialize the Robot, SD card, display, and speaker
+ Robot.begin();
+ Robot.beginTFT();
+ Robot.beginSD();
+ Robot.beginSpeaker();
+
+ // draw "lg0.bmp" and "lg1.bmp" on the screen
+ Robot.displayLogos();
+
+ // display the line following instructional image from the SD card
+ Robot.drawBMP("lf.bmp", 0, 0);
+
+ // play the chase music file
+ Robot.playFile("chase.sqm");
+
+ // add the instructions
+ Robot.text("Rescue\n\n place the robot on\n the rescue track\n pushing the\n obstacles away", 5, 5);
+ Robot.text("Press the middle\n button to start...", 5, 61);
+ Robot.waitContinue();
+
+ // start
+ Robot.fill(255, 255, 255);
+ Robot.stroke(255, 255, 255);
+ Robot.rect(0, 0, 128, 80); // erase the previous text
+ Robot.stroke(0, 0, 0);
+ Robot.text("Start", 5, 5);
+
+ // use this to calibrate the line following algorithm
+ // uncomment one or the other to see the different behaviors of the robot
+ // Robot.lineFollowConfig(11, 5, 50, 10);
+ Robot.lineFollowConfig(14, 9, 50, 10);
+
+ // run the rescue sequence
+ rescueSequence();
+ Robot.text("Found obstacle", 5, 12);
+ // find the track again
+ goToNext();
+ Robot.text("Found track", 5, 19);
+ // run the rescue sequence a second time
+ rescueSequence();
+ Robot.text("Found obstacle", 5, 26);
+
+ // here you could go on ...
+
+ // write status on the screen
+ Robot.stroke(0, 0, 0);
+ Robot.text("Done!", 5, 25);
+}
+
+void loop(){
+ //nothing here, the program only runs once.
+}
+
+// run the sequence
+void rescueSequence(){
+ //set the motor board into line-follow mode
+ Robot.setMode(MODE_LINE_FOLLOW);
+
+ while(!Robot.isActionDone()){ // wait until it is no longer following the line
+ }
+ delay(1000);
+
+ // do the rescue operation
+ doRescue();
+ delay(1000);
+}
+
+void doRescue(){
+ // Reached the endline, engage the target
+ Robot.motorsWrite(200,200);
+ delay(250);
+ Robot.motorsStop();
+ delay(1000);
+
+ // Turn the robot
+ Robot.turn(90);
+ Robot.motorsStop();
+ delay(1000);
+
+ // Move forward
+ Robot.motorsWrite(200,200);
+ delay(500);
+ Robot.motorsStop();
+ delay(1000);
+
+ // move backwards, leave the target
+ Robot.motorsWrite(-200,-200);
+ delay(500);
+ Robot.motorsStop();
+}
+
+void goToNext(){
+ // Turn the robot
+ Robot.turn(-90);
+ Robot.motorsStop();
+ delay(1000);
+}