diff options
Diffstat (limited to 'libraries/Robot_Control/examples/explore/R01_Logo')
-rw-r--r-- | libraries/Robot_Control/examples/explore/R01_Logo/R01_Logo.ino | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/libraries/Robot_Control/examples/explore/R01_Logo/R01_Logo.ino b/libraries/Robot_Control/examples/explore/R01_Logo/R01_Logo.ino new file mode 100644 index 0000000..794479e --- /dev/null +++ b/libraries/Robot_Control/examples/explore/R01_Logo/R01_Logo.ino @@ -0,0 +1,134 @@ +/* Robot Logo + + This sketch demonstrates basic movement of the Robot. + When the sketch starts, press the on-board buttons to tell + the robot how to move. Pressing the middle button will + save the pattern, and the robot will follow accordingly. + You can record up to 20 commands. The robot will move for + one second per command. + + This example uses images on an SD card. It looks for + files named "lg0.bmp" and "lg1.bmp" and draws them on the + screen. + + Circuit: + * Arduino Robot + + 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 + +int commands[20]; // array for storing commands + +void setup() { + // initialize the Robot, SD card, and display + Robot.begin(); + Robot.beginTFT(); + Robot.beginSD(); + + // draw "lg0.bmp" and "lg1.bmp" on the screen + Robot.displayLogos(); +} + +void loop() { + + Robot.drawBMP("intro.bmp", 0, 0); //display background image + + iniCommands(); // remove commands from the array + addCommands(); // add commands to the array + + delay(1000); // wait for a second + + executeCommands(); // follow orders + + Robot.stroke(0,0,0); + Robot.text("Done!", 5, 103); // write some text to the display + delay(1500); // wait for a moment +} + +// empty the commands array +void iniCommands() { + for(int i=0; i<20; i++) + commands[i]=-1; +} + +// add commands to the array +void addCommands() { + Robot.stroke(0,0,0); + // display text on the screen + Robot.text("1. Press buttons to\n add commands.\n\n 2. Middle to finish.", 5, 5); + + // read the buttons' state + for(int i=0; i<20;) { //max 20 commands + int key = Robot.keyboardRead(); + if(key == BUTTON_MIDDLE) { //finish input + break; + }else if(key == BUTTON_NONE) { //if no button is pressed + continue; + } + commands[i] = key; // save the button to the array + PrintCommandI(i, 46); // print the command on the screen + delay(100); + i++; + } +} + +// run through the array and move the robot +void executeCommands() { + // print status to the screen + Robot.text("Excuting...",5,70); + + // read through the array and move accordingly + for(int i=0; i<20; i++) { + switch(commands[i]) { + case BUTTON_LEFT: + Robot.turn(-90); + break; + case BUTTON_RIGHT: + Robot.turn(90); + break; + case BUTTON_UP: + Robot.motorsWrite(255, 255); + break; + case BUTTON_DOWN: + Robot.motorsWrite(-255, -255); + break; + case BUTTON_NONE: + return; + } + // print the current command to the screen + Robot.stroke(255,0,0); + PrintCommandI(i, 86); + delay(1000); + + // stop moving for a second + Robot.motorsStop(); + delay(1000); + } +} + +// convert the button press to a single character +char keyToChar(int key) { + switch(key) { + case BUTTON_LEFT: + return '<'; + case BUTTON_RIGHT: + return '>'; + case BUTTON_UP: + return '^'; + case BUTTON_DOWN: + return 'v'; + } +} + +// display a command +void PrintCommandI(int i, int originY) { + Robot.text(keyToChar(commands[i]), i%14*8+5, i/14*10+originY); +} + |