データロガーのスケッチがエラーに

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
太郎のおやじ

データロガーのスケッチがエラーに

#1

投稿記事 by 太郎のおやじ » 10年前

皆様、お願い致します。
SDカードに変化が有った時にPINの状態を、このようなデータを記録していきたいのです。
2014/09/19 20:18:10 0000 0000 0100 0000 0000
接続するピンの数は16系統でデジタル10アナログ6を使っています。

おしえてgooなどのサイトで質問しながらスケッチしてきましたが、どうにも進まなくなってしまいました。
現在「Leonardo」+「Adafruit Data Logger Shield」を使っています。

デジタルピン10, 11, 12, 13はSDカードとして使うそうです。
またSD.hは Adafruit 用のものを使います。

今、出ているエラーです

Datalogger_TIME_osiete6.ino: In function 'void loop()':
Datalogger_TIME_osiete6:47: error: 'ChgFlag' was not declared in this scope
Datalogger_TIME_osiete6:48: error: 'i' was not declared in this scope

カッコの位置や変数の宣言だと思うのですが・・・
スケッチ全体を張り付けるのでチェックしていただければ幸いです。
よろしくお願い致します。

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h> // Credit: Adafruit
RTC_DS1307 RTC;
#define DPINMAX 16

int Digitalpin [DPINMAX] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19};
int val = 0;// 入力ピンの状態がこの変数(val)に記憶される
int old_val = 0;// valの前の値を保存しておく変数
const int chipSelect = 10;// Adafruit のSDシールドは 10

void setup(){
// see if the card is present and can be initialized:
if (!SD.begin(10, 11, 12, 13)) {//データロガーシールド用スケッチ
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
Serial.begin(9600); // Open serial communications and wait for port to open:
// Instantiate the RTC
Wire.begin();
RTC.begin();

// Check if the RTC is running.
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running");
}
// This section grabs the current datetime and compares it to
// the compilation time. If necessary, the RTC is updated.
DateTime now = RTC.now();
DateTime compiled = DateTime(__DATE__, __TIME__);
if (now.unixtime() < compiled.unixtime()) {
Serial.println("RTC is older than compile time! Updating");
RTC.adjust(DateTime(__DATE__, __TIME__));
}

Serial.println("Setup complete.");
}
void loop()
{
DateTime now = RTC.now();
File dataFile = SD.open("datalog.txt", FILE_WRITE);

ChgFlag = 0;/* 変化あったか確認するためのフラグをクリア */
for(i=0;i<DPINMAX;i++) {
val = digitalRead(Digitalpin);
old_val = digitalRead(Digitalpin);
if(val != old_val) {
ChgFlag = 1; /* 前回から変化ありました*/
old_val = val; /* 今回の値に更新します */
}
}
if(ChgFlag != 0){ /* 変化あったらからSDに書き出すよ~ */
}

for(i=0;i<(sizeof(old_val)/sizeof(int));i++) {
dataFile.print(old_val);
if((i % 4) == 0)
dataFile.print(" ");
}
dataFile.println(); /* 最後に改行追加 */
dataFile.close();
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: データロガーのスケッチがエラーに

#2

投稿記事 by みけCAT » 10年前

コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
太郎のおやじ さんが書きました:今、出ているエラーです

Datalogger_TIME_osiete6.ino: In function 'void loop()':
Datalogger_TIME_osiete6:47: error: 'ChgFlag' was not declared in this scope
Datalogger_TIME_osiete6:48: error: 'i' was not declared in this scope

カッコの位置や変数の宣言だと思うのですが・・・

メッセージに書いてある通り、ChgFlagとiが宣言されていないようです。適切な位置で宣言を行ってください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

太郎のおやじ

Re: データロガーのスケッチがエラーに

#3

投稿記事 by 太郎のおやじ » 10年前

みけCAT 様
ありがとうございます。

試して見ます。

太郎のおやじ

Re: データロガーのスケッチがエラーに

#4

投稿記事 by 太郎のおやじ » 10年前

掲示板のルール守っていませんでした。
申し訳ありません。

別サイトでも質問させて戴いています。
参考URL  http://oshiete.goo.ne.jp/qa/8763652.html

今回のエラーの対応として、教えていただいた。
int i;
int ChgFlag;
を入れてみましたが、別のエラーが発生してしまいました。
.ino: In function 'void loop()':
:50: error: invalid types 'int[int]' for array subscript
:52: error: invalid types 'int[int]' for array subscript
:58: error: invalid types 'int[int]' for array subscript


intが重複しているとか、そんな感じのエラーでしょうか。
よろしくお願い致します。

[code]
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h> // Credit: Adafruit
RTC_DS1307 RTC;
#define DPINMAX 16

int Digitalpin [DPINMAX] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19};
int val = 0;// 入力ピンの状態がこの変数(val)に記憶される
int old_val = 0;// valの前の値を保存しておく変数
int i;
int ChgFlag;
const int chipSelect = 10;// Adafruit のSDシールドは 10

