Arduino日本語リファレンス


PROGMEM prog_uint16_t charSet[] =
{ 65000, 32796, 16843, 10, 11234 };

prog_uchar signMessage[] PROGMEM =
"I AM PREDATOR, UNSEEN COMBATANT.";

unsigned int displayInt;
char myChar;
int k;

displayInt = pgm_read_word_near(charSet + k); // 2バイト読み込み
myChar = pgm_read_byte_near(signMessage + k); // 1バイト読み込み

文字列の配列をFlashメモリに配置する例です。

#include <avr/pgmspace.h>

prog_char string_0[] PROGMEM = "String 0";
prog_char string_1[] PROGMEM = "String 1";
prog_char string_2[] PROGMEM = "String 2";
prog_char string_3[] PROGMEM = "String 3";

// Then set up a table to refer to your strings.

PROGMEM const char *string_table[] = {
  string_0,
  string_1,
  string_2,
  string_3
};

char buffer[30];    // 文字列を格納するのに十分なサイズ

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < 4; i++) {
    // strcpy_Pで文字列をプログラム領域からRAM(バッファ)へコピー
    // キャストと逆参照が必要
    strcpy_P(buffer, (char*)pgm_read_word(&(string_table[i])));

    Serial.println( buffer );
    delay( 500 );
  }
}

F()マクロ

Frashメモリの文字列にアクセスするためのマクロです。PROGMEMよりも簡単に、長い文字列を扱うことができます。

【例】

Flashメモリから文字列を取得して出力する例

void setup() {
    Serial.begin(9600);
}
void loop() {
    Serial.print( F("Hello World.") );
    delay(1000);
}


[目次へ戻る]

Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはArduino Teamにより執筆され、Takumi Funadaが翻訳し、一部加筆修正したものです
ご意見はtf at musashinodenpa.comまでお送りください [ドキュメント一覧]