Me pregunto si alguien aquí habría trabajado activamente con la biblioteca de Stephen Hobley para Pixart Sensor aquí . Usé la misma configuración de hardware que se menciona en el sitio web de Stephen. Sin embargo, me encuentro con este problema:
Leí en alguna parte que la cámara Pixart devuelve un valor solo cuando ve un IR Blob. Entonces, en consecuencia, la Biblioteca Pixart también debería devolver valores solo cuando la cámara ve una mancha IR, ¿verdad?
Pero, en mi configuración, tan pronto como enciendo Arduino, mi monitor de puerto serie comienza a mostrar:
Blob 1 detected x=0, y=0, size=0
Blob 2 detected x=0, y=0, size=0
Blob 3 detected x=0, y=0, size=0
Blob 4 detected x=0, y=0, size=0
...
No le muestro ninguna fuente de IR, pero sigo recibiendo esto. Cuando le doy una fuente IR, no la rastrea y aún así sigo obteniendo el mismo resultado.
Por favor ayuda, parece que no estoy llegando a la raíz del problema.
Gracias
O el sensor está dañado o la conversión de nivel de línea no funciona.
Para averiguar por qué, veamos el código de la biblioteca. Así es como Arduino obtiene los datos sin procesar:
Nota: me he tomado algunas libertades con el código para aclararlo y acortarlo, pero es prácticamente idéntico.
while(Wire.available() && i < 16) {
data_buf[i++] = Wire.receive();
}
Como explicó el hacker original y emulado en la biblioteca, los datos están en el siguiente formato:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... donde cada bloque de coordenadas es de 3 bytes, y las coordenadas (X,Y) se calculan así:
Blob1.X = (Byte3 & 0b00110000) <<4 + Byte1;
Blob1.Y = (Byte3 & 0b11000000) <<2 + Byte2;
Si se detecta o no el punto IR se determina mediante este código, que se repite para 4 "Blobs":
Blob1.Size = (Byte3 & 0b00001111);
blobcount |= (Blob1.Size < 15)? 0x01 : 0; // Is Blob.Size less than 0x0F?
Obtiene (0,0) para todos ellos, lo que significa que se detectan todos los blobs ( blobcount
is 0x00001111
). Esto puede resultar de que todos los datos sean cero, tal (0x00 < 15)
cual TRUE
. Para abreviar una larga historia, "O el sensor es malo o la conversión de nivel de línea no funciona".
En este punto, desea hacer estas cosas:
Si todo sale bien, es probable que el sensor esté dañado por sobrecalentamiento, electricidad estática o condiciones de sobrevoltaje.