devo fare un controllo di velocita, coppia e posizione, però per prima cosa devo fare il controllo in velocità e per far questo dovrei ricavare dall'encoder gli impulsi e ricavarmi la velocità il problema che invece di avere per ogni giro 0000011100000111000000 ho una combinazione casuale di giri ho provato una soluzione farlocca usando questo codice ma non è stabile e nemmeno preciso
"
#include <SoftwareSerial.h>
#define encoder 5
#define motore 3
int val;
int flag;
int cont;
int app;
int pwm;
int pwmfb;
float giro;
float durata;
float app2;
float app3;
float vel;
float pausa;
int posizione;
int pot=5;
void setup()
{
pinMode(encoder,INPUT);
pinMode(motore,INPUT);
Serial.begin(9600);
app2=0;
}
void loop()
{
// acquisizione del valore del pwm
posizione=analogRead(pot);
pwm=map(posizione,0,1023,100,255);
//pwm=pwm-pwmfb;
// fine acquisizione valore del pwm
analogWrite(motore,pwm);
// comincio la procedura per acquisire il dato dall'encoder
durata=millis();
//durata=durata-app2;
val= digitalRead(encoder); // acquisisco il valore (alto o basso del encoder)
// incremento il valore cont ognivolta che trovo una variazione di valore
if (val!=flag)
{ if (val==HIGH)
{flag=1;}
else
{flag=0;}
cont=flag+cont;
}
cont=cont;
//dividendo per 3 calcolo quanti giri ha fatto il rotore
giro=cont/3;
//Serial.print("impulsi ");
//Serial.println(cont);
//Serial.print("il motore ha fatto ");
//Serial.println(giro);
giro=giro*100; // trasformo in giri al secondo
vel=giro/durata;
pausa=map(pwm,100,255,350,20); // calcolo la pausa da calcolare per campionare l'impulso
//pwmfb=map(vel,0,0.75,0,255);
//Serial.print("la velocita ");
Serial.println(vel);
//Serial.print("il tempo ");
//Serial.println(durata);
Serial.flush(); // pulisco il buffer seriale
delay(pausa); // pausa per il campionamento
// fine acquisizione velocità
}
"