Problems trying to control Arduino with iPhone and Official Wifi Shield

Hello All,

My first post here and my first Arduino, so still learning tons and may have overlooked some obvious things that will make this work. I also understand from reading / research etc. that there are still some potential issues with the official wifi shield. Anyways, here is what I am trying to do. Currently just trying to control a few LEDs wired to my Arduino with my iPhone, but ultimately would like to add a servo in to open a door lock. I'm not a complete newbie when it comes to writing code, but am not very familiar with C++. Ive read and googled and searched the forum for as much info as I could find on using the iPhone with an Arduino and wifi shield, but aside from lots of information on using it with a router and an ethernet shield, I have not found much. I tried to adapt my code from the "ardumote" app tutorial, and a another post i read on the subject. Everything compiles fine, and works well with serial control from my computer, but nothing at all from my iPhone. Code / info follows:

I am using an Arduino uno rev3 with an official (Arduino) wifi shield.
I have three 5mm LEDs connected through 300 ohm resistors on pins 5, 6 and 7.

byte mac[] = { 0x7A, 0xC4, 0x0E, 0x1C, 0xAA, 0xF3 };
byte ip[] = { 192, 168, 1, 140 };
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <SoftwareSerial.h>
#include <Servo.h> 

char ssid[] = "Leah Wifi";     //  your network SSID (name) 
char pass[] = "le725ahbak";    // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 

SoftwareSerial mySerial(2, 3); // using soft serial to monitor what the arduino is doing. The hardware serial is busy talking to the RN-XV

void setup()  
{
  pinMode(5, OUTPUT); // LED5 
  pinMode(6, OUTPUT); // LED6
  pinMode(7, OUTPUT); // LED7
  
  
  Serial.begin(9600);  // used to communicate with the RN-XV module.
  mySerial.begin(9600); // start up the second serial port used to sending messages to Arduino Serial Monitor.
  mySerial.println("Hello, world?"); // check to see if it's working
  myservo.write(pos);
  
   // attempt to connect using WPA2 encryption:
  Serial.println("Attempting to connect to WPA network...");
  status = WiFi.begin(ssid, pass);

  // if you're not connected, stop here:
  if ( status != WL_CONNECTED) { 
    Serial.println("Couldn't get a wifi connection");
    while(true);
  } 
  // if you are connected, print out info about the connection:
  else {
    Serial.println("Connected to network");
    


  }
}



void loop() // run over and over
{
  while (Serial.available())  
 {
    char ch = Serial.read();     //hoping this will transfer the characters from UDP coming in on serial port into ch?
  
    // the meat and potatoes portion of the sketch... this errors out but I want to get the idea of what I want to do down...
  
    if (ch == 'A') //Check to see if the message is "A" if it is set LED7. HIGH
      {
        digitalWrite(7,HIGH);
        mySerial.println(ch); //send the message to mySerial so I can check it.
        Serial.println("LED7 on");  // send this message back via UDP back to my iphone to confirm it happened.
      }
      
      else if (ch == 'B') //check to see if the message is "B" if it is set LED7 LOW
        {
          digitalWrite(7,LOW);
          mySerial.println(ch); //send the message to mySerial so I can check it.
          Serial.println("LED7 Off");  // send this message back via UDP back to my iphone to confirm it happened.
        }
    
      else if (ch == 'C') //check to see if the message is "C" if it is set LED6 HIGH
        {
          digitalWrite(6,HIGH);
          mySerial.println(ch); //send the message to mySerial so I can check it.
          Serial.println("LED6 On");  // send this message back via UDP back to my iphone to confirm it happened.
        }
  
      else if (ch == 'D') // check to see if the message is "D" if it is set LED6 LOW
        {
          digitalWrite(6,LOW);
          mySerial.println(ch);
          Serial.println("LED6 Off");  // send this message back via UDP back to my iphone to confirm it happened.
        }
      else if (ch == 'E') // check to see if the message is "E" if it is set LED5 High for a few seconds then LOW again.
        { 
          digitalWrite(5,HIGH);
          delay(1000);           
          digitalWrite(5,LOW);
          mySerial.println(ch); //send the message to mySerial so I can check it.
          Serial.println("LED5 Pulsed"); // send this message back via UDP back to my iphone to confirm it happened.
        }
        
        else if (ch == 'G') // check to see if the message is "G" if it is set LED5 HIGH.
        {
          digitalWrite(5,HIGH);
          mySerial.println(ch); // send the message to mySerial so I can check it.
          Serial.println("LED5 On"); // send this message back via UDP back to my iphone to confirm it happened.
        }
    else if (ch == 'H') // check to see if the message is "H" if it is set LED5 LOW.
        {
          digitalWrite(5,LOW);
          mySerial.println(ch); // send the message to mySerial so I can check it.
          Serial.println("LED5 Off"); // send this message back via UDP back to my iphone to confirm it happened.
        }
    
      else if (ch == 'F') // check to see if the message is "F" if it is set all LEDs LOW.
        {
          digitalWrite(5,LOW);
          digitalWrite(6,LOW);
          digitalWrite(7,LOW);
          mySerial.println(ch); // send the message to mySerial so I can check it.
          Serial.println("All Off"); // send this message back via UDP back to my iphone to confirm it happened.
        }
        
      else if (ch == 'X') // check to see if the message is "X" if it is Dispense the treat.
        {
          myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
          Serial.println("Dispencing Treat"); // send this message back via UDP back to my iphone to confirm it happened.
          for(pos = 0; pos < 20; pos += 1)  // goes from 0 degrees to 180 degrees 
        {                                  // in steps of 1 degree 
          myservo.write(pos);              // tell servo to go to position in variable 'pos' 
          delay(15);                       // waits 15ms for the servo to reach the position 
        } 
          delay(40);
          for(pos = 20; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
        {                                
          myservo.write(pos);              // tell servo to go to position in variable 'pos' 
          delay(15);                       // waits 15ms for the servo to reach the position 
        }
        myservo.detach();
        Serial.println("Done");  // send this message back via UDP back to my iphone to confirm it happened.
        
        }
      
        
        
        
        
 }
}

Hope I have included everything...

Thanks in advance,

Leighton

SoftwareSerial mySerial(2, 3); // using soft serial to monitor what the arduino is doing. The hardware serial is busy talking to the RN-XV

What is connected to these two pins?

Nothing on those two currently, that will be the future servo. It was in the code from when i originally grabbed it, i just left it because i didn't think it would make a difference in the time being and then would be easier once i added in the servo.

anybody else? or if someone could direct me in the right direction for more reading etc? Im new to this and greatly appreciate some guidance!

thanks,

L

Hi Bacon,

This: http://arduino.cc/en/Main/ArduinoWiFiShield

Indicates that pin 7 is used as a handshake between the board and shield. Maybe that is the source of your problem?