system
1
Hello!
I made a simple application for the ethernet shield to control a blinkm RGB LED. It has a small form on a webpage to change the colors as you wish.
I used several libraries as you can see in my code..
Hope you like it
// Small Arduino Webserver
// by Andreas Cahen
//
// Used libraries and examples:
//
// Arduino Ethershield, server.pde
// TextString Library, WString.h
// Blinkm Library, BlinkMfuncs.h
#include <Ethernet.h>
#include <WString.h>
#include <Wire.h>
#include <BlinkM_funcs.h>
#define maxLength 25
#define blinkm_addr 0x00
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
String inString = String(maxLength);
int val;
int r;
int g;
int b;
Server server(80);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
BlinkM_beginWithPower();
BlinkM_stopScript( blinkm_addr );
}
void loop()
{
Client client = server.available();
if (client) {
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (inString.length() < maxLength) {
inString.append(c);
}
if (c == '\n' && current_line_is_blank) {
if (inString.contains("?")) {
int Pos_r = inString.indexOf("r");
int Pos_g = inString.indexOf("g");
int Pos_b = inString.indexOf("b");
int End = inString.indexOf("H");
r = atoi(inString.substring((Pos_r+2), (Pos_g-1)));
g = atoi(inString.substring((Pos_g+2), (Pos_b-1)));
b = atoi(inString.substring((Pos_b+2), (End-1)));
BlinkM_fadeToRGB( blinkm_addr, r, g, b );
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html><head></head><body>");
client.println("<h1>blinkm & ethershield colorpicker</h1>");
client.println("<form method=get>R:<input type=text size=3 name=r>G:<input type=text size=3 name=g>B:<input type=text size=3 name=b> <input type=submit value=submit></form></body></html>");
break;
}
if (c == '\n') {
current_line_is_blank = true;
} else if (c != '\r') {
current_line_is_blank = false;
}
}
}
delay(1);
inString = "";
client.stop();
}
}
Here some pictures...
Cheers,
Andreas
boomy
2
This is great!
I've learned to use the ethernet en webpage modules from your code.
Thank you so much!
Now I'm going to find out if I can build something like:
(Controlling the light via a graphical hue interface via a browser)
system
3
updated for Arduino 0021. Thanks for the original code Andreas!
// Small Arduino Webserver --- for BlinkM
// by Andreas Cahen ---** updated for Arduino 0021 - by PsycleSam and Co. 20101219 tested on arduino uno with updated ethernet shield
//
// Used libraries and examples:
//
// Arduino Ethershield, server.pde
// Blinkm Library, BlinkMfuncs.h +++**SPI Library, SPI.h
// ---** no longer used - TextString Library, WString.h
#include <SPI.h>
#include <Ethernet.h>
//#include <WString.h>
#include <Wire.h>
#include <BlinkM_funcs.h>
#define maxLength 25
#define blinkm_addr 0x09
byte mac[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //update with your MAC and IP
byte ip[] = {
192, 168, 0, 200 };
String inString = String(maxLength);
int val;
int r = 0;
int g = 0;
int b = 0;
char colorBuff[4];
Server server(80);
void setup()
{
//Serial.begin(9600);
Ethernet.begin(mac, ip);
server.begin();
BlinkM_beginWithPower();
BlinkM_stopScript( blinkm_addr );
}
void loop()
{
int bufLength;
Client client = server.available();
if (client) {
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (inString.length() < maxLength) {
//inString.append(c);
inString += c;
}
if (c == '\n' && current_line_is_blank) {
if (inString.indexOf("?") > -1) {
int Pos_r = inString.indexOf("r");
int Pos_g = inString.indexOf("g", Pos_r);
int Pos_b = inString.indexOf("b", Pos_g);
int End = inString.indexOf("H", Pos_b);
if(End < 0){
End = inString.length() + 1;
}
bufLength = ((Pos_g) - (Pos_r+2));
if(bufLength > 4){ //dont overflow the buffer
bufLength = 4;
}
inString.substring((Pos_r+2), (Pos_g-1)).toCharArray(colorBuff, bufLength); //transfer substring to buffer
r = atoi(colorBuff);
bufLength = ((Pos_b) - (Pos_g+2));
if(bufLength > 4){ //dont overflow the buffer
bufLength = 4;
}
inString.substring((Pos_g+2), (Pos_b-1)).toCharArray(colorBuff, bufLength); //transfer substring to buffer
g = atoi(colorBuff);
bufLength = ((End) - (Pos_b+2));
if(bufLength > 4){ //dont overflow the buffer
bufLength = 4;
}
inString.substring((Pos_b+2), (End-1)).toCharArray(colorBuff, bufLength); //transfer substring to buffer
b = atoi(colorBuff);
// Serial.print("Red = ");
// Serial.println( r );
// Serial.print("Grn = ");
// Serial.println( g );
// Serial.print("Blu = ");
// Serial.println( b );
BlinkM_fadeToRGB( blinkm_addr, r, g, b );
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html><head></head><body>");
client.println("<h1>BlinkM - enter values 0 to 255</h1>");
client.print("<form method=get>R:<input type=text size=3 name=r value=");
client.print(r);
client.print(">G:<input type=text size=3 name=g value=");
client.print(g);
client.print(">B:<input type=text size=3 name=b value=");
client.print(b);
client.println("> <input name=H type=submit value=submit></form>");
client.println("</body></html>");
break;
}
if (c == '\n') {
current_line_is_blank = true;
}
else if (c != '\r') {
current_line_is_blank = false;
}
}
}
delay(1);
inString = "";
client.stop();
}
}