My favorites | Sign in
Project Home Downloads Wiki Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* Web_Buzzer.pde - example sketch for Webduino library */

#include "Ethernet.h"
#include "WebServer.h"

/* CHANGE THIS TO YOUR OWN UNIQUE VALUE. The MAC number should be
* different from any other devices on your network or you'll have
* problems receiving packets. */
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

/* CHANGE THIS TO MATCH YOUR HOST NETWORK. Most home networks are in
* the 192.168.0.XXX or 192.168.1.XXX subrange. Pick an address
* that's not in use and isn't going to be automatically allocated by
* DHCP from your router. */
static uint8_t ip[] = { 192, 168, 1, 64 };

/* all URLs on this server will start with /buzz because of how we
* define the PREFIX value. We also will listen on port 80, the
* standard HTTP service port */
#define PREFIX "/buzz"
WebServer webserver(PREFIX, 80);

/* the piezo speaker on the Danger Shield is on PWM output pin #3 */
#define BUZZER_PIN 3

/* this is the number of microseconds to wait after turning the
* speaker on before turning it off. */
int buzzDelay = 0;

/* toggle is used to only turn on the speaker every other loop
iteration. */
char toggle = 0;

/* This command is set as the default command for the server. It
* handles both GET and POST requests. For a GET, it returns a simple
* page with some buttons. For a POST, it saves the value posted to
* the buzzDelay variable, affecting the output of the speaker */
void buzzCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
if (type == WebServer::POST)
{
bool repeat;
char name[16], value[16];
do
{
/* readPOSTparam returns false when there are no more parameters
* to read from the input. We pass in buffers for it to store
* the name and value strings along with the length of those
* buffers. */
repeat = server.readPOSTparam(name, 16, value, 16);

/* this is a standard string comparison function. It returns 0
* when there's an exact match. We're looking for a parameter
* named "buzz" here. */
if (strcmp(name, "buzz") == 0)
{
/* use the STRing TO Unsigned Long function to turn the string
* version of the delay number into our integer buzzDelay
* variable */
buzzDelay = strtoul(value, NULL, 10);
}
} while (repeat);

// after procesing the POST data, tell the web browser to reload
// the page using a GET method.
server.httpSeeOther(PREFIX);
return;
}

/* for a GET or HEAD, send the standard "it's all OK headers" */
server.httpSuccess();

/* we don't output the body for a HEAD request */
if (type == WebServer::GET)
{
/* store the HTML in program memory using the P macro */
P(message) =
"<html><head><title>Webduino Buzzer Example</title>"
"<body>"
"<h1>Test the Buzzer!</h1>"
"<form action='/buzz' method='POST'>"
"<p><button name='buzz' value='0'>Turn if Off!</button></p>"
"<p><button name='buzz' value='500'>500</button></p>"
"<p><button name='buzz' value='1975'>1975</button></p>"
"<p><button name='buzz' value='3000'>3000</button></p>"
"<p><button name='buzz' value='8000'>8000</button></p>"
"</form></body></html>";

server.printP(message);
}
}

void setup()
{
// set the PWM output for the buzzer to out
pinMode(BUZZER_PIN, OUTPUT);

// setup the Ehternet library to talk to the Wiznet board
Ethernet.begin(mac, ip);

/* register our default command (activated with the request of
* http://x.x.x.x/buzz */
webserver.setDefaultCommand(&buzzCmd);

/* start the server to wait for connections */
webserver.begin();
}

void loop()
{
// process incoming connections one at a time forever
webserver.processConnection();

/* every other time through the loop, turn on and off the speaker if
* our delay isn't set to 0. */
if ((++toggle & 1) && (buzzDelay > 0))
{
digitalWrite(BUZZER_PIN, HIGH);
delayMicroseconds(buzzDelay);
digitalWrite(BUZZER_PIN, LOW);
}
}

Change log

r42 by ben.combee on Nov 19, 2009   Diff
Fixed usage from nextURLParam to
readPOSTparam in comments and code
Go to: 
Project members, sign in to write a code review

Older revisions

r29 by ben.combee on Jul 28, 2009   Diff
Add new demo sketch, Web_Params_1, by
Ran Talbott
Update other examples for version 1.2
r15 by ben.combee on Apr 1, 2009   Diff
Fix compilation error with code
r11 by ben.combee on Mar 31, 2009   Diff
Add lots of comments to the Buzzer and
HelloWorld demos
All revisions of this file

File info

Size: 4038 bytes, 122 lines
Powered by Google Project Hosting