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
protected:
std::map<float, QColor> myColors;
float minValue, maxValue;
QString myName;
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 void addColor(const float& value, const QColor& color);
Q_INVOKABLE QColor encode(const float& value);

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

@ -113,6 +113,7 @@ public:
emit initializedChanged();
}
}
Perlin perlin;
typedef struct
{
@ -171,6 +172,7 @@ public:
Q_INVOKABLE void fuzzyInit(){
int status;
uint16_t eeMLX90640[832];
try{
status = mlx90640_SetRefreshRate (0x33,0x06); //32hz
int curRR = mlx90640_GetRefreshRate (0x33);
fprintf(stderr, "refresh rate: %d\n", curRR);
@ -184,11 +186,24 @@ public:
fprintf(stderr, "dump EEprom...\n");
status = mlx90640_DumpEE (slaveAddress, eeMLX90640);
usleep(1000);
if(status != 0){
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
emit initializedChanged();
emit dataReady(imageVect);
return;
}
fprintf(stderr, "extract parameters...\n");
status = mlx90640_ExtractParameters(eeMLX90640, &mlx90640);
usleep(1000);
getData(); //test read(initial)
if(status == 0)
getData();
else{
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
emit dataReady(imageVect);
}
}catch(...){
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
}
emit initializedChanged();
}
@ -198,8 +213,12 @@ public:
float mlx90640Image[768];
int status;
//status = mlx90640_TriggerMeasurement (0x33);
try{
status = mlx90640_SynchFrame(0x33);
status = mlx90640_GetFrameData (0x33, mlx90640Frame);
}catch(...){
status = -1;
}
if (status == 0) {
mlx90640_GetImage(mlx90640Frame, &mlx90640, mlx90640Image);
@ -207,7 +226,6 @@ public:
imageVect[i] = mlx90640Image[i];
}
} else {
Perlin perlin;
perlin.fillWithPerlinNoise(imageVect, 32, 24, 0xBEEF);
}
@ -247,7 +265,6 @@ protected:
int IsPixelBad(uint16_t pixel,paramsMLX90640 *params);
int ValidateFrameData(uint16_t *frameData);
int ValidateAuxData(uint16_t *auxData);
Perlin perlin;
signals:
void dataReady(QVector<float> data);
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){
i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data);
return 0;
return i2cDriverSingleton::getinstance()->i2cRead(slaveAddr, startAddress, nMemAddressRead, data);
}
int mlx90640_I2CWrite(uint8_t slaveAddr,uint16_t writeAddress, uint16_t data)
{
i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data);
return 0;
return i2cDriverSingleton::getinstance()->i2cWrite(slaveAddr, writeAddress, data);
}

@ -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;
__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");
emit i2cError();
return;
return -1;
}
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);
fprintf(stderr,"ioctl error\n");
emit i2cError();
return;
return -1;
}
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);
fprintf(stderr,"write error\n");
emit i2cError();
return;
return -1;
}
close(file);
@ -156,9 +156,10 @@ Q_INVOKABLE void I2cif::i2cWrite(const uint8_t &slaveAddr, const uint16_t &write
//fprintf(stderr,"write ok\n");
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;
Conv conv;
@ -173,7 +174,7 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons
fprintf(stderr,"open error\n");
emit i2cError();
delete[] buf;
return;
return -1;
}
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);
emit i2cError();
delete[] buf;
return;
return -1;
}
//fprintf(stderr, "read ");
@ -236,6 +237,8 @@ void I2cif::i2cRead(const uint8_t &slaveAddr, const uint16_t &startAddress, cons
delete[] buf;
emit i2cReadResultChanged();
close(file);
return 0;
}

@ -22,8 +22,8 @@ public:
Q_INVOKABLE void i2cProbe(QString devName);
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 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 i2cWrite(const uint8_t &slaveAddr,const uint16_t &writeAddress,const 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 tohVddSet(QString onOff);

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data>
<variable>EnvironmentId</variable>

Loading…
Cancel
Save