Quì presento 2 classi: la classe Motore, molto semplice, e la classe PID, che però implementa solo la parte P (spero che basti! ;))
Motore.h:
#ifndef Motore_h
#define Motore_h
#include "WProgram.h"
class Motore{
public:
Motore(int);
void update(int actualPower);
private:
int PWMpin;
};
#endif
Motore.cpp:
#import "Motore.h"
#define ENGINEMIN 20
#define ENGINEMAX 230
Motore::Motore(int pin){
PWMpin=pin;
}
void Motore::update(int actualPower){
actualPower=constrain(map(actualPower, 0, 255, ENGINEMIN, ENGINEMAX), ENGINEMIN, ENGINEMAX);
analogWrite(PWMpin, actualPower);
}
ENGINEMIN e ENGINEMAX servono per evitare di fermare del tutto o mandare a massimo regime il motore.
l'input deve essere un numero compreso tra 0 e 255, anche se l'algoritmo risolve il problema di input errati, non lo farà proporzionalmente.