Hi All,
I'm a beginner to arduino and my code is basically a mash-up from various tutorials.
It works perfectly (for me) but with one small issue.
Project Information: I am hacking an Air Swimmer Remote Air Swimmers - Awesome RC Flying Shark and Clownfish! - YouTube
control so that I can control it via web browser.
The code works how I need it to BUT there's one small issue.
After sending the first command every command after that repeats the previous one as well.
Here's my current code:
//ARDUINO 1.0+ ONLY
//ARDUINO 1.0+ ONLY
#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;
////////////////////////////////////////////////////////////////////////
//CONFIGURE
////////////////////////////////////////////////////////////////////////
//byte ip[] = { 192, 168, 0, 199 }; //Manual setup only
//byte gateway[] = { 192, 168, 0, 1 }; //Manual setup only
//byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only
// if need to change the MAC address (Very Rare)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
EthernetServer server = EthernetServer(80); //port 80
////////////////////////////////////////////////////////////////////////
int led6=6;
int led7=7;
int led8=8;
int led9=9;
int myArrayF[]={500,500,500,500,500,500}; //Forward Movement Array
int myArrayT[]={500,500,500}; //Turning Movement Array
void setup(){
Serial.begin(9600);
//Pins 10,11,12 & 13 are used by the ethernet shield
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Ethernet.begin(mac);
//Ethernet.begin(mac, ip, gateway, subnet); //for manual setup
server.begin();
Serial.println(Ethernet.localIP());
}
void loop(){
// listen for incoming clients, and process qequest.
checkForClient();
}
void checkForClient(){
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
boolean sentHeader = false;
while (client.connected()) {
if (client.available()) {
if(!sentHeader){
// send a standard http response header
client.println(F("HTTP/1.1 200 OK")); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<!DOCTYPE html>");
client.println("<html>");
client.println("<head>");
client.println("<style type=\"text/css\">body {font-family: helvetica,sans-serif; color: white; background-color: black} </style>");
client.println("<title>Arduino Web Page</title>");
client.println("</head>");
client.println("<body>");
client.println("<center><h1>FLYING ORCA CONTROLS</h1></center>");
client.println("<center><a href=\"/?6\"\"><img src='http://i.imgur.com/rihOyUl.png'></a></center>");
client.println("<center><a href=\"/?7\"\"><img src='http://i.imgur.com/M6j2tA7.png'></a><a href=\"/?8\"\"><img src='http://i.imgur.com/KsRxtZQ.png'></a></center>");
client.println("<center><a href=\"/?9\"\"><img src='http://i.imgur.com/RATzpAc.png'></a></center>");
client.println("<center><p>A web page from the Arduino server</p></center>");
client.println("</body>");
client.println("</html>");
sentHeader = true;
}
char c = client.read();
if(reading && c == ' ') reading = false;
if(c == '?') reading = true; //found the ?, begin reading the info
if(reading){
Serial.print(c);
switch (c) {
case '6':
//add code here to trigger a RIGHT turn
for(int t=0; t<3; t++){ //Button Right (Turn Right)
digitalWrite(led6,HIGH);
digitalWrite(led7,LOW);
delay(myArrayT[t]);
digitalWrite(led6,LOW);
digitalWrite(led7,LOW);
delay(200);
digitalWrite(led6,LOW);
digitalWrite(led7,HIGH);
delay(200);
}
digitalWrite(led6,LOW);
digitalWrite(led7,LOW);
triggerPin(6, client);
break;
case '7':
//add code here to trigger a turn
for(int t=0; t<3; t++){ //Button Left (Turn Left)
digitalWrite(led7,HIGH);
digitalWrite(led6,LOW);
delay(myArrayT[t]);
digitalWrite(led7,LOW);
digitalWrite(led6,LOW);
delay(200);
digitalWrite(led7,LOW);
digitalWrite(led6,HIGH);
delay(200);
}
digitalWrite(led7,LOW);
digitalWrite(led6,LOW);
triggerPin(7, client);
break;
case '8':
//add code here to trigger a UP motion
digitalWrite(led8,HIGH); //Button UP for 600ms
delay(800);
digitalWrite(led8,LOW);
triggerPin(8, client);
break;
case '9':
//add code here to trigger a DOWN motion
digitalWrite(led9,HIGH); //Button DOWN for 600ms
delay(800);
digitalWrite(led9,LOW);
triggerPin(9, client);
break;
}
}
if (c == '\n' && currentLineIsBlank) break;
if (c == '\n') {
currentLineIsBlank = true;
}else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection:
}
}
void triggerPin(int pin, EthernetClient client){
//blink a pin - Client needed just for HTML output purposes.
client.print("Turning on pin ");
client.println(pin);
client.print("
");
}
I know most of you are cringing for how poorly it is put together, but if there is a way so that I can get it to just run the command once without it repeating the previous one? I also attached the schematic if it helps. Just pretend the LEDs are the buttons on the remote.
Thanks a shit-tonne in advance.