Sensor ir para contador

Buenas a todos...

Tengo el siguiente montaje para realizar un contador con un sensor ir y un led ir, el script que he realizado es el siguiente...

int IRpin= 1;
int val = 0;

void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
}

void loop ()
{
val= analogRead( IRpin );

if ( val != 0)
{
// Si el pulsador no esta oprimido, flanco de bajada
if ( val==0 )
{
val=val++; //Incrementa el contador
Serial.println(val); //Imprime el valor por consola
digitalWrite(13,HIGH);
delay (100); // Retardo
digitalWrite(13,LOW);
delay (100);
}
}
}

El problema que tengo es que al poner el monitor del puerto serie, no me aparece nada...

No se donde he metido la pata...

Agradeceria algun consejo para solucionarlo.

Gracias..

Solo te va a imprimir algo si val es 0 y distinto de 0. Resulta logico que no imprima nada.

Gracias..

He rehecho el script

int sensorPin = 1;
int counter = 0;

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop() {
int sensorValue = analogRead(sensorPin);
if (sensorValue < 100) { //corto el haz ir
counter++; //se incrementa el contador
Serial.print("Contador : ");
Serial.println(counter);
digitalWrite(13, HIGH); // Enciendo el led nº1
delay(1000); // Espero 1000 ms
digitalWrite(13, LOW); // Apago el led nº1
boolean low = true;
while (low) { //esperar hasta el final del corto
sensorValue = analogRead(sensorPin);
if (sensorValue > 400) {
low = false;
}
}
}
}

El resultado es prometedor, aunque quisiera depurarlo colocando un contador de tiempo entre gap y gap y que ocupara una linea el contador... a ver que consigo.

inigohe

Buenas...

He colocado el contador de tiempo, me hace una cosa rara,es como si repitiera el mismo tiempo entre gap y gap, y lo que hace es repetir el retorno de carro hasta el siguiente gap, lo que lo hace muy desagradable, lo suyo seria ocupar una linea diciendo vuelta n x tiempo por vuelta y milisegundos...

int sensorPin = 1;
int counter = 0;
int start;
int finished;
int elapsed;

void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop() {
int sensorValue = analogRead(sensorPin);
if (sensorValue < 100) { //corto el haz ir
counter++; //se incrementa el contador
start=millis();
Serial.print("Contador : ");
Serial.println(counter);
digitalWrite(13, HIGH); // Enciendo el led nº1
delay(1000); // Espero 1000 ms
digitalWrite(13, LOW); // Apago el led nº1
boolean low = true;
while (low) { //esperar hasta el final del corto
sensorValue = analogRead(sensorPin);
if (sensorValue > 400) {
low = false;
finished=millis();
}
}
}
elapsed=finished-start;
Serial.print(elapsed);
Serial.println(" milisegundos por vuelta");

}

inigohe

uff porque estoy de vacaciones que sino durante las clases ando super liado llevo un curso de traca. Le hecho un vistazo y te comento cosa que se pueden mejorar aunque tal vez no encuentre el problema.

Te recomiendo que cuando abras las llaves { primero le des al intro y luego abras las llaves de esa manera la apertura de llave y el cierre de llaves quedarán a la misma altura y se ve mucho más claro donde empieza un bucle y donde acaba.

Usas una variable llamada "low" supongo que eso no sera pero la palabra low es una palabra reservada y es mejor no usar palabras que tengan significado para arduino como variables.

No entiendo completamente el problema pero tener un delay de 1 segundo te imposibilita hacer lecturas de menos de 1 segundo. Si el parpadeo de led no es muy importante quitarlo y puedes sustituirlo por un mensaje en el serial monitor. Sino esto no te va a dar más que problemas

Para conseguir que en una linea te salga numero de vueltas y velocidad, no uses Serial.println(" milisegundos por vuelta");

en su lugar pon Serial.print(" milisegundos por vuelta"); y Serial.print(" ");

Haber si con eso se te arreglan los problemas, me acabo de dar cuenta que a mis alumnos les he mandado un ejercicio muy parecido. saludos

Buenas,,,

Gracias por la respuesta..

Mi intencion era en principio que ademas de tener una información bien via serie o lcd, tuviera una indicacion visual que se ha realizado un Gap.

Intentaré seguir tus consejos a ver que pasa...

Iñigo