Hi Guys,
I'm new to Arduino and require some advise on my project.
I'm currently working on a project which require me to control varies type of motor etc(Servo, Stepper & DC motor) via web browser. But currently i had an issue that i'm only able to control 1 type a motor at a time. Once i input all 3 types of codes together, it seem not working. Im using Arduino UNO, Arduino Ethernet shield & Adafruit motor shieldV2.3 on this project. I need some advise. my source code are attached below.
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h> //Servo Motor Library
//Include Adafruit DCmotor lib
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"
//Assign Motor types variable
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Or, create it with a different I2C address (say for stacking)
// Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61);
// Select which 'port' M1, M2, M3 or M4. In this case, M3
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); //DC motor on M3 port
// You can also make another motor on port M2
//Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2);
// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotorStepper = AFMS.getStepper(200, 2);//Stepper use M3 & M4
//Servo motor
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0x05 }; //physical mac address
byte ip[] = {
192, 168, 1, 178 }; // ip in lan (that's what you need to use in your browser. ("192.168.1.178")
byte gateway[] = {
192, 168, 1, 1 }; // internet access via router
byte subnet[] = {
255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString="";
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
//Include DCmotor setup
AFMS.begin(); // create with the default frequency 1.6KHz
//AFMS.begin(1000); // OR with a different frequency, say 1KHz
// Set the speed to start, from 0 (off) to 255 (max speed)
myMotor->setSpeed(40);
//myMotor->run(FORWARD);
//turn on motor
myMotor->run(RELEASE);
myMotorStepper->setSpeed(30);//Stepper Speed
myservo.attach(9); // attaches the servo on pin 9 to the servo object, Adafruit on Servo 2
}
//Main loop
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
//if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
//}
//if HTTP request has ended
if (c == '\n') {
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
//client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
//client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<TITLE>Max Liew Dc Motor Control Webserver </TITLE>");
client.println("</HEAD>");
client.println("<BODY style='background-color:lightgrey'>");
client.println("<H1 style='color:#333399 text-align:center'>Max Liew Dc Motor Control Webserver </H1>");
client.println("<hr />");
client.println("<H2 style=\"text-align:center\">Arduino with Ethernet Shield & Adafruit Motor Shield</H2>");
//DC Motor
client.println("<h2>DC Motor</h2>");
client.println("<input type=button value=Forward onmousedown=\"location.href='/?button2Forward'\"></input> ");
client.println("<input type=button value=Backward onmousedown=\"location.href='/?button2Backward'\"></input> ");
client.println("<input type=button value='STOP' onmousedown=\"location.href='/?button2Stop'\"></input>
");
//Stepper Motor
client.println("<h2>Stepper Motor</h2>");
client.println("<input type=button value=Forward onmousedown=\"location.href='/??FSingle'\"></input> ");
client.println("<input type=button value=Backward onmousedown=\"location.href='/?BSingle'\"></input>");
//Servo Motor
client.println("<h2>Servo Motor</h2>");
client.println("<input type=button value=Left onmousedown=\"location.href='/?Fleft'\"></input> ");
client.println("<input type=button value=Right onmousedown=\"location.href='/?Fright'\"></input>
");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button2Forward") >0){
delay(15);
myMotor->run(FORWARD);//Motor will rotate forward
}
if (readString.indexOf("?button2Backward") >0){
delay(15);
myMotor->run(BACKWARD);//Motor will rotate backward
}
if (readString.indexOf("?button2Stop") >0){
delay(15);
myMotor->run(RELEASE);//Motor will STOP
}
//Stepper motor
if (readString.indexOf("?FSingle") >0){
delay(15);
myMotorStepper->step(200,FORWARD, SINGLE);
}
if (readString.indexOf("?BSingle") >0){
delay(15);
myMotorStepper->step(200,BACKWARD, SINGLE);
}
//Servo
if (readString.indexOf("?Fright") >0){
for(pos ; pos < 180; pos += 3) // 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
}
}
if (readString.indexOf("?Fleft") >0){
for(pos ; pos>=1; pos-=3) // 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
}
}
readString="";//clearing string for next read
}
}
}
}
}