Robofun 機器人論壇

標題: 有關於熱影像arduino矩陣問題 [打印本頁]

作者: lucy5222    時間: 2018-3-28 13:59
標題: 有關於熱影像arduino矩陣問題
大家好 ,目前在做有關熱影像的問題
想請問大家 如何把熱影像的讀值轉為矩陣 並且找出最大值的位置和最大值
謝謝
(這是原始的程式檔 )
#include <Wire.h>
#include <Adafruit_AMG88xx.h>

Adafruit_AMG88xx amg;

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

void setup() {
    Serial.begin(9600);
    Serial.println(F("AMG88xx pixels"));

    bool status;
   
    // default settings
    status = amg.begin();
    if (!status) {
        Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
        while (1);
    }
   
    Serial.println("-- Pixels Test --");

    Serial.println();

    delay(100); // let sensor boot up
}


void loop() {
    //read all the pixels
    amg.readPixels(pixels);

    Serial.print("[");
    for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
      Serial.print(pixels[i-1]);
      Serial.print(", ");
      if( i%8 == 0 ) Serial.println();
    }
    Serial.println("]");
    Serial.println();

    //delay a second
    delay(1000);
}
作者: 超新手    時間: 2018-3-28 16:49
本帖最後由 超新手 於 2018-3-28 17:03 編輯

定義兩個變數
一個是最大值max,一個是最大值的指標index
在for迴圈先給初始值
max=pixels[0];
index=0;
然後在迴圈內, 一個一個和 Max 比
如果值pixels[ i-1]比Max 大,
就更新 Max 的值為pixels[ i-1], 同時更新 Index 的值為 i-1,
一共比 AMG88xx_PIXEL_ARRAY_SIZE 次
最後就可取得最大值Max和它的位置index

作者: lucy5222    時間: 2018-4-9 14:11
超新手 發表於 2018-3-28 16:49
定義兩個變數
一個是最大值max,一個是最大值的指標index
在for迴圈前先給初始值


你好 謝謝你 我想在請問一下 因為跑出來的結果是8*8的矩陣
再從矩陣中找最大值和最大值位置  比如30為最大值,那30的位置為[2,3],那這樣如何改 謝謝
作者: 超新手    時間: 2018-4-9 15:09
跑出來的並不是8x8的二維矩陣
而是一個 64 BYTES 的一維矩陣
只是在印出來的時候, 把它 8 個印一行
所以你才以為你拿到的是二維矩陣

其實只要把 Index /8 和 Index %8
也就是分別取 Index 的商和餘數
就是你要的 行和列值
作者: lucy5222    時間: 2018-4-9 15:24
超新手 發表於 2018-4-9 15:09
跑出來的並不是8x8的二維矩陣
而是一個 64 BYTES 的一維矩陣
只是在印出來的時候, 把它 8 個印一行

那可以請問要在哪裡該程式嗎 謝謝
這是修改過可是還是跑不出來的




#include <Wire.h>
#include <Adafruit_AMG88xx.h>

Adafruit_AMG88xx amg;

float pixels[AMG88xx_PIXEL_ARRAY_SIZE];

void setup() {
    Serial.begin(9600);
    Serial.println(F("AMG88xx pixels"));

    bool status;
   
    // default settings
    status = amg.begin();
    if (!status) {
        Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
        while (1);
    }
   
    Serial.println("-- Pixels Test --");

    Serial.println();

    delay(100); // let sensor boot up
}


void loop() {
    //read all the pixels
    amg.readPixels(pixels);

    Serial.print("[");

   int max=pixels[0];
   int Index=0;
    for(int i=1; i<=AMG88xx_PIXEL_ARRAY_SIZE; i++){
      //Serial.print(pixels[i-1]);
      //Serial.print(", ");
      if( pixels[i-1]>max )
       max=pixels[i-1];
       Index=i-1;
       Serial.print(max);
       Serial.print(",   ");
       Serial.print(Index);
      Serial.print("   ");
    }
   
   
   
    //Serial.println("]");
    //Serial.println();

    //delay a second
    delay(1000);
}
作者: 超新手    時間: 2018-4-9 15:41
本帖最後由 超新手 於 2018-4-9 15:43 編輯

for(int i=0; i< AMG88xx_PIXEL_ARRAY_SIZE; i++){
      if( pixels[ i]>max )  {
       max=pixels[ i];
       Index=i;
      }
    }
    Serial.print(max);
    Serial.print(",   ");
    Serial.println(Index);
1.   沒括號
2. 全部算完的 MAX, 才是對的...
3. 可以讓 i = 0 ~AMG88xx_PIXEL_ARRAY_SIZE-1,
    程式比較簡單




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2