Hello everyone. I have a problem about communication between Arduino uno board and Arduino wifi shield.
I want to use my computer to control the movement of the Arduino robot through wifi. Currently, I have already established a wifi system between Arduino wifi shield and my computer. But the problem is that the robot does have any reactions after the wifi shield received the commands from my computer.
This is my code:
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <Servo.h>
const int E1 = 5; // number of the PWMA pin for right wheel
const int M1 = 4; // number of the DIRA pin for right wheel
const int E2 = 6; // number of the PWMB pin for left wheel
const int M2 = 7; // number of the DIRB pin for left wheel
int status = WL_IDLE_STATUS;
char ssid[] = "KONGWE"; // your network SSID (name)
char pass[] = "LSM104323"; // your network password (use for WPA, or use as key for WEP)
unsigned int localPort = 2390; // local port to listen on
char packetBuffer[255]; //buffer to hold incoming packet
WiFiUDP Udp;
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// check for the presence of the shield:
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue:
while (true);
}
String fv = WiFi.firmwareVersion();
if ( fv != "1.1.0" )
Serial.println("Please upgrade the firmware");
// attempt to connect to Wifi network:
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// wait 10 seconds for connection:
delay(10000);
}
Serial.println("Connected to wifi");
printWifiStatus();
Serial.println("\nStarting connection to server...");
// if you get a connection, report back via serial:
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize)
{
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remoteIp = Udp.remoteIP();
Serial.print(remoteIp);
Serial.print(", port ");
Serial.println(Udp.remotePort());
// read the packet into packetBufffer
int len = Udp.read(packetBuffer, 255);
if (len > 0) packetBuffer[len] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
char val = Serial.read();
if (val != -1)
{
switch (val)
{
case 'w': // move forward
digitalWrite(E1, HIGH);
digitalWrite(M1, HIGH);
digitalWrite(E2, HIGH);
digitalWrite(M2, HIGH);
analogWrite(E1, 200);
analogWrite(E2, 200);
}
delay (3000);
}
else { //stop
digitalWrite(E1, LOW);
digitalWrite(M1, LOW);
digitalWrite(E2, LOW);
digitalWrite(M2, LOW);
analogWrite(E1, 0);
analogWrite(E2, 0);
}
}
}
void printWifiStatus() {
// print the SSID of the network you're attached to:
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// print your WiFi shield's IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("signal strength (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
Below is the result from serial monitor. For this result I input 'w' in my computer to make robot move forward. The robot should move but it doesn't.
Attempting to connect to SSID: KONGWE
Connected to wifi
SSID: KONGWE
IP Address: 192.168.1.107
signal strength (RSSI):-74 dBm
Starting connection to server...
Received packet of size 2
From 192.168.1.105, port 56984
Contents:
w
__2.ino (3.12 KB)