Go Down

Topic: Problems trying to control Arduino with iPhone and Official Wifi Shield (Read 1 time) previous topic - next topic

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.

Code: [Select]

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

PaulS

Code: [Select]
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?

Go Up