ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュのPROGMEM質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
FLASH側にメッセージデータを置いて、プログラムで必要なものを読み出し表示したいです。

Arduino日本語マニュアルのPROGMEMページに載っているサンプルをコピペして動かしましたが...
なんだか動きません!
#SerialMonitorになにも表示されません....

http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=1613
ここのページにある「文字列の配列をFlashメモリに配置する例です。 」の下にあるプログラムをコピペして動かしました。

因みにloop()にSerial.print("String_0");だけ入れれば、ちゃんとSerialMonitorに表示されます。

あと、どうもstrcpy_Pの行がおかしい気がします(?)
Javaプログラマなのでポインタは苦手なんですよね(*とか&とか)。

どなたか、下記プログラムが正常に動くように教えていただけませんか?
#と言うか、下記プログラムを動かせばString_0〜String_3がSerialMonitorに表示されるはずですよね?

------------------------------------------------------------

#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.

PGM_P PROGMEM 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 );
}
}

コメント(3)

因みに下記プログラムを組んで実験したら1357950255とちゃんとSerialMonitorに表示されました。

-------------------------------------------

#include <avr/pgmspace.h>

PROGMEM prog_char dat[] = {1,3,5,7,9,50,255};

void setup() {
Serial.begin(9600);
pinMode(1,OUTPUT);
}
void loop() {
for(int i = 0;i < 7;i++) {
byte dt = pgm_read_byte_near(dat + i);
Serial.print(dt,DEC);
}
delay(1000);
}
原文と日本語訳で、ちょっとプログラムが違っていますね。

PGM_P PROGMEM string_table[] = {

PROGMEM const char *string_table[] ={
に直すとうまくいくようです。
まりす様

> 原文と日本語訳で、ちょっとプログラムが違っていますね。
えっ?そーなんですか?
実はオーライリーの本も翻訳ページと同じになっていたので、原文も同じだと疑う余地もなかったです...。

 :
 :
 :
そして、ちゃんと動くようになりました!
有難うございます!!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング