diff options
Diffstat (limited to 'libraries/Robot_Control/examples/explore/R09_Picture_Browser')
-rw-r--r-- | libraries/Robot_Control/examples/explore/R09_Picture_Browser/R09_Picture_Browser.ino | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/libraries/Robot_Control/examples/explore/R09_Picture_Browser/R09_Picture_Browser.ino b/libraries/Robot_Control/examples/explore/R09_Picture_Browser/R09_Picture_Browser.ino new file mode 100644 index 0000000..a43348c --- /dev/null +++ b/libraries/Robot_Control/examples/explore/R09_Picture_Browser/R09_Picture_Browser.ino @@ -0,0 +1,159 @@ +/* Picture Browser + + You can make your own gallery/picture show with the + Robot. Put some pictures on the SD card, start the + sketch, they will diplay on the screen. + + Use the left/right buttons to navigate through the + previous and next images. + + Press up or down to enter a mode where you change + the pictures by rotating the robot. + + You can add your own pictures onto the SD card, and + view them in the Robot's gallery! + + Pictures must be uncompressed BMP, 24-bit color depth, + 160 pixels wide, and 128 pixels tall. + + They should be named as "picN.bmp". Replace 'N' with a + number between 0 and 9. + + The current code only supports 10 pictures. How would you + improve it to handle more? + + 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 + +const int NUM_PICS = 4; //Total number of pictures in Gallery + +// name the modes +const int CONTROL_MODE_KEY = 0; +const int CONTROL_MODE_COMPASS = 1; + +char buffer[] = "pic1.bmp"; // current file name +int i = 1; // Current gallery sequence counter +int mode = 0; // Current mode + +// text to display on screen +char modeNames[][9] = { "keyboard", "tilt " }; + +void setup() { + // initialize the Robot, SD card, display, and speaker + Robot.beginSD(); + Robot.beginTFT(); + Robot.begin(); + + // draw "lg0.bmp" and "lg1.bmp" on the screen + Robot.displayLogos(); + + // draw init3.bmp from the SD card on the screen + Robot.drawBMP("init3.bmp", 0, 0); + + // display instructions + Robot.stroke(0, 0, 0); + Robot.text("The gallery\n\n has 2 modes, in\n keyboard mode, L/R\n key for switching\n pictures, U/D key\n for changing modes", 5, 5); + delay(6000); + Robot.clearScreen(); + Robot.drawBMP("pb.bmp", 0, 0); + Robot.text("In tilt mode,\n quickly tilt the\n robot to switch\n pictures", 5, 5); + delay(4000); +} + +void loop() { + buffer[3] = '0'+i;// change filename of the img to be displayed + Robot.drawBMP(buffer, 0, 0); // draw the file on the screen + // change control modes + switch(mode) { + case CONTROL_MODE_COMPASS: + compassControl(3); + break; + case CONTROL_MODE_KEY: + keyboardControl(); + break; + } + delay(200); +} + +void keyboardControl() { + //Use buttons to control the gallery + while(true) { + int keyPressed = Robot.keyboardRead(); // read the button values + switch(keyPressed) { + case BUTTON_LEFT: // display previous picture + if(--i < 1) i = NUM_PICS; + return; + case BUTTON_MIDDLE: // do nothing + case BUTTON_RIGHT: // display next picture + if(++i > NUM_PICS) i = 1; + return; + case BUTTON_UP: // change mode + changeMode(-1); + return; + case BUTTON_DOWN: // change mode + changeMode(1); + return; + } + } +} + +// if controlling by the compass +void compassControl(int change) { + // Rotate the robot to change the pictures + while(true) { + // read the value of the compass + int oldV = Robot.compassRead(); + + //get the change of angle + int diff = Robot.compassRead()-oldV; + if(diff > 180) diff -= 360; + else if(diff < -180) diff += 360; + + if(abs(diff) > change) { + if(++i > NUM_PICS) i = 1; + return; + } + + // chage modes, if buttons are pressed + int keyPressed = Robot.keyboardRead(); + switch(keyPressed) { + case BUTTON_UP: + changeMode(-1); + return; + case BUTTON_DOWN: + changeMode(1); + return; + } + delay(10); + } +} + +// Change the control mode and display it on the LCD +void changeMode(int changeDir) { + // alternate modes + mode += changeDir; + if(mode < 0) { + mode = 1; + } else if(mode > 1) + mode=0; + + // display the mode on screen + Robot.fill(255, 255, 255); + Robot.stroke(255, 255, 255); + Robot.rect(0, 0, 128, 12); + Robot.stroke(0, 0, 0); + Robot.text("Control:", 2, 2); + Robot.text(modeNames[mode], 52, 2); + delay(1000); +} + |