Hi guys,
I'm working on a very similar project as to that outlined here. New to the Arduino world and enjoying it so far!
I want to be able to control a number of servo's by sending keyboard keystrokes i.e. not having to press the enter key each time I want to increment servo position. Currently in the early stages of development; I've used the code supplied by MF4040 and adjusted it to my own needs. I've started with 2 servos, which increment/decrement their position on pressing the WASD keys (as shown in code below).
I'm connecting to the arduino via a telnet connection using PuTTY...
//-------Headers---------------------------------------------------------
#include <SPI.h>
#include <WiFi.h>
#include <Servo.h>
//-------Varriables---------------------------------------------------------
char ssid[] = "Addon";Â Â //Â Broadcasted SSID
char pass[] = "mypass";
int status = WL_IDLE_STATUS;
WiFiServer server(23);Â Â Â Â Â Â // Default Port 23
boolean alreadyConnected = false; // Flag to detect if already connected
Servo servo0;
Servo servo1;
Servo servo2;
int servo0pos, servo1pos = 90;
//-------Setup---------------------------------------------------------
void setup()
{
 Serial.begin(9600); // Initialize Serial 9600 BAUD
 Serial.println("'WiFi Servo Control WASD keys' loaded"); //To let me know whats loaded
 while (!Serial) {;} // Wait for Serial to connect
// Check WiFi shield is connected
 if (WiFi.status() == WL_NO_SHIELD)
 {     // If WiFi shield is not detected
  Serial.println("WiFi shield not present"); // Print error to Serial
  while(true);                // Lock Up and wait for reset
 }
Â
// Attempt to connect to Wifi network:
 while ( status != WL_CONNECTED)
 {
  Serial.print("Attempting to connect to SSID: ");
  Serial.println(ssid);Â
  status = WiFi.begin(ssid, pass);      // Start session for given SSID
  delay(10000);                // Wait 10 seconds for response
 }
Â
 server.begin();      // Start the Server
 printWifiStatus();     // Print Connected Status
Â
 servo0.write(servo0pos);  //set initial servo position
 servo1.write(servo1pos);
 servo0.attach(6);     //the pin for the servo control
 servo1.attach(8);
Â
}
//-------Main Loop---------------------------------------------------------
void loop()
{
 WiFiClient client = server.available(); // Wait for a new client
 // When the client sends the first byte, say hello:
 if (client)
 {
  if (!alreadyConnected)
  {
   client.flush();     // clear out the input buffer:
   Serial.println("Laptop has connected to Arduino");
   client.println("Hello Laptop, From Tri-Track!");
   alreadyConnected = true;
  }
Â
 while (client.connected())
 {
 while (client.available())
 {
  if (client.available())
  {Â
   char input = client.read(); // Read the bytes incoming from the client
   Serial.write(input);     // Echo the bytes to the server
   delay(2); //slow looping to allow buffer to fill with next character
  Â
  switch (input)
  {
  case 'w':
   servo0pos = servo0pos + 30;
   servo0.write(servo0pos);
   break;
  case 's':
   servo0pos = servo0pos - 30;
   servo0.write(servo0pos);
   break;
  case 'a':
   servo1pos = servo1pos + 30;
   servo1.write(servo1pos);
   break;
  case 'd':
   servo1pos = servo1pos - 30;
   servo1.write(servo1pos);
   break;
  default:
   delay(5);
  }
Â
 if (servo0pos > 180) //Let's servo position values stay in scope.
 {
  servo0pos = 180;
 }
 if (servo1pos > 180)
 {
  servo1pos = 180;
 }
 if (servo0pos < 0)
 {
  servo0pos = 0;
 }
 if (servo1pos < 0)
 {
  servo1pos = 0;
 }
Â
 input = '0'; //clears user input
 }
 }
}
}
}
//-------Print WiFi Status Subroutine-------------------------------------------------
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");
}
I know my code is less than robust! Still learning!
I want to be able to change servo position on a single keystroke and not need to hit the Enter key each time
If anyone on this thread could give me a helping hand it would be much appreciated!