by max » 04 Sep 2012, 13:55
ecco il codice
#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à