Simply creates a servo object from a motor object, to allow the control of the angle. uses the solar panel to look for the brightest spot, then stops.

Dependencies:   mbed

Fork of Lab6_Basic by ECE 111 At Oregon State University

Servo.cpp

Committer:
ziadeldebri
Date:
2016-11-17
Revision:
4:b3a93554fedf
Parent:
3:b787aa49b900
Child:
6:65dfd3886629

File content as of revision 4:b3a93554fedf:

 #include "mbed.h"
 #include "Servo.h"
 // gloabl varevlbe used only inseide the class 
int value_current;
int value_target;
int sum;
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) {
      sum=0;
      
}   
     /* 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);
       }

      

      }
      
      
   
void Servo::check() {

  
  for (int j = 0; j < 100; j++){
    sum += _feedback.read_u16();  
  }
  value_current = sum / 100;
  sum = 0;

  n = sprintf (buffer, "%x", value_current);
  slcd.clear();
  slcd.Home();  
  slcd.printf(buffer);
   
      }