2012-01-21 40 views
2

我在Codes.h中有以下內容,我可以通過單擊Arduino軟件中的選項卡來訪問它。所以我知道草圖被正確加載的頭文件。Arduino素描 - 頭文件中的對象不包含任何值

#ifndef __CODES_H__ 
#define __CODES_H__ 

PROGMEM prog_uint16_t show_hide_info[] = { 4216, 8900, 4380, 580, 500, 600, 500, 580, 1620, 580, 500, 600, 500, 580, 500, 600, 480, 600, 500, 580, 1620, 580, 1620, 600, 500, 580, 1620, 580, 1620, 600, 1600, 600, 1620, 580, 1620, 600, 500, 580, 1620, 580, 500, 600, 1600, 600, 500, 580, 1620, 580, 500, 600, 1620, 580, 1620, 600, 480, 600, 1620, 580, 500, 600, 1600, 600, 500, 580, 1620, 580, 500, 600, 39300, 8860, 2160, 580 }; 

#endif 

我然後在我的代碼,使用所述show_hide_info[]陣列的方法。

問題是,當我嘗試訪問頭文件中的數組時,它不包含任何值。

取而代之的是,如果我在setup()方法之上聲明上面的PROGMEM它確實包含值。

不太清楚爲什麼我得到這個問題。我可以通過在我的草圖中執行以下操作來確認我已正確地聲明瞭我的頭文件。

#include "Codes.h"

這是我如何使用陣列的例子:在控制檯

void sendCode(prog_uint16_t inArray[], int nLimit) { 
    unsigned int arr[nLimit]; 
    unsigned int c; 
    int index = 0; 

    while ((c = pgm_read_word(inArray++))) { 
    arr[index] = c; 
    index++; 
    } 

    for (int i = 0; i < nLimit; i=i+2) { 
    Serial.println(arr[i]); 
    Serial.println(arr[i+1]); 
    } 
} 

沒有輸出,如果我嘗試使用陣列中的頭文件中。它只適用於我在我的實際主草圖程序中聲明它。

我知道這不是數組本身或我的方法的問題,因爲一個簡單的字符串或int不起作用。很奇怪。

回答

4

沿着這些線路的東西爲我工作:

在草圖的頂部,只需:

#include "Codes.h" 

Codes.h需要像這樣的工作:

#ifndef __CODES_H__ 
#define __CODES_H__ 

// Implicitly includes <avr/pgmspace.h> to provide access to progmem features 
#include <Arduino.h> 

// Split up declaration and definition to remove warning 
extern const prog_uint16_t show_hide_info[] PROGMEM; 
const prog_uint16_t show_hide_info[] = { 
    4216, 8900, 
    4380, 580, 
    500, 600, 
    500, 580, 
    1620, 580, 
    /* and so on... */ 
    0 // Need this to prevent sendCode reading beyond the end of this array 
}; 

#endif 
+0

我不得不在我的草圖中包含,這幾乎是我必須做的唯一修改。現在一切正常。謝謝。 – fuzz