first working perlin noise demo

master
Yorick GEOFFRE 2 years ago
parent e7230714f3
commit 2b61a9aed1

@ -11,10 +11,11 @@ class ColorAttributer : public QObject
Q_OBJECT Q_OBJECT
protected: protected:
std::map<float, QColor> myColors; std::map<float, QColor> myColors;
float minValue, maxValue;
QString myName; QString myName;
public: public:
ColorAttributer(QString name, const float& minValue = -3000000.0f, const float& maxValue = -1000000.0f) : minValue(minValue), maxValue(maxValue), myName(name) {} float minValue, maxValue;
//ColorAttributer(QString name, const float& minValue = -3000000.0f, const float& maxValue = -1000000.0f) : minValue(minValue), maxValue(maxValue), myName(name) {}
ColorAttributer(QString name, const float& minValue = 0.0f, const float& maxValue = 1.0f) : minValue(minValue), maxValue(maxValue), myName(name) {}
Q_INVOKABLE inline QString getName() const {return myName;} Q_INVOKABLE inline QString getName() const {return myName;}
Q_INVOKABLE void addColor(const float& value, const QColor& color); Q_INVOKABLE void addColor(const float& value, const QColor& color);
Q_INVOKABLE QColor encode(const float& value); Q_INVOKABLE QColor encode(const float& value);

@ -38,6 +38,7 @@ public:
return interpolate(i1, i2, fractionalPartY); return interpolate(i1, i2, fractionalPartY);
} }
void fillWithPerlinNoise(QVector<float>& vector, int width, int height, int seed) { void fillWithPerlinNoise(QVector<float>& vector, int width, int height, int seed) {
fprintf(stderr, "creating noise..\n");
float t = 0.0f; float t = 0.0f;
for (int y = 0; y < height; ++y) { for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) { for (int x = 0; x < width; ++x) {

@ -113,6 +113,7 @@ public:
emit initializedChanged(); emit initializedChanged();
} }
} }
Perlin perlin;
typedef struct typedef struct
{ {
@ -171,24 +172,38 @@ public:
Q_INVOKABLE void fuzzyInit(){ Q_INVOKABLE void fuzzyInit(){
int status; int status;
uint16_t eeMLX90640[832]; uint16_t eeMLX90640[832];
status = mlx90640_SetRefreshRate (0x33,0x06); //32hz try{
int curRR = mlx90640_GetRefreshRate (0x33); status = mlx90640_SetRefreshRate (0x33,0x06); //32hz
fprintf(stderr, "refresh rate: %d\n", curRR); int curRR = mlx90640_GetRefreshRate (0x33);
status = mlx90640_SetResolution(0x33,0x00); //16 bit res fprintf(stderr, "refresh rate: %d\n", curRR);
//status = mlx90640_SetInterleavedMode (0x33); //linear interlacing mode status = mlx90640_SetResolution(0x33,0x00); //16 bit res
status = mlx90640_SetChessMode (0x33); //chess interlacing mode //status = mlx90640_SetInterleavedMode (0x33); //linear interlacing mode
int mode = mlx90640_GetCurMode(0x33); status = mlx90640_SetChessMode (0x33); //chess interlacing mode
fprintf(stderr, "interlacing mode: %d\n", mode); int mode = mlx90640_GetCurMode(0x33);
usleep(10000); fprintf(stderr, "interlacing mode: %d\n", mode);
usleep(10000);
fprintf(stderr, "dump EEprom...\n");
status = mlx90640_DumpEE (slaveAddress, eeMLX90640); fprintf(stderr, "dump EEprom...\n");
usleep(1000); status = mlx90640_DumpEE (slaveAddress, eeMLX90640);
fprintf(stderr, "extract parameters...\n"); usleep(1000);
status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640); if(status != 0){
usleep(1000); perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
emit initializedChanged();
getData(); //test read(initial) emit dataReady(imageVect);
return;
}
fprintf(stderr, "extract parameters...\n");
status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640);
usleep(1000);
if(status == 0)
getData();
else{
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
emit dataReady(imageVect);
}
}catch(...){
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
}
emit initializedChanged(); emit initializedChanged();
} }
@ -198,8 +213,12 @@ public:
float mlx90640Image[768]; float mlx90640Image[768];
int status; int status;
//status = mlx90640_TriggerMeasurement (0x33); //status = mlx90640_TriggerMeasurement (0x33);
status = mlx90640_SynchFrame(0x33); try{
status = mlx90640_GetFrameData (0x33, mlx90640Frame); status = mlx90640_SynchFrame(0x33);
status = mlx90640_GetFrameData (0x33, mlx90640Frame);
}catch(...){
status = -1;
}
if (status == 0) { if (status == 0) {
mlx90640_GetImage(mlx90640Frame, &mlx90640, mlx90640Image); mlx90640_GetImage(mlx90640Frame, &mlx90640, mlx90640Image);
@ -207,7 +226,6 @@ public:
imageVect[i] = mlx90640Image[i]; imageVect[i] = mlx90640Image[i];
} }
} else { } else {
Perlin perlin;
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF); perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
} }
@ -247,7 +265,6 @@ protected:
int IsPixelBad(uint16_t pixel,paramsMLX90640 *params); int IsPixelBad(uint16_t pixel,paramsMLX90640 *params);
int ValidateFrameData(uint16_t *frameData); int ValidateFrameData(uint16_t *frameData);
int ValidateAuxData(uint16_t *auxData); int ValidateAuxData(uint16_t *auxData);
Perlin perlin;
signals: signals:
void dataReady(QVector<float> data); void dataReady(QVector<float> data);
void initializedChanged(); void initializedChanged();

