Arduino Controller android app

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 :slight_smile:

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 :slight_smile:

/************ 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;
  }
}