using namespace std;
double map(
double x,
double in_min,
double in_max,
double out_min,
double out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
if(!
myRIO_init()) {cout <<
"Error initializing myRIO";
return -1;}
double xAcc, lastxAcc = 180, zAcc;
const double ACC_G = 1.042968750;
double accFilterA = 0.6321, accFilterB = 0.3679;
double accFiltered = 180, oldAccFiltered = 180, oldAcc = 180;
double angle = 180;
if(
myRIO_error()) {cout <<
"Gyro - Error while initializing" << endl;
return -1;}
if(
myRIO_error()) {cout <<
"Gyro - Error while calibrating" << endl;
return -1;}
const double GYRO_WEIGHT = 0.9;
Wifi w([&](
short setpoint) {});
while(!w.isConnected());
system("clear");
xAcc = asin(xAcc/ACC_G)*180./3.1415926535898;
if(zAcc>=0) xAcc=180-xAcc;
if(xAcc!=xAcc) xAcc = lastxAcc;
if(xAcc<90) xAcc =
map(xAcc, 0, 78.894271, 0, 90);
else xAcc =
map(xAcc, 103.148749, 180, 90, 180);
accFiltered = accFilterA*oldAcc + accFilterB*oldAccFiltered;
oldAccFiltered = accFiltered;
oldAcc = xAcc;
angle = GYRO_WEIGHT*(angle + vxRot * dt * 1e3) + (1.-GYRO_WEIGHT)*accFiltered;
w.updateAngle((short)angle);
});
while(1);
return 0;
}