Added various bits, main reformatted. Added .get to class Servo to allow waiting for rotation before recording information.
Fork of Lab6_Basic by
Servo.cpp
- Committer:
- Dogcatfee
- Date:
- 2016-11-19
- Revision:
- 6:a64d79286726
- Parent:
- 4:b3a93554fedf
- Child:
- 8:c2f0e524696b
File content as of revision 6:a64d79286726:
#include "mbed.h" #include "Servo.h" //added .get() to approximate position // 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); }