El autor menciona :
El sensor está dañado o su conversión de nivel de línea no está funcionando.
Para averiguar por qué, veamos el código de la biblioteca. Así es como Arduino obtiene los datos en bruto:
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 se explica en el pirata informático original y emulado en la biblioteca, los datos son 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;
Este código determina el hecho de que se detecte o no el punto IR, que se repite para 4 "Blobs":
Blob1.Size = (Byte3 & 0b00001111);
blobcount |= (Blob1.Size < 15)? 0x01 : 0; // Is Blob.Size less than 0x0F?
Obtienes (0,0) para todos ellos, lo que significa que se detectan todos los blobs ( blobcount
es 0x00001111
). Esto puede resultar de que todos los datos sean cero, ya que (0x00 < 15)
es TRUE
. Para resumir, "O el sensor es malo o la conversión de nivel de línea no funciona".
En este punto quieres hacer estas cosas:
- Verifique su circuito del oscilador con un osciloscopio para verificar su funcionamiento (don 'No mida el cristal directamente como' la capacitancia del alcance lo sesgará, pero la salida del inversor).
- Asegúrese de que estén presentes los voltajes adecuados.
- Asegúrese de que la SDA y la SCL estén subiendo a 3.3 V con resistencias de 30 kΩ en el lado del sensor y a 5 V con resistencias de 1.5 kΩ en el lado Arduino del convertidor de nivel ( LTC4301L ).
- Intente comunicarse con un dispositivo diferente de 3.3V I 2 C para asegurarse de que funciona correctamente.
Si todos los controles de salida, es probable que el sensor esté dañado por sobrecalentamiento, electricidad estática o condiciones de sobretensión.