Go Down

### Topic: How to control servo motor via user serial monitor analog input? (Read 3046 times)previous topic - next topic

#### gnozahs

##### Oct 03, 2011, 10:49 pm
Could someone link me a good write up or tutorial on controlling a servo motor and making it move to a certain degree based on user input on the serial monitor? For example, if I wanted it to move to 180 degrees, I would type in 180 and the servo motor would move to 180 degrees.

#### AWOL

#1
##### Oct 03, 2011, 10:53 pmLast Edit: Oct 04, 2011, 08:39 am by AWOL Reason: 1
Wait a few minutes, and zoomkat will be along to post some code.
Or you could save time and search for it.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

#### zoomkat

#2
##### Oct 04, 2011, 12:18 am
First time in a couple of days!

Code: [Select]
`// zoomkat 10-4-10 serial servo test// type servo position 0 to 180 in serial monitor// for writeMicroseconds, use a value like 1500// for IDE 0019 and later// Powering a servo from the arduino usually DOES NOT WORK.String readString;#include <Servo.h> Servo myservo;  // create servo object to control a servo void setup() {  Serial.begin(9600);  myservo.writeMicroseconds(2000); //set initial servo position if desired  myservo.attach(7);  //the pin for the servo control   Serial.println("servo-test-21"); // so I can keep track of what is loaded}void loop() {  while (Serial.available()) {    delay(1);      if (Serial.available() >0) {      char c = Serial.read();  //gets one byte from serial buffer      readString += c; //makes the string readString    }   }  if (readString.length() >0) {    Serial.println(readString);  //so you can see the captured string     int n;    char carray[6]; //converting string to number    readString.toCharArray(carray, sizeof(carray));    n = atoi(carray);     myservo.writeMicroseconds(n); // for microseconds    //myservo.write(n); //for degees 0-180    readString="";  } }`
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

#### gnozahs

#3
##### Oct 07, 2011, 05:48 am

First time in a couple of days!

Code: [Select]
`// zoomkat 10-4-10 serial servo test// type servo position 0 to 180 in serial monitor// for writeMicroseconds, use a value like 1500// for IDE 0019 and later// Powering a servo from the arduino usually DOES NOT WORK.String readString;#include <Servo.h> Servo myservo;  // create servo object to control a servo void setup() {  Serial.begin(9600);  myservo.writeMicroseconds(2000); //set initial servo position if desired  myservo.attach(7);  //the pin for the servo control   Serial.println("servo-test-21"); // so I can keep track of what is loaded}void loop() {  while (Serial.available()) {    delay(1);      if (Serial.available() >0) {      char c = Serial.read();  //gets one byte from serial buffer      readString += c; //makes the string readString    }   }  if (readString.length() >0) {    Serial.println(readString);  //so you can see the captured string     int n;    char carray[6]; //converting string to number    readString.toCharArray(carray, sizeof(carray));    n = atoi(carray);     myservo.writeMicroseconds(n); // for microseconds    //myservo.write(n); //for degees 0-180    readString="";  } }`

I put this code inside my already exisiting code and when I enter in a number, ie. 0, it automatically goes to 180 degrees. It does this for any number I input. And also, it only reads an input once, I can't enter another number in and make it move again.

#### zoomkat

#4
##### Oct 07, 2011, 05:57 am
Quote
I put this code inside my already exisiting code and when I enter in a number, ie. 0, it automatically goes to 180 degrees. It does this for any number I input. And also, it only reads an input once, I can't enter another number in and make it move again.

Then I would suspect something incompatable with your existing code.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0

#### gnozahs

#5
##### Oct 07, 2011, 09:11 pm
Here is part of my code so far.

How do I make it so that when the "System deactived" pops up on the serial monitor after hitting my push button, it deletes the "System active Enter degree(s) 0-180." line and just displays "System deactived". Right now it's showing:
System active
Enter degree(s) 0-180.
System deactivated

Code: [Select]
`#include <Servo.h>                          int buttonPin = 2;              // pushbutton switch is connected to pin 2int ButtonMode = 0;int pushbutton;                        // variable for reading the pin statusint doublecheck;                       // variable for reading the delayed statusint buttonState;                // variable to hold the button state; initialServo servomotor;int Hundreds;int Tens;int Ones;int Good_value;int Degrees =0;int lol=0;int var = 0;int outputValue = 0;void setup() {  pinMode(buttonPin, INPUT);    // Declare pushbutton as input servomotor.attach(9); // servo is on pin 9     Serial.begin(9600);             buttonState = digitalRead(buttonPin);   // read the initial state}void loop(){    pushbutton = digitalRead(buttonPin);      // read input value and store it in pushbutton  delay(10);                                // 10 milliseconds  doublecheck = digitalRead(buttonPin);     // read the input again to check for bounces  if (pushbutton == doublecheck) {          // make sure we got 2 consistant readings    if (pushbutton != buttonState) {        // the button state has changed      if (pushbutton == LOW) {             // check if the button is pressed        if (ButtonMode == 0) {               // if its off          ButtonMode = 1;           // First time push          Serial.println("System active");  Serial.println("Enter degree(s) 0-180.");          } else {          if (ButtonMode == 1) {             // After first push            ButtonMode = 0; // Go onto the 2nd case            Serial.println("System deactived");                      }         }      }    }    buttonState = pushbutton;                 // save the new state in our variable  }  // Different motor modes for each push of the button  if (ButtonMode == 0) {                // initial mode    servomotor.write(90); // set servo to 90 degree position  }`

#### PaulS

#6
##### Oct 07, 2011, 09:38 pm
Quote
How do I make it so that when the "System deactived" pops up on the serial monitor after hitting my push button, it deletes the "System active Enter degree(s) 0-180." line and just displays "System deactived".

To do this, you need to use something other than the Serial Monitor that comes with the Arduino. What you use needs to understand something like VT100, and you need to include appropriate VT100 codes in what you send to make it clear the screen.

In a former job, I knew all about how to make VT100 screens do all kinds of cool stuff, but that was 25 years ago.

Go Up

Please enter a valid email to subscribe