Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetNetIf TextLCD mbed AX12
Revision 0:529c89c58910, committed 2011-04-11
- Comitter:
- chris
- Date:
- Mon Apr 11 23:02:19 2011 +0000
- Child:
- 1:051c84fbac55
- Commit message:
- First publishing of the Snackotron
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AX12.lib Mon Apr 11 23:02:19 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/chris/code/AX12/#ced71d1b2558
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetNetIf.lib Mon Apr 11 23:02:19 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/EthernetNetIf/#bc7df6da7589
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPClient.lib Mon Apr 11 23:02:19 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/HTTPClient/#d0be6af2d1db
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Mon Apr 11 23:02:19 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#e4cb7ddee0d3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Apr 11 23:02:19 2011 +0000
@@ -0,0 +1,192 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+#include "AX12.h"
+#include "TextLCD.h"
+
+TextLCD lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+AX12 sm1 (p9, p10, 1);
+AX12 sm2 (p9, p10, 2);
+
+EthernetNetIf eth;
+HTTPClient http;
+
+void DeliverSnack1 () {
+
+ float pos = 0.0;
+ float goal = 0.0;
+
+ led1 = 1;
+
+ // read the position of the servo
+ pos = sm1.GetPosition();
+
+ // work out where we need to position the servo
+ // we always align to 60^ boundary
+
+ sm1.SetCRSpeed(0.7);
+ if ((pos > 0.0) && (pos < 60.0)) {
+ goal = 60.0;
+ } else if ((pos > 60.0) && (pos < 120.0)) {
+ goal = 120.0;
+ } else if ((pos > 120.0) && (pos < 180.0)) {
+ goal = 180.0;
+ } else if ((pos > 180.0) && (pos < 240.0)) {
+ goal = 240.0;
+ } else if ((pos > 240.0) && (pos < 295.0)) {
+ goal = 295.0;
+ } else {
+ goal = 2.0;
+ }
+
+ do {
+ pos = sm1.GetPosition();
+ // there is a quirk in the 300-360 dead band of the AX12
+ // where it reads ~120^, briefly
+ if ((goal == 2.0) && (pos > 50.0)) {
+ pos = 0.0;
+ }
+ printf("%.2f\n",pos);
+ } while (pos < goal);
+
+
+ sm1.SetCRSpeed(0.0);
+
+ wait (2.0);
+ led1 = 0;
+}
+
+void DeliverSnack2 () {
+
+ float pos = 0.0;
+ float goal = 0.0;
+
+ led2 = 1;
+
+ // read the position of the servo
+ pos = sm2.GetPosition();
+
+ // work out where we need to position the servo
+ // we always align to 60^ boundary
+ sm2.SetCRSpeed(0.7);
+ if ((pos > 0.0) && (pos < 60.0)) {
+ goal = 60.0;
+ } else if ((pos > 60.0) && (pos < 120.0)) {
+ goal = 120.0;
+ } else if ((pos > 120.0) && (pos < 180.0)) {
+ goal = 180.0;
+ } else if ((pos > 180.0) && (pos < 240.0)) {
+ goal = 240.0;
+ } else if ((pos > 240.0) && (pos < 295.0)) {
+ goal = 295.0;
+ } else {
+ goal = 2.0;
+ }
+
+ do {
+ pos = sm2.GetPosition();
+ // there is a quirk in the 300-360 dead band of the AX12
+ // where it reads ~120^, briefly
+ if ((goal == 2.0) && (pos > 50.0)) {
+ pos = 0.0;
+ }
+ printf("%.2f\n",pos);
+ } while (pos < goal);
+
+ sm2.SetCRSpeed(0.0);
+
+ wait (2.0);
+ led2 = 0;
+}
+
+
+int main() {
+
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("Snack-o-tron");
+ lcd.locate(0,1);
+
+ // set Servo to continusous rotation
+ lcd.printf(" Init Motors");
+ //sm1.SetMode(1);
+ wait(0.5);
+
+ lcd.locate(0,1);
+ lcd.printf(" Done ");
+ wait(0.5);
+
+ lcd.locate(0,1);
+ lcd.printf(" Init Network");
+
+ printf("Setting up...\n");
+ EthernetErr ethErr = eth.setup();
+ if (ethErr) {
+ printf("Error %d in setup.\n", ethErr);
+ lcd.locate(0,1);
+ lcd.printf("Network Error %d",ethErr);
+ return -1;
+ }
+
+ // let the world know all is well!
+ printf("Setup OK\n");
+ lcd.locate(0,1);
+ lcd.printf(" Done ");
+ wait (2.0);
+ lcd.cls();
+
+ HTTPText txt;
+
+ while (1) {
+
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("Ready");
+
+ led4 = 1; // this LED flashed with every HTTP request, for sanity
+ HTTPResult r = http.get("http://danros.org.uk/py/snacks.py/snackcheck", &txt);
+
+ if (r==HTTP_OK) {
+
+ char sender[20];
+ char snack[20];
+
+ sscanf(txt.gets(),"%s\n%s\n",sender,snack);
+
+ if ( (strcmp ("0",sender)) == 0) {
+ printf("No snacks today\n");
+ } else {
+
+ printf("Sender : %s, Snack : %s\n", sender, snack);
+ lcd.cls();
+ lcd.locate(0,0);
+ lcd.printf("%s",sender);
+ lcd.locate(0,1);
+ lcd.printf("Snack %s",snack);
+
+ // What to do if snack 1 is ordered
+ if ( (strcmp ("1",snack)) == 0) {
+ DeliverSnack1();
+ }
+ // what to do if snack 2 is ordered
+ else if ( (strcmp ("2",snack)) == 0) {
+ DeliverSnack2();
+ }
+ }
+
+ } else {
+ // HTTP error
+ printf("Error %d\n", r);
+ }
+
+ // clear LEDs
+ led4 = 0;
+ wait (1.0);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Apr 11 23:02:19 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9114680c05da