• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Arduinoのスケッチで「変化が有った時」に変更)

Arduinoスケッチの変更方法と記録方法について

このQ&Aのポイント
  • Arduinoのスケッチを変更する方法と記録する方法について教えてください。
  • スケッチを変更するときには、HIGHかLOWの変化があった時に記録するように設定する必要があります。
  • データの記録方法は、スペースを開けて0000 0000 0000のように記録する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

>char buffer[40];これをchar buffer[64];に変更しました。 実際に64文字で足りるかはちゃんと検証してくださいな。 %d指定だとint型の最大桁数まで入る可能性があると思っておいた方が。 >if ( now != old ) { >の所で「 'old' was not declared in this scope」というエラーが発生します。 >スケッチの最初に設定をしないといけないのでしょうか。 初期値がないよ。 と怒られたのでしょう。 setup()辺りで初期値を設定すればよいでしょう。 スイッチなどが接続されているのであればスイッチの状態で固定値にしてもいいでしょうし、 setup()内でdigitalRead()した値でも突っ込んでおけばよいかと。

dt50ax1vt250
質問者

お礼

ありがとうございます。 64文字は実際に検証して変更していきます。 初期値が無く怒られた件ですが、 setup()のスケッチを pinMode(0,INPUT) ; pinMode(1,INPUT) ; pinMode(2,INPUT) ; pinMode(3,INPUT) ;    ・    ・ これを16系統入力してみましたがエラーでした。 nowに対しての初期値でしょうか。 またdigitalReadとanalogReadが必要になるのですよね。 この場合、nowが2個必要になるのでしょうか。 質問ばかりで申し訳ありません。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

>char buffer[40]; まず、40文字で足りますか? >sprintf(buffer, "%02d/d/%d d:%02d:%02d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second(), digitalRead( A1 ), digitalRead( A2 ), digitalRead( A3 ),digitalRead( A4 ), digitalRead( A5 ), digitalRead( A6 ), digitalRead( A7 ),digitalRead( A8 ), digitalRead( A9 ), digitalRead( A10 ), digitalRead( A11 ),analogRead( A0 ), analogRead( A1 ), analogRead( A2 ), analogRead( A3 )); の変換結果が40文字で収まるとは思えませんが。 analogRead()は10ビットの結果を返すようなので、%d指定で最大4桁。 最初の方の/d/は/%d/の書き間違いでしょう。 HIGHが具合的にいくつになったかちょっと覚えていませんが、1だったとしても… "01/12/2014 12:00:00 1 1 1 1 1 1 1 1 1 1 1 1 1023 1023 1023 1023 "で、64文字くらいはバッファが必要そうです。 >HIGHかLOWの変化の有った時に記録したいのですが、どのように変更すれば良いか教えて下さい。 前回の状態を変数に記録しておいて、それと変化があった場合に処理すればよいでしょう。 delay()でそれなりの間を開けているようですしチャタリングは考慮しなくてもいい…でしょうかねぇ……。 if ( digitalRead( readButton ) == HIGH ) {  : } を now = digitalRead( readButton ); if ( now != old ) {  :  old = now; } みたいな。 >記録上の0000 0000 0000のようにスペースを開けて記録する場合のスケッチも教えていただけますか。 オープンしたファイルにはき出せばよいかと。 >myFile.println(buffer); で、改行込みで出力しているようではありますが。

dt50ax1vt250
質問者

お礼

Wr5様 いつもありがとうございます。 まず、 char buffer[40];これをchar buffer[64];に変更しました。 そして、 変化が有った時のスケッチですが下記のように変更してみましたが、 if ( now != old ) { の所で「 'old' was not declared in this scope」というエラーが発生します。 スケッチの最初に設定をしないといけないのでしょうか。 now = digitalRead( readButton ); if (now !=old) { Serial.println(" "); Serial.println("Log Reading Saved ----------- "); Serial.println(" "); myFile = SD.open("dati.log"); if (myFile) { while (myFile.available()) { Serial.write(myFile.read()); } myFile.close(); } delay( 5000 ); old = now; } delay(1000); } スペースを開けるスケッチは後程、試します。 ありがとうございました。