Estoy escribiendo un programa para trabajar con un módulo de exploración lineal TSL1401R-LF. Funciona leyendo en una matriz de píxeles de 1 X 128. Logré que la cámara funcione correctamente y mi readPixels()
método puede leer los píxeles con precisión.
Sin embargo, me veo obligado a ejecutar un timming()
método anterior a mi readPixels()
método o, de lo contrario, el programa falla. Prácticamente timming()
hace exactamente lo mismo que el readPixels()
método, 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;RD
Básicamente, lo que pregunto es si hay una manera de hacer que mi programa funcione sin tener que usar el timming()
método.
Hoja de datos: http://datasheet.elcodis.com/pdf/58/61/586128/tsl1401r-lf.pdf
Sospecho que la respuesta es bastante simple: ejecute readPixels() dos veces seguidas. Tal como está, si no ejecuta timing(), cuando ejecuta readPixels(), el 1401 ha estado ahí integrándose durante un tiempo desconocido (pero muy largo), por lo que, por supuesto, sus valores de píxeles están saturados. Entonces, timing() restablece los integradores de píxeles a cero, y luego readPixels() puede adquirir datos correctamente. Sin embargo, ejecutar readPixels() la primera vez tendrá el mismo efecto.
Por supuesto, cuando haga esto, deberá ignorar el primer conjunto de valores producidos por readPixels(), ya que serán un 1023 uniforme.
Entonces, la respuesta a su pregunta sobre el título es, por supuesto.
readPixels()
para que los valores no se saturen? También sabe de qué está hablando la hoja de datos cuando dice que el tiempo de integración termina en el pulso positivo de MANTENER.readPixels()
método?
usuario_1818839
sgmm
usuario_1818839
sgmm
delayTime
más pequeño obtuve valores cada vez más bajos. Entonces, si eltimming()
método es solo para aumentar el tiempo de integración, entonces no debería obtener un valor saturado. ¿Bien? Lo siento si no lo entiendo, es la primera vez que trabajo con una cámara.ricardo crowley
usuario_1818839
timming()
) es presumiblemente mucho más rápido y proporciona un tiempo de integración mucho más corto (sin saturación) que lareadPixels()
función anterior.sgmm
sgmm
ricardo crowley
sgmm
ricardo crowley
sgmm