Ich frage mich, ob hier jemand aktiv mit der Stephen Hobley-Bibliothek für Pixart Sensor gearbeitet hätte . Ich habe die gleiche Hardwarekonfiguration wie auf Stephens Website erwähnt verwendet. Allerdings stoße ich auf dieses Problem:
Ich habe irgendwo gelesen, dass die Pixart-Kamera nur dann einen Wert zurückgibt, wenn sie einen IR-Blob sieht. Dementsprechend sollte die Pixart-Bibliothek auch nur dann Werte zurückgeben, wenn die Kamera einen IR-Blob sieht, richtig?
Aber in meinem Setup zeigt mein Monitor für die serielle Schnittstelle Folgendes an, sobald ich Arduino einschalte:
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
...
Ich zeige ihm keine IR-Quelle, aber ich bekomme das immer wieder. Wenn ich ihm eine IR-Quelle gebe, verfolgt er sie nicht und ich erhalte immer noch das gleiche Ergebnis!
Bitte um Hilfe, ich scheine nicht an die Wurzel des Problems zu kommen.
Danke
Entweder ist der Sensor defekt oder Ihre Line-Pegel-Konvertierung funktioniert nicht.
Um herauszufinden, warum, schauen wir uns den Bibliothekscode an. So erhält der Arduino die Rohdaten:
Hinweis: Ich habe mir beim Code ein paar Freiheiten genommen, um ihn zu verdeutlichen und zu verkürzen, aber er ist praktisch identisch.
while(Wire.available() && i < 16) {
data_buf[i++] = Wire.receive();
}
Wie vom ursprünglichen Hacker erklärt und in der Bibliothek emuliert, haben die Daten das folgende Format:
[Top byte][Coordinate1][Coordinate2][Coordinate3][Coordinate4]
... wobei jeder Koordinatenblock 3 Bytes groß ist und die (X,Y)-Koordinaten wie folgt berechnet werden:
Blob1.X = (Byte3 & 0b00110000) <<4 + Byte1;
Blob1.Y = (Byte3 & 0b11000000) <<2 + Byte2;
Ob der IR-Punkt erkannt wird oder nicht, wird durch diesen Code bestimmt, der für 4 "Blobs" wiederholt wird:
Blob1.Size = (Byte3 & 0b00001111);
blobcount |= (Blob1.Size < 15)? 0x01 : 0; // Is Blob.Size less than 0x0F?
Sie erhalten (0,0) für alle, was bedeutet, dass alle Blobs erkannt werden ( blobcount
ist 0x00001111
). Dies kann daraus resultieren, dass alle Daten Null sind, so wie sie (0x00 < 15)
sind TRUE
. Um es kurz zu machen: "Entweder ist der Sensor defekt oder Ihre Line-Pegel-Konvertierung funktioniert nicht."
An diesem Punkt möchten Sie Folgendes tun:
Wenn alles überprüft wird, besteht die Möglichkeit, dass der Sensor durch Überhitzung, statische Elektrizität oder Überspannungsbedingungen beschädigt wird.