Added various bits, main reformatted. Added .get to class Servo to allow waiting for rotation before recording information.

Dependencies:   SLCD mbed

Fork of Lab6_Basic by ECE 111 At Oregon State University

Servo.cpp

Committer:
Dogcatfee
Date:
2016-11-19
Revision:
10:37cbc2888e09
Parent:
8:c2f0e524696b

File content as of revision 10:37cbc2888e09:

 #include "mbed.h"
 #include "Servo.h"
 // gloabl varevlbe used only inseide the class 
int value_current;
int value_target;
float value_target_raw;
Ticker tick;
SLCD slcd;
int n;
int counter;
char buffer[50];

Servo::Servo(PinName analog_input,PinName Positive, PinName Negative,PinName Speed):
     _feedback(analog_input),_motor(Positive,Negative,Speed) {
      
}   
     /* input is angle intger from 0 - 180 
     *  
     */
void Servo::set(int degree) {
   if(degree > 90){
   value_target = degree;   // set the value target as the input of the function
   tick.attach(this,&Servo::move,0.001); // set the ticker to call move every 0.001 sec
}
  else{
   value_target = degree-15;   // set the value target as the input of the function
   tick.attach(this,&Servo::move,0.001);   
      } 
  
       }//End of Move
   
void Servo::move() {

value_current = (int)((int)(_feedback*1000)*0.30769230769);

if(value_target > value_current){ 
        _motor.Direction(LEFT);
      //  _motor.Speed(10);
        //wait(0.1);
        n = sprintf (buffer, "%d", value_current);
        slcd.clear();
        slcd.Home();  
        slcd.printf(buffer); 
       }
else if(value_target < value_current){
        _motor.Direction(RIGHT);
      //  _motor.Speed(counter);
        n = sprintf (buffer, "%d", value_current);
        slcd.clear();
        slcd.Home();  
        slcd.printf(buffer);
        }     
else if((value_target == value_current))
 {
        tick.detach();
        _motor.Stop();
        n = sprintf (buffer, "%d", value_current);
        slcd.clear();
        slcd.Home();  
        slcd.printf(buffer);
       }


      

      }
      
     unsigned int Servo::get()
        {
            value_current = (int)((int)(_feedback*1000)*0.30769230769);
           // n = sprintf (buffer, "%d", value_current);
            return value_current;
        }
   
void Servo::check() {

  value_current = (int)((int)(_feedback*1000)*0.30769230769);
  n = sprintf (buffer, "%d", value_current);
  slcd.clear();
  slcd.Home();  
  slcd.printf(buffer);
   
      }