El autor menciona:
El sensor es mala, o su nivel de línea de conversión no está funcionando.
Para averiguar el por qué, veamos el código de la biblioteca. Esta es la forma en que el Arduino recibe los datos en bruto:
Nota: me he tomado algunas libertades con el código de aclarar y acortar, pero es prácticamente idéntico.
while(Wire.available() && i < 16) {
data_buf[i++] = Wire.receive();
}
Según lo explicado por el original hacker y emulado en la biblioteca, los datos en el siguiente formato:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... donde cada coordenada bloque es de 3 bytes, y el (X,Y) las coordenadas se calcula de la siguiente manera:
Blob1.X = (Byte3 & 0b00110000) <<4 + Byte1;
Blob1.Y = (Byte3 & 0b11000000) <<2 + Byte2;
Si o no el IR punto es que se ha detectado es determinado por este código, que se repite de 4 "Blobs":
Blob1.Size = (Byte3 & 0b00001111);
blobcount |= (Blob1.Size < 15)? 0x01 : 0; // Is Blob.Size less than 0x0F?
Usted está recibiendo (0,0) para todos ellos, es decir, todos los blobs son detectados (blobcount
es 0x00001111
). Esto puede ser resultado de todos los datos a cero, como (0x00 < 15)
es TRUE
. Para hacer corta una larga historia, "ya Sea que el sensor es mala, o su nivel de línea de conversión no está funcionando."
En este punto quiero hacer estas cosas:
- Compruebe su circuito oscilador con un osciloscopio para comprobar su funcionamiento (no se puede medir de cristal directamente como " ámbito de la capacitancia se tuercen, pero la salida del inversor).
- Asegurar la correcta voltajes están presentes.
- Asegúrese de SDA y SCL son arrastradas hasta 3.3 V con 30kΩ resistencias en el sensor del lado de 5V con 1,5 kΩ resistencias en el Arduino lado del convertidor de nivel (LTC4301L).
- Tratar de comunicarse con diferentes 3.3 V I2C dispositivo para asegurarse de que funciona correctamente.
Si todo sale bien, es probable que el sensor está dañado desde el sobrecalentamiento, la electricidad estática o las condiciones de sobretensión.