Contar pulso de um sensor de presença (fotoeletrico)

Boa tarde,

Gostaria de um codigo para contar os pulsos de um sensor fotoeletrico.
O codigo abaixo conta infinitamente mesmo ligando o pino digital 2 no terra.

Como poderia fazer essa contagem?

int pulsos;
boolean pulso;
void setup()

{
  Serial.begin(9600);
  Serial.println("Iniciando...");
  pulso=HIGH;
  pinMode(2,INPUT);
}

void loop() 
{
 Serial.println(pulsos);
  if(digitalRead(2)==HIGH)
  {

    if(pulso==HIGH)
    {
      pulsos = pulsos + 1;
    }

    pulso=LOW;

  }
  
  else{
    pulso=HIGH;
  }


}

Uma coisa que faltou é a iniciação de pulsos:

int pulsos = 0;

Não acho que isso deva resolver o problema, mas isso está estranho, esse código deveria funcionar...

Faz um Serial.println(digitalRead(2)) para ver se tem algo errado.

Está aleatorio, conforme abaixo:

0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
1
1
0
0
0
1
1
0
0
0
1
1
0
0
0
1
1
0
0
0
1
1
0
0
0
1
1
0
0
0

http://forum.arduino.cc/index.php?topic=180011.msg1334353#msg1334353

Por aqui correndo esse código apesar de estranho esta a fazer o que queres.
Com o pino 2 aterrado só recebo 0.
quando o levanto e toco com a mão ele começa a contar ...
Posto isto o problema deve ser apenas no teu hardware ...
Qual a finalidade desse código?
E ja agora não cruzes posts no fórum como o AWOL te disse.

O AWOL tem uma maneira muito indirecta de indicar a solução para os problemas.

int pulsos = 0;
boolean pulso=0;
void setup()
{
  Serial.begin(9600);
  Serial.println("Iniciando...");
  pulso=HIGH;
  pinMode(2,INPUT_PULLUP); //mudei esta linha... experimenta agora... 
}

void loop() 
{
 Serial.println(pulsos);
  if(digitalRead(2)==HIGH)
  {

    if(pulso==HIGH)
    {
      pulsos = pulsos + 1;
    }

    pulso=LOW;

  }
  
  else{
    pulso=HIGH;
  }


}

Como ligaste o sensor de presença? Ele tem saída de relé ou transistor?
Já experimentaste apenas com um fio?

O AWOL tem uma maneira muito indirecta de indicar a solução para os problemas.

Maybe, but if you don't learn to spot problems like that yourself, you're never going to make it as any kind of programmer.

 Pulse Pulse = + 1;

Huh?

AWOL:

O AWOL tem uma maneira muito indirecta de indicar a solução para os problemas.

Maybe, but if you don’t learn to spot problems like that yourself, you’re never going to make it as any kind of programmer.

True…
But a lot of people using Arduino want to accomplish a one-off project, not learn programming.

AWOL:

 Pulse Pulse = + 1;

Huh?

Where did you see that?
It looks to me that the input is floating. But we don’t really know the exact hardware that is connected. :\