Offline
Newbie
Karma: 0
Posts: 2
|
 |
« on: March 30, 2011, 05:44:43 pm » |
Hello experts ,
Here is what I am trying to do .. I am controlling 2 dc motors and 2 linear actuators using an Arduino Mega board with an Ethernet shield . The board is then connected to a LINKSYS router (running as bridge) through the ethernet cable . The bridge is bridged to another LINKSYS router which is creating a WIFI network. On the other hand, I am trying to control all this using a joystick connected to a laptop. Therefore , there must be some sort of a software running on the laptop to map the joystick position and send that to the Arduino board through the wireless connection. I am currently using AUTOHOTKEY to map the position of the joystick to a corresponding keyboard button.
Here is how it works :
1-The AutoHotkey is running a script that will monitor the position of the joystick with respect to X and Y axis, for example it would say something like :
if X>10 Send (1); and what is this doing is sending a Ascii code of the digit one every time the condition of (the joystick is pushed to the left 10% before the origin point) x>10% of the total X axis Similarly , if 10>y>20
2- The character is sent to the serial port and received by the Arduino code to do a certain action , for example
if char(inByte == '1') {digitalwrite MotorPinLeft (High)} ;
Now, my question : Is there any other way of doing the same thing using a different client on the laptop since I am not satisfied with AutoHotKey performance ?
Also, If I want to write a line to check if connection between client and server is lost , how do I do that?
I will post entire code here for more details.. Please feel free to ask question if something isn't clear .. Any help will be appreciated
Thanks
The code: /* Lunabot Motor Control Characters are accepted via telnet connection and interpretted as motor control Commanda created 18 Dec 2009 by David A. Mellis modified 30 Dec 2010 by Bill Bagdon */
#include <SPI.h> #include <Ethernet.h>
// Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network. // gateway and subnet are optional: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; byte ip[] = { 192,168,1, 177 }; byte gateway[] = { 192,168,1, 254 }; byte subnet[] = { 255, 255, 0, 0 };
#define MotorPinLeft 9 #define MotorPinRight 6
#define ArmUp 28 #define ArmDown 22 #define BucketUp 25 #define BucketDown 27
// telnet defaults to port 23 Server server(23); boolean gotAMessage = false; // whether or not you got a message from the client yet
void setup() { pinMode(MotorPinLeft, OUTPUT); pinMode(MotorPinRight, OUTPUT); pinMode(ArmUp, OUTPUT); pinMode(ArmDown, OUTPUT); pinMode(BucketUp, OUTPUT); pinMode(BucketDown, OUTPUT); //initialize the ethernet device Ethernet.begin(mac, ip, gateway, subnet); // start listening for clients server.begin(); // open the serial port Serial.begin(9600); }
void loop() { // wait for a new client: Client client = server.available();
// when the client sends the first byte, say hello: if (client) { if (!gotAMessage) { Serial.println("We have a new client"); client.println("Welcome"); gotAMessage = true; }
// read the bytes incoming from the client: char inByte = client.read(); move(inByte); // echo the bytes back to the client: server.write(inByte); // echo the bytes to the server as well: Serial.print(inByte); } }
void move(char inByte){ if (inByte == 'x'){ digitalWrite(ArmUp, HIGH); digitalWrite(ArmDown, LOW); //1 0 } else if (inByte == 'v'){ digitalWrite(ArmUp, LOW); digitalWrite(ArmDown, HIGH); //0 1 } else if (inByte == 'n'){ digitalWrite(ArmUp, LOW); digitalWrite(ArmDown, LOW); // 0 0 } else if (inByte == 'c'){ digitalWrite(BucketUp, HIGH); digitalWrite(BucketDown, LOW); //1 0 } else if (inByte == 'b'){ digitalWrite(BucketUp, LOW); digitalWrite(BucketDown, HIGH); //0 1 } else if (inByte == 'n'){ digitalWrite(BucketUp, LOW); digitalWrite(BucketDown, LOW); //0 0 } else if (inByte == '9'){ analogWrite(MotorPinLeft, 140); // 1 } else if (inByte == '8'){ analogWrite(MotorPinLeft, 151); // 2 } else if (inByte == '7'){ analogWrite(MotorPinLeft, 162); // 3 } else if (inByte == '6'){ analogWrite(MotorPinLeft, 173); // 4 // CLOCKWISE } else if (inByte == '5'){ analogWrite(MotorPinLeft, 188); // 5 // NEUTRAL } else if (inByte == '4'){ analogWrite(MotorPinLeft, 204); // 6 // COUNTER CLK } else if (inByte == '3'){ analogWrite(MotorPinLeft, 215); // 7 } else if (inByte == '2'){ analogWrite(MotorPinLeft, 226); // 8 } else if (inByte == '1'){ analogWrite(MotorPinLeft, 237); // 9 } if (inByte == '9'){ analogWrite(MotorPinRight, 140); // 1 } else if (inByte == '8'){ analogWrite(MotorPinRight, 151); // 2 } else if (inByte == '7'){ analogWrite(MotorPinRight, 162); // 3 } else if (inByte == '6'){ analogWrite(MotorPinRight, 173); // 4 // CLOCKWISE } else if (inByte == '5'){ analogWrite(MotorPinRight, 188); // 5 // NEUTRAL } else if (inByte == '4'){ analogWrite(MotorPinRight, 204); // 6 // COUNTER CLK } else if (inByte == '3'){ analogWrite(MotorPinRight, 215); // 7 } else if (inByte == '2'){ analogWrite(MotorPinRight, 226); // 8 } else if (inByte == '1'){ analogWrite(MotorPinRight, 237); // 9 } if (inByte == 'a'){ analogWrite(MotorPinLeft, 140); // 1 } else if (inByte == 's'){ analogWrite(MotorPinLeft, 151); // 2 } else if (inByte == 'd'){ analogWrite(MotorPinLeft, 162); // 3 } else if (inByte == 'f'){ analogWrite(MotorPinLeft, 173); // 4 // CLOCKWISE } else if (inByte == 'g'){ analogWrite(MotorPinLeft, 188); // 5 // NEUTRAL } else if (inByte == 'h'){ analogWrite(MotorPinLeft, 204); // 6 // COUNTER CLK } else if (inByte == 'j'){ analogWrite(MotorPinLeft, 215); // 7 } else if (inByte == 'k'){ analogWrite(MotorPinLeft, 226); // 8 } else if (inByte == 'l'){ analogWrite(MotorPinLeft, 237); // 9 } if (inByte == 'l'){ analogWrite(MotorPinRight, 140); // 1 } else if (inByte == 'k'){ analogWrite(MotorPinRight, 151); // 2 } else if (inByte == 'j'){ analogWrite(MotorPinRight, 162); // 3 } else if (inByte == 'h'){ analogWrite(MotorPinRight, 173); // 4 // CLOCKWISE } else if (inByte == 'g'){ analogWrite(MotorPinRight, 188); // 5 // NEUTRAL } else if (inByte == 'f'){ analogWrite(MotorPinRight, 204); // 6 // COUNTER CLK } else if (inByte == 'd'){ analogWrite(MotorPinRight, 215); // 7 } else if (inByte == 's'){ analogWrite(MotorPinRight, 226); // 8 } else if (inByte == 'a'){ analogWrite(MotorPinRight, 237); // 9 } }
Send (a);
|