2012-01-21 7 views
2

私はCodes.hに次のものがあります。これはArduinoソフトウェアのタブをクリックしてアクセスします。だから私は、スケッチが正しくヘッダファイルでロードされていることを知っている。Arduino Sketch - ヘッダーファイル内のオブジェクトに値が含まれていません

#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を宣言すると、値が含まれています。

なぜこの問題が発生しているのかよく分かりません。スケッチで次のようにしてヘッダーファイルを正しく宣言したことを確認できます。私は、ヘッダファイルに配列を使用しようとした場合、コンソールで

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]); 
    } 
} 

何も出力:

#include "Codes.h"

この

は、私は、配列を使用する方法の例です。私の実際のメインスケッチプログラムの中でそれを宣言すれば動作します。

私はそれが配列自体に問題ではないことを知っています。単純な文字列またはintのどちらでも機能しないためです。非常に奇妙な。

答えて

4

これらの線に沿って何かが私の作品:

あなたのスケッチの上部には、単に:私は持っていた

#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

を:

#include "Codes.h" 

Codes.hニーズが動作するように、このように見えます私のスケッチの中にを含めると、それはかなり唯一の変更でした。すべてが今、完璧に動作します。ありがとう。 – fuzz

関連する問題