Controllo PID

lesto:
guarda che il PID serve proprio per evitare valori così hardcodati..

setpoint è l'inclinazione desisderata, x è la tua angolazione rilevata, e vel è la velocità a cui muovere il motore. Tu devi giocare con i valori di P I e D (in teoria solo P, ed eentualmente un pizzico di I, bastano)

cosa vuoi dire? che devo rendere tutto + semplice?
Ad esempio così?

int sampleTime =9;
unsigned long lastTime = 0;
double output;
double input;
double setpoint = 0;
double error;
double iTerm, lastValue,pTerm,dTerm;

int updatePid(double targetValue, double currentValue) {
	
	/*How long since we last calculated*/
	unsigned long now = millis();
	float pidTerm;
	int timeChange = (now - lastTime);

	if (timeChange >= sampleTime) {
		/*Compute all the working error variables*/
		error = targetValue - currentValue;

		iTerm += Ki * error;
		iTerm = constrain(iTerm, -50, 50);

		pTerm = Kp * error;

		dTerm = Kd * (currentValue - lastValue);

		/*Compute PID Output*/
		pidTerm = (pTerm - dTerm + iTerm) * K;

		lastValue = currentValue;
		lastTime = now;
	}
	return constrain(round(pidTerm), -255, 255);
}


void loop(){

	input = VALORE DALLA IMU;
	output = updatePid(setpoint,input);

	AmotorNXT.setMotor(output);
	BmotorNXT.setMotor(output);



}