marque:
in thise piece of code you can set two variable with you android app.
Thanks for the explanation! The app works superbly!!! THANKS AGAIN
I've set it to control a servo (which will be connected to a dimmer). I'm sharing the code below just in case anyone else wishes to control a servo with the app. The relays/switches part of the code below is still incomplete, but the servo part works perfectly. I've also applied the code change to allow 2-digit codes, so make sure they are all 01, 02, 03 in your android app settings.
Currently you have 2 buttons "dimmer down" (04) and "dimmer up" (14) that you can use to move the servo by a pre-defined angle. It also disconnects the servo after 1 second of no command, to avoid unnecessary current draw/vibrations, and also let it be freely moveable to allow manual control of the dimmer.
I've not changed anything in the checkClient() function.
Next, i'll be adding an IR control
/************ Marque's Arduino Controller Example ************/
/*********** for questions: marque.l@gmail.com ***********/
/*
http://arduino.cc/forum/index.php?topic=127770.0
In the android app settingsscreen you can set up you IP and port.
For this example you need to call prefix 1 "B" and prefix 2 "C".
*/
#include <Ethernet.h>
#include <HTTPClient.h>
#include <SPI.h>
#include <Servo.h> // servo library added
//MARQUESOFT's CODE
int RecievedString;
int valueB;
int valueC;
String readString = String(20);
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x9A, 0x4D };
EthernetServer server(80); // port to listen on
EthernetClient client;
char content_main_top[] = "<body bgcolor=black><font color=white><center>";
char S1[] = "Globe OFF" ;
char S2[] = "Couch Lights OFF" ;
char S3[] = "Loft Lights OFF";
char S4[] = "Dim Globe";
char S5[] = "05";
char S6[] = "06";
char S11[] = "Globe ON" ;
char S12[] = "Couch Lights ON" ;
char S13[] = "Loft Lights ON";
char S14[] = "Brighten Globe";
char S15[] = "15";
char S16[] = "16";
char S404[] = "Not Found";
//DIMMER SETUP
Servo dimmerServo; // create a servo object
int servoPin = 9;
int dimmerMax = 170; // the furthest the servo+dimmer goes anti-clockwise
int dimmerMin = 0; // the furthest the servo+dimmer goes clockwise
int dimmerIncrement = 10; // the step size for each button press
int dimmerVal = 0;
int dimmerValueShowPhone = dimmerMax - dimmerVal;
boolean detachServo = false; // note if the servo needs to be detached
long detachServoRequestTime = 0; //the millis at which detach servo was last requested
//RELAY SETUP
/************************** Setup **********************/
void setup()
{
Serial.begin(9600);
Serial.println("Getting IP......");
Ethernet.begin(mac);
Serial.print("My IP address: ");
Ethernet.localIP().printTo(Serial);
Serial.println();
Serial.print("Gateway IP address is ");
Ethernet.gatewayIP().printTo(Serial);
Serial.println();
Serial.print("DNS IP address is ");
Ethernet.dnsServerIP().printTo(Serial);
Serial.println();
}
void loop()
{
checkclient();
if (detachServo == true) { detachServoAfterDelay(); }
}
void checkclient()
{
EthernetClient client = server.available();
if (client)
{
boolean sentHeader = false;
while (client.connected())
{
if (client.available())
{
if(!sentHeader){
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
sentHeader = true;
}
char c = client.read();
if (readString.length() < 20)
Serial.print(c); //For debuggin in Serial Monitor window
{readString.concat(c);}
if (c == 'H')
{
Serial.println();
int Is = readString.indexOf("/");
int Iq = readString.indexOf("?");
int Ib = readString.indexOf("b");
int Ic = readString.indexOf("c");
if(readString.indexOf("?") > 1)
{
if (Ib == (Iq+1))
{
char carray[5];
readString.toCharArray( carray,5,(Ib+1));
Serial.println(carray);
valueB = atof(carray);
Serial.print("B is now: ");
Serial.println(valueB);
client.print (content_main_top);
client.print("B is now: ");
client.print(valueB);
}
else if (Ic == (Iq+1))
{
char carray[5];
readString.toCharArray( carray,5,(Ic+1));
Serial.println(carray);
valueC = atof(carray);
Serial.print("C is now: ");
Serial.println(valueC);
client.print (content_main_top);
client.print("C is now: ");
client.print(valueC);
}
else
{
char carray[2];
readString.toCharArray( carray,3,(Iq+1));
RecievedString = atoi(carray);
switch (RecievedString) {
case 1: action(1, client);break;
case 2: action(2, client);break;
case 3: action(3, client);break;
case 4: action(4, client);break;
case 5: action(5, client);break;
case 6: action(6, client);break;
case 11: action(11, client);break;
case 12: action(12, client);break;
case 13: action(13, client);break;
case 14: action(14, client);break;
case 15: action(15, client);break;
case 16: action(16, client);break;
default: action(404, client);
}
}
delay(1);
client.stop();
readString="";
client.read(); client.read();
}
if (Iq < 0)
{
action(404, client);
delay(1);
client.stop();
readString="";
client.read(); client.read();
}
delay(1);
client.stop();
readString="";
client.read(); client.read();
}
}
}
}
}
void action(int x, EthernetClient client)
{
if (x == 1)
{client.print (content_main_top);
client.println(S1);
Serial.println(S1);
}
if (x == 2)
{client.print (content_main_top);
client.println(S2);
Serial.println(S2);
}
if (x == 3)
{client.print (content_main_top);
client.println(S3);
Serial.println(S3);
}
if (x == 4) // Dimmer Globe Down
{client.print (content_main_top);
client.println(S4);
Serial.println(S4);
dimmerDown();
client.println(dimmerValueShowPhone);
}
if (x == 5)
{client.print (content_main_top);
client.println(S5);
Serial.println(S5);
}
if (x == 6)
{client.print (content_main_top);
client.println(S6);
Serial.println(S6);
}
if (x == 11)
{client.print (content_main_top);
client.println(S11);
Serial.println(S11);
}
if (x == 12)
{client.print (content_main_top);
client.println(S12);
Serial.println(S12);
}
if (x == 13)
{client.print (content_main_top);
client.println(S13);
Serial.println(S13);
}
if (x == 14)
{client.print (content_main_top);
client.println(S14);
Serial.println(S14);
dimmerUp();
client.println(dimmerValueShowPhone);
}
if (x == 15)
{client.print (content_main_top);
client.println(S15);
Serial.println(S15);
}
if (x == 16)
{client.print (content_main_top);
client.println(S16);
Serial.println(S16);
}
if (x == 404)
{client.print (content_main_top);
client.println(S404);
Serial.println(S404);
}
x=0;
}
void dimmerUp() {
if (detachServo == false) { dimmerServo.attach(servoPin); } // only re-attach if its already been detached
dimmerVal = dimmerVal - dimmerIncrement;
if (dimmerVal < dimmerMin) { dimmerVal = dimmerMin; } // making sure it doesnt cross the minimum
dimmerServo.write(dimmerVal);
delay(10); // wait for the servo to get there
detachServo = true; // flags it to be detached after a few seconds
detachServoRequestTime = millis();
dimmerValueShowPhone = dimmerMax - dimmerVal;
}
void dimmerDown() {
if (detachServo == false) { dimmerServo.attach(servoPin); } // only re-attach if its already been detached
dimmerVal = dimmerVal + dimmerIncrement;
if (dimmerVal > dimmerMax) { dimmerVal = dimmerMax; } // making sure it doesnt cross the maximum
dimmerServo.write(dimmerVal);
delay(10); // wait for the servo to get there
detachServo = true; // flags it to be detached after a few seconds
detachServoRequestTime = millis();
dimmerValueShowPhone = dimmerMax - dimmerVal;
}
void detachServoAfterDelay() { // timed detach for servo after dimmer up or dimmer down to prevent heat / fatigue / vibrations for the servo
unsigned long currentMillis = millis();
if ( (currentMillis - detachServoRequestTime) > 1000 ) //time has passed
{
dimmerServo.detach();
detachServo = false;
}
}