1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-30 16:24:09 +03:00

SPI library to the new format and moved Robot_Motor and Robot_Control libraries

This commit is contained in:
Fede85
2013-07-03 22:00:02 +02:00
parent 87d3b4f56b
commit 2371e2ce0d
98 changed files with 14 additions and 216 deletions

View File

@ -0,0 +1,179 @@
/* Disco Bot
This sketch shows you how to use the melody playing
feature of the robot, with some really cool 8-bit music.
Music will play when the robot is turned on, and it
will show you some dance moves.
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
/* Dancing steps:
S: stop
L: turn left
R: turn right
F: go forward
B: go backwards
The number after each command determines how long
each step lasts. Each number is 1/2 second long.
The "\0" indicates end of string
*/
char danceScript[] = "S4L1R1S2F1B1S1\0";
int currentScript = 0; // what step are we at
int currentSong = 0; // keep track of the current song
static const int SONGS_COUNT = 3; // number of songs
// an array to hold the songs
char musics[][11] = {
"melody.sqm",
"menu.sqm",
"chase.sqm",
};
// variables for non-blocking delay
long waitFrom;
long waitTime = 0;
void setup() {
// initialize the Robot, SD card, display, and speaker
Robot.begin();
Robot.beginSpeaker();
Robot.beginSD();
Robot.beginTFT();
// draw "lg0.bmp" and "lg1.bmp" on the screen
Robot.displayLogos();
// Print instructions to the screen
Robot.text("1. Use left and\n right key to switch\n song", 5, 5);
Robot.text("2. Put robot on the\n ground to dance", 5, 33);
// wait for a few soconds
delay(3000);
setInterface(); // display the current song
play(0); //play the first song in the array
resetWait(); //Initialize non-blocking delay
}
void loop() {
// read the butttons on the robot
int key = Robot.keyboardRead();
// Right/left buttons play next/previous song
switch(key) {
case BUTTON_UP:
case BUTTON_LEFT:
play(-1); //play previous song
break;
case BUTTON_DOWN:
case BUTTON_RIGHT:
play(1); //play next song
break;
}
// dance!
runScript();
}
// Dancing function
void runScript() {
if(!waiting()) { // if the previous instructions have finished
// get the next 2 commands (direction and duration)
parseCommand(danceScript[currentScript], danceScript[currentScript+1]);
currentScript += 2;
if(danceScript[currentScript] == '\0') // at the end of the array
currentScript = 0; // start again at the beginning
}
}
// instead of delay, use this timer
boolean waiting() {
if(millis()-waitFrom >= waitTime)
return false;
else
return true;
}
// how long to wait
void wait(long t) {
resetWait();
waitTime = t;
}
// reset the timer
void resetWait() {
waitFrom = millis();
}
// read the direction and dirstion of the steps
void parseCommand(char dir, char duration) {
//convert the scripts to action
switch(dir) {
case 'L':
Robot.motorsWrite(-255, 255);
break;
case 'R':
Robot.motorsWrite(255, -255);
break;
case 'F':
Robot.motorsWrite(255, 255);
break;
case 'B':
Robot.motorsWrite(-255, -255);
break;
case 'S':
Robot.motorsStop();
break;
}
//You can change "500" to change the pace of dancing
wait(500*(duration-'0'));
}
// display the song
void setInterface() {
Robot.clearScreen();
Robot.stroke(0, 0, 0);
Robot.text(musics[0], 0, 0);
}
// display the next song
void select(int seq, boolean onOff) {
if(onOff){//select
Robot.stroke(0, 0, 0);
Robot.text(musics[seq], 0, 0);
}else{//deselect
Robot.stroke(255, 255, 255);
Robot.text(musics[seq], 0, 0);
}
}
// play the slected song
void play(int seq) {
select(currentSong, false);
if(currentSong <= 0 && seq == -1) { //previous of 1st song?
currentSong = SONGS_COUNT-1; //go to last song
} else if(currentSong >= SONGS_COUNT-1 && seq == 1) { //next of last?
currentSong = 0; //go to 1st song
} else {
currentSong += seq; //next song
}
Robot.stopPlayFile();
Robot.playFile(musics[currentSong]);
select(currentSong, true); //display the current song
}