Professional Documents
Culture Documents
Latest Code With Instant Skipping
Latest Code With Instant Skipping
//#define PIN_OUTPUT 3
ESP32Encoder encoder; //encoder created by the name "encoder"
float ankle_angle[70] = { -0.4, -2.5, -4.7, -6.5, -7.6, -7.8, -7.2, -6, -4.6, -3.1,
-1.8, -0.6, 0.4, 1.2, 2.1, 2.8, 3.4, 3.9, 4.2, 4.6, 4.9, 5.3, 5.9, 6.4, 6.7, 6.9,
6.9, 6.9, 6.8, 6.8, 6.8, 6.5, 5.9, 4.8, 3.2, 1.2, -1.4, -4.4, -8, -11.8, -15.4, -
18.3, -20.1, -20.5, -19.8, -18.2, -16.2, -14, -11.8, -9.9, -8.1, -6.5, -5.2, -4.1,
-3.2, -2.5, -2, -1.6, -1.3, -1.1, -0.8, -0.4, 0.1, 0.7, 1.3, 1.7, 1.7, 1.2, 0, };
float time_step[71] = {0, 0.014, 0.029, 0.043, 0.057, 0.072 ,0.086, 0.1 ,0.114,
0.129, 0.143, 0.157, 0.172, 0.186, 0.2, 0.215, 0.229, 0.243, 0.257, 0.272, 0.286,
0.3, 0.315, 0.329, 0.343, 0.358, 0.372, 0.386, 0.4, 0.415, 0.429, 0.443, 0.458,
0.472, 0.486, 0.501, 0.515, 0.529, 0.543, 0.558, 0.572, 0.586, 0.601, 0.615, 0.629,
0.644, 0.658, 0.672, 0.686, 0.701, 0.715, 0.729, 0.744, 0.758, 0.772, 0.787, 0.801,
0.815, 0.829, 0.844, 0.858, 0.872, 0.887, 0.901, 0.915, 0.93, 0.944, 0.958,
0.972,0.986};
int delta_t = 0;
const int dirA=4; // only this pin is for directio
const int dirB=27; // this pin is used as enable on motor driver
int i = 0;
int n = 0;
int timeloop;
int prevtime;
//Specify the links and initial tuning parameters
////////////////////////////////////////////////////
///////////////////////////////////////////////////
void setup(){
void loop(){
Input = encoder.getCount(); // update the input value with new encoder value
prevtime = millis();
Setpoint = ankle_angle[n]/0.011;
//Setpoint = Setpoint + 2200;
delta_t = (time_step[n+2] - time_step[n])*1000;
//Serial.print("Set point value is =");
//Serial.println(Setpoint);
//Serial.println(millis());
//Serial.print("DATA,TIME,");
//Serial.print(i++);
Serial.print(",");Serial.print(millis());Serial.print(",");
Serial.print(encoder.getCount());
Serial.print(",");Serial.println(Setpoint);
n+2;
if(n >= 69){
n=0;
}
}
//Serial.println(Setpoint);
//Serial.println(encoder.getCount());
if(Output<0){ //this is CW direction
digitalWrite(dirA,HIGH); // low is CW direction
digitalWrite(dirB,HIGH); // dir B is enable pin
analogWrite(2, abs(Output)); // motor pwm is pwm
}
else if(Output>=0){ // this ccw direction
digitalWrite(dirA,LOW);
digitalWrite(dirB,HIGH);
analogWrite(2, Output);
}
//Kp=1;
//delay(100);
recvWithEndMarker();
showNewNumber();
void recvWithEndMarker() {
static byte ndx = 0;
char endMarker = '\n';
char rc;
if (Serial.available() > 0) {
rc = Serial.read();
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
ndx = 0;
newData = true;
}
}
}
void showNewNumber() {
if (newData == true) {
dataNumber = 0; // new for this version
dataNumber = atof(receivedChars); // new for this version
Kp = dataNumber;
//Kp = static_cast<double>(dataNumber);
//Serial.print("This just in ... ");
//Serial.println(receivedChars);
//Serial.print("Data as Number ... "); // new for this version
//Serial.println(dataNumber); // new for this version
newData = false;
myPID.SetTunings(Kp, Ki, Kd);
}
}