bueno de momento comento mis avances:
el programa anterior estaba malisimo habian variables que no hacian nada, mal estructurado, mala matematica y mucho mas en fin lo probe lo compilo lo cargo pero al usarlo no hacia nada ni siquiera leia algo.... entonces me tome tiempo de leer mas detenidamente mi codigo y lo corregi un poco de nuevo es un codigo algo rustico pues es lo mas que puedo hacer con lo que nonosco...... si me dan consejos pra optimizar lo mas probable es que no sea como pero bueno puedo leer y aprender a usar sus consejos jejeje....... le puse algo de explicacion esta vez para facilitar la lectura del codigo....
volatile byte rpmcount;
volatile int status;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
//cada rotacion esta funcion se activa de momento una ves //
//
rpmcount++;
}
void setup()
{
Serial.begin(9600);
//Interrupt 0 es el pin 2 digital,
// (cambia de HIGH a LOW)
attachInterrupt(0, rpm_fun, FALLING);
rpmcount = 0;
rpm = 0;
timeold = 0;
status = LOW;
}
void loop()
{
delay(1000);//actualiza las RPM cada segundo;
detachInterrupt(0);
//Nota que cambiare el calculo es: 60*1000/(millis() - timeold)*rpmcount segun los dientes que tenga
//la rueda dentada de momento es para una una sola muestra por vuelta. un diente
//dependiendo de lo dientes el factor 60 sera divido por ejemplo si son 10 dientes seria 6*1000
rpm = 60*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
//mando la salida al puerto serial
Serial.println(rpm,DEC);
//reinicia el roceso de interrupcion
attachInterrupt(0, rpm_fun, FALLING);
}
de momento no he metido nada de filtos que sigo a la investigacion de ellos....
espero elguien se tome su tiempo y me pueda decir algo sobre el codigo..
un saludo a todos