@ -29,12 +29,10 @@ void mlx90640_I2CFreqSet(int freq){
} }
int mlx90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data){ int mlx90640_I2CRead(uint8_t slaveAddr,uint16_t startAddress, uint16_t nMemAddressRead, uint16_t *data){
i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data); return i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data);
return 0;
} }
int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data) int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data)
{ {
i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data); return i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data);
return 0;
} }

@ -108,7 +108,7 @@ bool I2cif::tohVddGet()
* *
*/ */
Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &writeAddress, const uint16_t &data){ Q_INVOKABLE int I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &writeAddress, const uint16_t &data){
int file; int file;
__u8 buf[4]; __u8 buf[4];
@ -120,7 +120,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write
{ {
fprintf(stderr,"open error\n"); fprintf(stderr,"open error\n");
emit i2cError(); emit i2cError();
return; return -1;
} }
if (ioctl(file, I2C_SLAVE, slaveAddr) < 0) if (ioctl(file, I2C_SLAVE, slaveAddr) < 0)
@ -128,7 +128,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write
close(file); close(file);
fprintf(stderr,"ioctl error\n"); fprintf(stderr,"ioctl error\n");
emit i2cError(); emit i2cError();
return; return -1;
} }
buf[0] = (writeAddress >> 8) & 0xFF; // High byte buf[0] = (writeAddress >> 8) & 0xFF; // High byte
@ -148,7 +148,7 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write
close(file); close(file);
fprintf(stderr,"write error\n"); fprintf(stderr,"write error\n");
emit i2cError(); emit i2cError();
return; return -1;
} }
close(file); close(file);
@ -156,9 +156,10 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write
//fprintf(stderr,"write ok\n"); //fprintf(stderr,"write ok\n");
emit i2cWriteOk(); emit i2cWriteOk();
return 0;
} }
void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, const uint16_t &nMemAddressRead, uint16_t *data) int I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, const uint16_t &nMemAddressRead, uint16_t *data)
{ {
int file; int file;
Conv conv; Conv conv;
@ -173,7 +174,7 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons
fprintf(stderr,"open error\n"); fprintf(stderr,"open error\n");
emit i2cError(); emit i2cError();
delete[] buf; delete[] buf;
return; return -1;
} }
struct i2c_rdwr_ioctl_data i2c_data; struct i2c_rdwr_ioctl_data i2c_data;
@ -215,7 +216,7 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons
fprintf(stderr, "read data fail %d\n", ret); fprintf(stderr, "read data fail %d\n", ret);
emit i2cError(); emit i2cError();
delete[] buf; delete[] buf;
return; return -1;
} }
//fprintf(stderr, "read "); //fprintf(stderr, "read ");
@ -236,6 +237,8 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons
delete[] buf; delete[] buf;
emit i2cReadResultChanged(); emit i2cReadResultChanged();
close(file); close(file);
return 0;
} }

@ -22,8 +22,8 @@ public:
Q_INVOKABLE void i2cProbe(QString devName); Q_INVOKABLE void i2cProbe(QString devName);
Q_INVOKABLE void i2cWrite(QString devName, unsigned char address, QString data); Q_INVOKABLE void i2cWrite(QString devName, unsigned char address, QString data);
Q_INVOKABLE void i2cRead(QString devName, unsigned char address, int count); Q_INVOKABLE void i2cRead(QString devName, unsigned char address, int count);
Q_INVOKABLE void i2cWrite(const uint8_t &slaveAddr,const uint16_t &writeAddress,const uint16_t &data); Q_INVOKABLE int i2cWrite(const uint8_t &slaveAddr,const uint16_t &writeAddress,const uint16_t &data);
Q_INVOKABLE void i2cRead(const uint8_t &slaveAddr,const uint16_t &startAddress, const uint16_t &nMemAddressRead,uint16_t *data); Q_INVOKABLE int i2cRead(const uint8_t &slaveAddr,const uint16_t &startAddress, const uint16_t &nMemAddressRead,uint16_t *data);
Q_INVOKABLE void i2cWriteThenRead(QString devName, unsigned char address, QString data, int count); Q_INVOKABLE void i2cWriteThenRead(QString devName, unsigned char address, QString data, int count);
Q_INVOKABLE void tohVddSet(QString onOff); Q_INVOKABLE void tohVddSet(QString onOff);

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.2, 2023-06-12T17:01:44. --> <!-- Written by QtCreator 4.15.2, 2023-06-12T17:33:55. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

Loading…
Cancel
Save