seit kurzem habe ich Profilab Exp. und bin dabei die Daten von einen 8x8 pixel Thermosensor von Panasonic Grideye http://pewa.panasonic.com/components/bu ... /grid-eye/
graphisch darzustellen
Dazu habe ich den sensor über einen Arduino angebunden und den entsprechenden arduino code (siehe unten) aufgeladen.
Im serial window der Arduino IDE kann ich Daten für alle 64 pixel auslesen.
In Profilab habe ich das Arduino Beispiel aus dem Beispielfolder benutzt und vereinfacht.
Wenn ich die Daten daüber einlese bekome ich nicht alle Daten mit.
![Bild](http://i59.tinypic.com/15cki78.png)
Wenn ich es im Arduino code simuliere (loop über 64 Datenpunkte) dann bekome ich ab:
00;23.00;24.00;25.00;26.00;27.00;28.00;29.00;30.00;31.00;......64.00;E;
Wenn ich die Anzahl der zu lesenden positionen mit in der Simulierung auf 40 begrenze bekomme ich alle:
0.00;1.00;2.00;3.00;4.00;5.00;6.00;7.00;8.00;9.00;10.00;11.00;12.00;13.00;14.00;15.00;16.00;17.00;18.00;19.00;20.00;21.00;22.00;23.00;24.00;25.00;26.00;27.00;28.00;29.00;30.00;31.00;32.00;33.00;34.00;35.00;36.00;37.00;38.00;39.00;E;
Gibt es eine Begrenzung der Stringlänge in der Com Übrtragung?
Gruss und Danke, Gernot
#include <Wire.h>
#define HEIGHT 8
#define WIDTH 8
byte pixelTempL;
byte pixelTempH;
int ledNum = 1;
char addr = 0x68;
int celsius;
float deccel;
byte array[HEIGHT*WIDTH];
void readFrame(byte *arr)
{
byte *pos;
byte *uBound;
pos = arr;
uBound = arr + (HEIGHT*WIDTH);
//First two data registers for the pixel temp data are 0x80 and 0x81
pixelTempL=0x80;
pixelTempH=0x81;
//Get Temperature Data for each pixel in the HEIGHT x WIDTH array. Will loop 64 times for Grid-eye
for(int pixel = 0; pixel < (HEIGHT*WIDTH); pixel++)
{
//Get lower level pixel temp byte
Wire.beginTransmission(addr);
Wire.write(pixelTempL);
Wire.endTransmission();
Wire.requestFrom(addr,1);
byte lowerLevel = Wire.read(); //
//Serial.println(lowerLevel);
//Get upper level pixel temp byte
Wire.beginTransmission(addr);
Wire.write(pixelTempH);
Wire.endTransmission();
Wire.requestFrom(addr,1);
byte upperLevel = Wire.read();
//Serial.println(upperLevel);
//Combine the two bytes together to complete the 12-bit temp reading
int temperature = ((upperLevel << 8) | lowerLevel);
//Temperature data is in two's compliment, do conversion.
if (upperLevel != 0)
{
temperature = -(2048 - temperature);
}
celsius = temperature*0.25;
deccel = temperature*0.25;
//Serial.print(celsius);
//Serial.print(";");
Serial.print(deccel);
Serial.print(";");
//*pos = celsius & 63;
*pos = celsius;
pos++;
//Go to next pixel by advancing both the low and high bit two register values
pixelTempL=pixelTempL+2;
pixelTempH=pixelTempH+2;
}
}
void setup()
{
Wire.begin();
Serial.begin(19200);
}
void loop()
{
int input;
float temp;
for(int pixel = 0; pixel < (40); pixel++) //gloops 64 times
{
temp = float(pixel); //generates a float value from int pixel
Serial.print(temp);
Serial.print(";");
}
Serial.println("E;"); //Used in Profilab as separator in COM receiving string
//readFrame(array);Function to read from the IR array 64 float values
delay(2000);
} //end loop