Description: Twittering Billy Bass plays back samples and looks out for and reads twitters!
Revision 1:27b1efbf5a46, committed 09 Apr 2011
- Comitter:
- Date:
- Sat Apr 09 08:35:20 2011 +0000
- Parent:
- 0:ad2574c88043
- Commit message:
Changed in this revision
--- a/billy.cpp Wed Apr 06 15:16:45 2011 +0000
+++ b/billy.cpp Sat Apr 09 08:35:20 2011 +0000
@@ -1,3 +1,6 @@
+// Original core billy player code factored from Steve Ravet's Big Mouth Billy Bass
+// - See http://mbed.org/cookbook/Big-Mouth-Billy-Bass
+
#include "billy.h"
#include "mbed.h"
@@ -212,7 +215,6 @@
}
void dac_out() {
- int value;
if (!movements[current_movement].played) {
if (movements[current_movement].sample<=slice) {
if (movements[current_movement].motor==0) body.pulsewidth_us(movements[current_movement].duty_cycle);
--- a/billy.h Wed Apr 06 15:16:45 2011 +0000 +++ b/billy.h Sat Apr 09 08:35:20 2011 +0000 @@ -1,3 +1,6 @@ +// Original core billy player code factored from Steve Ravet's Big Mouth Billy Bass +// - See http://mbed.org/cookbook/Big-Mouth-Billy-Bass + #ifndef BILLY_H #define BILLY_H
--- a/main.cpp Wed Apr 06 15:16:45 2011 +0000
+++ b/main.cpp Sat Apr 09 08:35:20 2011 +0000
@@ -1,3 +1,7 @@
+// Twittering Billy Bass demo example
+// Hack billy to read out samples and fetch twitters
+// Based on Steve Ravet's original Billy Bass hack
+
#include "mbed.h"
#include "MSCFileSystem.h"
@@ -5,9 +9,9 @@
#include "EthernetNetIf.h"
#include "HTTPClient.h"
+// Network and USB filesystem
EthernetNetIf eth;
HTTPClient http;
-
MSCFileSystem usb("usb");
DigitalOut setup_led(LED1);
@@ -15,6 +19,7 @@
DigitalOut downloading_led(LED3);
DigitalOut button_led(LED4);
+// Simple HTTP helper functions
int get_file(char *url, char *file) {
printf("Getting url to file [%s]...\n", url);
HTTPFile f(file);
@@ -29,7 +34,7 @@
int get_string(char *url, char *str) {
printf("Getting url [%s] to string...\n", url);
HTTPText t;
- HTTPResult r = http.get("http://danros.org.uk/billy/billy.py", &t);
+ HTTPResult r = http.get(url, &t);
if (r != HTTP_OK) {
printf("HTTPResult error %d\n", r);
str[0] = 0;
@@ -39,22 +44,26 @@
return 1;
}
+// a url to poll that returns the id of newest message
int billy_get_id(char *id) {
- return get_string("http://danros.org.uk/billy/billy.py", id);
+ return get_string("http://example.com/billy/billy.py", id);
}
+// downloads a wav file with specific id to the usb disk
int billy_get_wav(char *id) {
char url[128];
- sprintf(url, "http://danros.org.uk/billydata/%s.wav", id);
+ sprintf(url, "http://example.com/billydata/%s.wav", id);
return get_file(url, "/usb/download.wav");
}
+// downloads a movement file with specific id to the usb disk
int billy_get_mov(char *id) {
char url[128];
- sprintf(url, "http://danros.org.uk/billydata/%s.txt", id);
+ sprintf(url, "http://example.com/billydata/%s.txt", id);
return get_file(url, "/usb/download.txt");
}
+// see if there is a new message, and download it if so
int billy_get_new_message() {
static char last[64] = {0};
char id[64];
@@ -71,10 +80,12 @@
return 0;
}
+// pre-programmed songs on the USB disk
const char *songs[] = {"baddonut", "belcher", "people", "clinton", "coconut", "bushfool", "ecky", "ni", "looney", "lumber"};
int nsongs = 10;
-int billy_play_next() {
+// play the next pre-programmed song in the list
+void billy_play_next() {
static int n = 0;
char wavname[64];
char cmdname[64];
@@ -84,39 +95,42 @@
billy_play(wavname, cmdname);
}
-// Capture button presses
+// capture button presses
InterruptIn button(p24);
void button_press() {
- if(button) {
+ if(button) { // minor debounce
button_led = 1;
}
}
+// main billy loop, looking for tweets and button presses
int main() {
printf("Twittering billy...\n");
printf("Setup network...\n");
setup_led = 1;
EthernetErr ethErr = eth.setup();
- if (ethErr) {
- error("Error %d in setup\n", ethErr);
- }
- printf("Network setup OK!\n");
- setup_led = 0;
+ if(ethErr) {
+ printf("Error %d in setup\n", ethErr);
+ setup_led = 0;
+ }
- button.rise(&button_press);
+ button.rise(&button_press); // look out for button presses
while (1) {
- if(billy_get_new_message()) {
- billy_play("/usb/download.wav", "/usb/download.txt");
+ waiting_led = !waiting_led;
+
+ if(setup_led) { // if we have network
+ if(billy_get_new_message()) { // see if there is a new message
+ billy_play("/usb/download.wav", "/usb/download.txt"); // and play it if so
+ }
}
-
- if (button_led) {
- billy_play_next();
+
+ if(button_led) { // if the button has been pressed
+ billy_play_next(); // play the next song
button_led = 0;
}
- waiting_led = !waiting_led;
wait(1);
}
}

