¿Siempre necesita registrar los píxeles antiguos al leer desde una cámara?

2

Estoy escribiendo un programa para trabajar con un Módulo Linescan TSL1401R-LF. Funciona leyendo en una matriz de píxeles de 1 X 128. Conseguí que la cámara funcione correctamente y mi método readPixels() puede leer los píxeles con precisión.

Sin embargo, me veo forzado a ejecutar un método timming() antes de mi método readPixels() o el programa falla. El timming() hace prácticamente lo mismo que el método readPixels() , excepto que no almacena los valores de salida. Cuando lo comento y solo uso readPixels() , mi imagen se satura y solo obtengo valores de 1023 incluso cuando un objeto oscuro está en el camino de las cámaras.

Esto podría tener más sentido al mirar el código real:

void timming()
{

  digitalWriteFast(SI, HIGH);
  delayMicroseconds(10);
  digitalWriteFast(CLK, HIGH);
  delayMicroseconds(10);
  digitalWriteFast(SI, LOW);
  delayMicroseconds(10);
  digitalWriteFast(CLK, LOW);
  delayMicroseconds(10);

  for(int i = 0; i < 129; i++)
  {
    digitalWriteFast(CLK, HIGH);
    delayMicroseconds(delayTime);
    digitalWriteFast(CLK, LOW);
    delayMicroseconds(delayTime);
  }

}

void readPixels()  
{
  digitalWriteFast(SI, HIGH);
  delayMicroseconds(10);
  digitalWriteFast(CLK, HIGH);
  delayMicroseconds(10);
  digitalWriteFast(SI, LOW);
  delayMicroseconds(10);
  digitalWriteFast(CLK, LOW);
  delayMicroseconds(10);

  for(int i = 0; i < 128; i++)
  { 
    digitalWriteFast(CLK, HIGH);
    pixelsArray1[i]=analogRead(Cam1Aout);
    pixelsArray2[i]=analogRead(Cam2Aout);
    pixelsArray3[i]=analogRead(Cam3Aout);
    delayMicroseconds(delayTime);
    digitalWriteFast(CLK, LOW);
    delayMicroseconds(delayTime);
  }

  digitalWriteFast(CLK, HIGH);
  delayMicroseconds(delayTime);
  digitalWriteFast(CLK, LOW);
  delayMicroseconds(delayTime);

  delayMicroseconds(20);
}

TL; DR

Básicamente, pregunto si hay una manera de hacer que mi programa funcione sin tener que usar el método timming() .

Hoja de datos: enlace

    
pregunta Crystal Pritzker

1 respuesta

1

Sospecho que la respuesta es bastante simple: ejecute readPixels () dos veces en rápida sucesión. Tal como está, si no ejecuta la sincronización (), cuando ejecuta readPixels (), el 1401 ha estado sentado allí integrándose durante un tiempo desconocido (pero muy largo), así que, por supuesto, sus valores de píxeles están saturados. Por lo tanto, timing () restablece los integradores de píxeles a cero, y luego readPixels () puede adquirir datos de manera adecuada. Sin embargo, ejecutar readPixels () la primera vez tendrá el mismo efecto.

Por supuesto, cuando hagas esto, deberás ignorar el primer conjunto de valores producidos por readPixels (), ya que serán un 1023 uniforme.

Entonces, la respuesta a tu pregunta del título es, por supuesto.

    
respondido por el WhatRoughBeast

Lea otras preguntas en las etiquetas