void setup(){
// see if the card is present and can be initialized:
if (!SD.begin(10, 11, 12, 13)) {//データロガーシールド用スケッチ
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
Serial.begin(9600); // Open serial communications and wait for port to open:
// Instantiate the RTC
Wire.begin();
RTC.begin();

// Check if the RTC is running.
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running");
}
// This section grabs the current datetime and compares it to
// the compilation time. If necessary, the RTC is updated.
DateTime now = RTC.now();
DateTime compiled = DateTime(__DATE__, __TIME__);
if (now.unixtime() < compiled.unixtime()) {
Serial.println("RTC is older than compile time! Updating");
RTC.adjust(DateTime(__DATE__, __TIME__));
}

Serial.println("Setup complete.");
}
void loop(){
DateTime now = RTC.now();
File dataFile = SD.open("datalog.txt", FILE_WRITE);

{ ChgFlag = 0;/* 変化あったか確認するためのフラグをクリア */
for(i=0;i<DPINMAX;i++) {
val = digitalRead(Digitalpin[i]);
if(val != old_val[i]) {
ChgFlag = 1; /* 前回から変化ありました*/
old_val[i] = val; /* 今回の値に更新します */
}
}
if(ChgFlag != 0) /* 変化あったらからSDに書き出すよ~ */

for(i=0;i<(sizeof(old_val)/sizeof(int));i++) {
dataFile.print(old_val[i]);
if((i % 4) == 0)
dataFile.print(" ");
}
dataFile.println(); /* 最後に改行追加 */
dataFile.close();
}
}

[/code]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: データロガーのスケッチがエラーに

#5

投稿記事 by みけCAT » 10年前

old_valはint型なので、配列のように添字を用いることはできません。
old_valをDPINMAX要素のint型配列にするといいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

太郎のおやじ

Re: データロガーのスケッチがエラーに

#6

投稿記事 by 太郎のおやじ » 10年前

みけCAT様

ありがとうございます。
初心者な物で「old_valをDPINMAX要素のint型配列」とは具体的に、どのようになるのでしょうか。
私のレベルはLEDを点灯や調光、そんな程度です。
申し訳ありません。お願い致します。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: データロガーのスケッチがエラーに

#7

投稿記事 by みけCAT » 10年前

太郎のおやじ さんが書きました:初心者な物で「old_valをDPINMAX要素のint型配列」とは具体的に、どのようになるのでしょうか。

コード:

int old_val = 0;// valの前の値を保存しておく変数
という行を

コード:

int old_val[DPINMAX] = {};// valの前の値を保存しておく変数
とすればいいと思います。
太郎のおやじ さんが書きました:私のレベルはLEDを点灯や調光、そんな程度です。
どんな程度かよくわからないですが、まずC言語の基礎を学ぶといいでしょう。
かつて自分が用いたサイトです→苦しんで覚えるC言語
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

太郎のおやじ

Re: データロガーのスケッチがエラーに

#8

投稿記事 by 太郎のおやじ » 10年前

みけCAT様
ありがとうございます!!
エラーなしでコンパイルできました。

しかし、ボードに書き込んで動作させても反応が無い・・・・
スケッチと睨めっこしてみます。


苦しんで覚えるC言語、私も苦しんでみます。(笑
いろんなスケッチを検索していても「苦しんで覚えるC言語」のHPを発見できませんでした。
教えていただき、ありがとうございます。

太郎のおやじ

Re: データロガーのスケッチがエラーに

#9

投稿記事 by 太郎のおやじ » 10年前

みけCAT
ありがとうございます。
苦しんで覚えるC言語、勉強しています。
本当に、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る