2

I have this assignment and I have been tinkering a long time about it. I need to make a simulation of a parking lot where servos would represent the ramps.

I will be using 2 Arduinos running the same script, one representing the entry ramp and the other one the exit. Servos are controlled by reading a json request of an web application and manually by buttons. I have connected two LED's when the buttons are pressed. I would also need to make state when servo would be always up or always down (that would represent the off times of parking lot), should I add extra buttons for that? Any idea would be appreciated.

The problem I'm having with this project is that servos are not responding well on push buttons. They are shaking and very slow moving. And I think that it isn't a good solution to move the servos while they are sending application request because it can lead to conflict. Please help me there.

I have written pretty major piece of script, but it still needs adjusments. Any help is welcomed. Here is the code:

#include<Servo.h>
#include<Ethernet.h>
#include <SPI.h>
Servo myservo;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "ramp-rampcontrol.rhcloud.com"; 
EthernetClient client;
IPAddress ip(192,168,1,17);
int button_5 = 5;
int button_6 = 6;
const int ledPin = 3;
const int ledPinG = 2;
int time = 5*1000;
int val=0;
String content = "";
boolean begin1 = false;
void setup() {
Serial.begin(9600);
pinMode(button_5, INPUT);
pinMode(button_6, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPinG, OUTPUT);
myservo.attach(9);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
// try to congifure using IP address instead of DHCP:
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println("connecting...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.println("GET /api/actions?parking_id=39 HTTP/1.1");
client.println("Host: ramp-rampcontrol.rhcloud.com");
client.println("Connection: close");
client.println();
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
 } 
}
void loop()
{ 
val = digitalRead(button_5);
if (val == HIGH)
{
 performServoAction("up");
 digitalWrite(ledPin, HIGH);
 delay(1000);
 digitalWrite(ledPin, LOW);
 delay(1000);
}
val = digitalRead(button_6);
if (val == HIGH)
{
 performServoAction("down");
 digitalWrite(ledPinG, HIGH);
 delay(1000);
 digitalWrite(ledPinG, LOW);
 delay(1000); 
 }
 while(client.available()) {
 char c = client.read(); 
 if(c == '{'){
 begin1 = true;
 }
 if (begin1) { 
 content += c;
 }
 if (c == '}') {
 break; 
 }
 }
 if (!client.connected()) {
 Serial.println();
 Serial.println("disconnecting.");
 client.stop();
 performAction();
 }
 }
bool performServoAction(String action_type) {
if (action_type == "up") {
 Serial.println("doing up");
 myservo.write(95);
 delay(time);
 // lastRampStatus = action_type ;
 // notifyServerAboutAction("true", action_id);
 return true;
 }
 if (action_type == "down") {
 Serial.println("doing down");
 myservo.write(135);
 delay(time);
 //lastRampStatus = action_type;
 // notifyServerAboutAction("true", action_id);
 return true;
 }
}
 void performAction() {
 int nstart = content.indexOf("action_id") + 12;
 int nend = content.indexOf(",", nstart);
 String actionID = content.substring(nstart, nend);
 int nstart1 = content.indexOf("action_type") + 14; 
 //Get position of "action_type" in a string, increment by 13 
 (length of 'action_type":"')
 int nend1 = content.indexOf("\"", nstart1); // Get next position 
 of '"' starting from nstart
 String actionType = content.substring(nstart1, nend1); 
 //Return substring between this position
 performServoAction(actionType);
 Serial.println(nstart1);
 Serial.println(nend1);
 Serial.println(actionID);
 Serial.println(actionType);
 Serial.println(content);
}
user3704293
4717 silver badges19 bronze badges
asked Sep 8, 2015 at 10:11
4
  • Do the servos behave when moving after receiving the json command? You have the program waiting for 5 seconds after the servo is told to move 'up' or 'down' - I don't see where a conflict could creep in to cause the servos to move slowly. Commented Sep 9, 2015 at 12:41
  • They just vibrate, and they dont react to the push buttons. I'm starting to think that it may be a hardware problem. Commented Sep 9, 2015 at 13:06
  • 1
    I would start with just some servo example sketches and make sure you haven't made a simple mistake. It happens to us all. Commented Sep 9, 2015 at 13:08
  • Yeah sounds like the problem is servo issue just play with a servo example and then expand. Commented Sep 10, 2015 at 4:01

1 Answer 1

1

Instead of using:

myservo.write(135);

You should use:

myservo.writeMicroseconds();

https://www.arduino.cc/en/Reference/ServoWriteMicroseconds

answered Sep 17, 2015 at 20:41

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.