Arduinoのプログラムについて

このQ&Aのポイント
  • Arduinoのプログラムにおいてエラーが発生する箇所を修正する方法を教えてください
  • Arduinoのスケッチを実行するには、SDスロットとRTC(電池付き)を搭載したデータロギングシールドが必要です
  • 参考にしたサイトでは、Arduinoを使用した単純なデータログを取得する方法が紹介されています
回答を見る
  • ベストアンサー

Arduinoのプログラムに付いて

お世話になります。 海外のサイトでスケッチが公開されているのですが、コピーして検証すると「RTC_DS1307 RTC; 」の所ががno neme a typeとエラーになってしまいます。 どこを修正すれば良いか、教えて戴けないでしょうか。 また、このスケッチを実行するには、どのようなシールドが必要ですか。 SDスロットとRTC(電池付き)を搭載しているデータロギングシールドが必要かと考えているのですが。 参考にしたサイトです。 http://jobs.arduinoexperts.com/2013/03/02/simple-data-logging-using-arduino/ よろしくお願いします。

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

  • ベストアンサー
  • neorg
  • ベストアンサー率54% (235/433)
回答No.3

<!DOCTYPE html>ということは、ページを全体を保存してしまったのではないでしょうか? そうではなくて、 executable file 49 lines (42 sloc) 1.542 kb のしたの1行めから48行目をコピー(ご存知かもしれませんが、マウスの左ボタンを押したまま選択して青くなったところを右クリックでコピーで)して貼り付けてから 行番号の数字だけをを削除して『RTClib.h 』というファイル名で保存してください

dt50ax1vt250
質問者

お礼

ありがとうございます。 おっしゃる通りページ全体を保存していました。 テキストファイルにコピーペーストとファイル名を変更して、このエラーは回避できました。 ですが、buffbuffer was not declared in this scopeというコンパイルエラーが発生してしまいました。 調べてみると重複している所や該当する関数や変数が有効範囲内で見つからない場合に発生するエラーだそうです。 いろいろ試していますが、変化なしです。 次から次へと…難しいです。

その他の回答 (2)

  • neorg
  • ベストアンサー率54% (235/433)
回答No.2

http://www.eleki-jack.com/FC/2008/12/11arduino5.html によると変な文字(全角とか)が含まれているエラーらしいです

dt50ax1vt250
質問者

お礼

neorg様ありがとうございます。 全角を半角に変更したのですが <!DOCTYPE html>の所でエラーになってしまいます。 スケッチにタブが有るなんて初めて知りました。タブが出てくると複雑になってしまいますね。 もうすこしRTCから勉強してみます。 ご丁寧に、ありがとうございました。

  • neorg
  • ベストアンサー率54% (235/433)
回答No.1

Download sketch del data loggingのところの You can download the sketch and the RTC library that I used for this project directly from GitHub.←ここをのGitHubをクリックすると RTClib.h がおいてあるところに飛びます そのファイルをプログラムと同じ場所にに保存してください RTClib.hがないためのエラーだと思います 参考にしたページにTutorial: RTC Shield con DS1307;のところをクリックしたら http://www.mauroalfieri.it/en/elettronica/tutorial-rtc-shield-con-ds1307.html に飛ぶとおもいますが https://www.futurashop.it/index.php?route=product/product&product_id=2561 で同じのを販売されてます。 http://www.switch-science.com/catalog/1705/ スイッチサイエンスでsdカードスロットとrtc DS1307 がのっているシールドで Arduino UNOやDeilanove, Diecimila, LeonardoにADK/Mega R3以降で使用可能だそうです こちらのほうが両方のっているでいいかもしれません (購入するときは自分の責任で確認してください)

dt50ax1vt250
質問者

お礼

neorg様 ありがとうございます。 RTClib.hとこのファイル以外も同じホルダーに入れました。 全て入れた後、検証すると違うところで「 stray '/343' in program 」エラーが発生してしまいました。RTClib.h以外を取り出しても変わりませんでした。 RTClib.h側のスケッチになにか有るようです。 もしよろしければ教えて戴けますか シールドですが教えて戴いた物を購入してみます。 RTCと電池とカードスロット。すばらしいです。 よろしくお願いします。

関連するQ&A

  • Arduinoでコンパイルエラーについて

    お世話になります。 Arduinoで検証すると「コンパイル時にエラーが発生しました。」と出ますがスケッチ上に黄色い帯が出ません。 なにが原因なのでしょう? 参考にしたスケッチ http://www.mauroalfieri.it/en/elettronica/data-logging-con-arduino.html これに「RTClib.h」というファイルを同じ場所に置きました。 テキストファイルに以下のスケッチをコピーし「RTClib.h」を作成します。 // Code by JeeLabs http://news.jeelabs.org/code/ // Released to the public domain! Enjoy! // Simple general-purpose date/time class (no TZ / DST / leap second handling!) class DateTime { public: DateTime (uint32_t t =0); DateTime (uint16_t year, uint8_t month, uint8_t day, uint8_t hour =0, uint8_t min =0, uint8_t sec =0); DateTime (const char* date, const char* time); uint16_t year() const { return 2000 + yOff; } uint8_t month() const { return m; } uint8_t day() const { return d; } uint8_t hour() const { return hh; } uint8_t minute() const { return mm; } uint8_t second() const { return ss; } uint8_t dayOfWeek() const; // 32-bit times as seconds since 1/1/2000 long secondstime() const; // 32-bit times as seconds since 1/1/1970 uint32_t unixtime(void) const; protected: uint8_t yOff, m, d, hh, mm, ss; }; // RTC based on the DS1307 chip connected via I2C and the Wire library class RTC_DS1307 { public: static uint8_t begin(void); static void adjust(const DateTime& dt); static void sqw(int sqw); uint8_t isrunning(void); static DateTime now(); }; // RTC using the internal millis() clock, has to be initialized before use // NOTE: this clock won't be correct once the millis() timer rolls over (>49d?) class RTC_Millis { public: static void begin(const DateTime& dt) { adjust(dt); } static void adjust(const DateTime& dt); static DateTime now(); protected: static long offset; }; みなさま、どうかよろしくお願い致します。

  • Arduino DS18B20 でデータが取得で

    Arduino DS18B20 でデータが取得できない。 回路は下のサイトを参考にしました。 ArduinoIDE 1.8.8 を使ってスケッチ例の"Dallas temprature" "tester" をボードに書き込みました。 シリアルモニターでは下のような表示です。 11:43:49.686 -> Requesting temperatures...DONE どうもデバイスが見つけられないようです。 回路はあっているように思いますが、問題の切り分け方 ありますでしょうか?

  • Arduinoのスケッチで「変化が有った時」に変更

    お世話になります。 このスケッチを見るとHIGHの時に記録するようになっていると考えていますが、HIGHかLOWの変化の有った時に記録したいのですが、どのように変更すれば良いか教えて下さい。 また、記録上の0000 0000 0000のようにスペースを開けて記録する場合のスケッチも教えていただけますか。 参考にしたHP http://www.mauroalfieri.it/en/elettronica/data-logging-con-arduino.html 元のスケッチのチャンネル数はアナログ4chですがこれにデジタル12chを加え合計16chにしてみました。 実機では、まだ検証していませんがソフト上ではエラーは発生していません。 その他、改善点なども有りましたら、ご教授お願い致します。 皆様、よろしくお願い致します。 // Date and time functions using a DS1307 RTC connected via I2C and Wire lib #include <Wire.h> #include "RTClib.h" #include <SD.h> #define readButton 16 #define CS 10 RTC_DS1307 RTC; char buffer[40]; File myFile; void setup () { Serial.begin(57600); Serial.print("Initializing SD card..."); pinMode(CS, OUTPUT); pinMode(readButton, INPUT); if (!SD.begin(CS)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); Wire.begin(); RTC.begin(); RTC.sqw(1); //0 Led off - 1 Freq 1Hz - 2 Freq 4096kHz - 3 Freq 8192kHz - 4 Freq 32768kHz if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled RTC.adjust(DateTime(__DATE__, __TIME__)); } } void loop () { DateTime now = RTC.now(); 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 )); Serial.println( buffer ); myFile = SD.open("dati.log", FILE_WRITE); if (myFile) { myFile.println(buffer); myFile.close(); } else { Serial.println("error opening dati.log"); } if ( digitalRead( readButton ) == HIGH ) { 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 ); } delay(1000); }

  • 機器のI/OをArduinoでSDに記録したい

    皆様、お世話になります。 Arduinoでデーターロガーのスケッチを作成しています。 スケッチしてみましたが動くかどうか確認とこう直した方が良いなど改善点が有れば、お願い致します。 2番ピンに変化が有った時(ONかOFF)に時間と2番ピンの状態をSDカードに記録したいのです。 これが、うまくいけば系統を増やしていきたいです。 書いたスケッチ #include <SD.h> // この値は使用しているシールドや基板に合わせて変更すること。たとえば、 // イーサーネットシールドは 4 // Adafruit のSDシールドは 10 // Sparkfun のSDシールドは 8 const int chipSelect = 4; void setup() { // シリアルポート初期化 Serial.begin(9600); while (!Serial) { ; // USBケーブルが接続されるのを待つ。この待ちループは Leonardo のみ必要。 pinMode(2,INPUT) ; //スイッチに接続ピンをデジタル入力に設定A } Serial.print(F("Initializing SD card...")); // SSピン(Unoは10番、Megaは53番)は使わない場合でも出力にする必要があります。 // そうしないと、SPIがスレーブモードに移行し、SDライブラリが動作しなくなります。 pinMode(SS, OUTPUT); // SDライブラリを初期化 if (!SD.begin(chipSelect)) { Serial.println(F("Card failed, or not present")); // 失敗、何もしない while(1); } Serial.println(F("ok.")); // 日付と時刻を返す関数を登録 SdFile::dateTimeCallback( &dateTime ); } void loop() { // ファイルを開く File dataFile = SD.open("datalog.txt", FILE_WRITE); // もし2番ピンに変化が有れば書き込む if (digitalRead(2)==HIGH) { int value = digitalRead(2); dataFile.println(value); dataFile.close(); // シリアルポートにも出力 Serial.println(value); } if (digitalRead(2)==LOW) { int value = digitalRead(2); dataFile.println(value); dataFile.close(); // シリアルポートにも出力 Serial.println(value); } // ファイルが開けなかったらエラーを出力 else { Serial.println(F("error opening datalog.txt")); } } void dateTime(uint16_t* date, uint16_t* time) { uint16_t year = 2014; uint8_t month = 7, day = 22, hour = 14, minute = 0, second = 0; // GPSやRTCから日付と時間を取得 // FAT_DATEマクロでフィールドを埋めて日付を返す *date = FAT_DATE(year, month, day); // FAT_TIMEマクロでフィールドを埋めて時間を返す *time = FAT_TIME(hour, minute, second); } よろしくお願い致します。

  • PCに挿したIOボードを制御するためのプログラム

    IOボード(AD/DAボード)を使ってPCで入出力制御(例えばモーターのフィードバック制御)をしたいと思っているのですが、ボードにアクセスするためのプログラムや、信号を入出力するためのプログラムをどのように書いたら良いかわかりません。おそらくデータシート?に書いていると思うのですが、知識不足で読み解くことができません。(いままでArduino IDEでArduinoの制御をしたことしかありません。普通にC言語でAVRマイコンをプログラムして制御することはできません。C言語の基礎知識はあります。) そこで質問なのですが、PCから(例えばPCIスロットに挿した)IOボード(AD/DAボード)を制御するための知識は、どのようにして習得できますでしょうか?参考になる本やサイトが見つかりません。PICやAVRなどのマイコンであれば本が色々出ているようなのですが、そのようなマイコンを使えるようになれば、PCからIOボードを制御できる基礎知識は付きますでしょうか?

  • Arduino互換機によるシリアル通信機機器制御

    Arduino互換、Japaninoでシリアル通信による蛍光表示管(VFD)モジュールの制御を行いたいのですが、どうすればいいでしょうか。 蛍光表示管(VFD)モジュールはFUTABA製のGP-1150Aという製品で、PCとはRS-232Cのシリアル通信にて制御できます。 例えば、 HyperTerminalで、あいうえおと入力すれば、VFDに「あいうえお」と表示され、 ESCを押して、[2J(消去コマンド)を入力すれば、モジュールがコマンドと認識して、画面が消去されます。 また、バイナリ形式で上記コマンドを16進に置き換えた、1B5B324Aというバイナリデータを送信しても画面を消すことが出来ます。 今、分かっていること ・VFDモジュールはPCとシリアル通信にて制御が出来る ・バイナリエディタで、コマンド+日本語データを作り、バイナリデータを送ればVFDモジュールを意のままに操作できる。 ・Japaninoと、VFDモジュールは、そのままでは通信が出来ない。 ・JapaninoとVFDモジュールの通信には、MAX232互換チップ等のレベル変換ICが必要 分からないこと ・どのようにJapaninoとMAX232を接続すればよいか ・スケッチをどのように書けば、バイナリデータを送ることが出来るのか。 ・Japanino上に設置されたボタン or 追加したボタンを押すことにより、データがVFD側に送られるようにする。 です。 アドバイス等、頂ければ幸いです。 どうぞよろしくお願いします。

  • arduinoでのプログラム

    初心者の質問で申し訳ございませんがご回答いただけましたら幸いです。 どうぞよろしくお願いいたします。 現在、頑張ってプログラム(スケッチ)を書いていますが なかなかうまく動作してくれません。 内容は Button0,Button1,Button2の3入力です。 LED0,LED1,LED2の3出力です。 Button0の入力に対して LED0に100msのHIGH,LOWのパルス信号を(3パルス)出力したい。 Button1の入力に対して LED1に50msのHIGH,LOWのパルス信号を(5パルス)出力したい。 Button2の入力に対して LED2に150msのHIGH,100msのLOWのパルス信号を(7パルス)出力したい。 *delayを使うとなんとなく動作してくれますが Button0,Button1をほぼ同時に使うとButton0の処理が終わるまで Button1の動作を受け付けてくれません。 3入力を同時に処理するには どのようなスケッチを書けばよろしいでしょうか? 是非、ご教授頂けますでしょうか。

  • Arduino のプログラムについて

    下のプログラムはArduinoで、4個のバッテリーの電圧を取得して、あるバッテリー電圧が14.5V以上だったら、充電を停止し、14.5Vよりも低いバッテリーには充電をするようにしたいのです。例えば、4個のバッテリーの取得電圧が下の図の様な状況の時、それぞれのバッテリーに充電、充電停止を行いたいのです。 AnalogPin 0 → 14.8V → digitalPin 10 を充電停止(LOWにする) AnalogPin 1 → 12.8V → digitalPin 11 を充電(HIGHにする) AnalogPin 2 → 13.7V → digitalPin 12 を充電(HIGHにする) AnalogPin 3 → 13.0V → digitalPin 13 を充電(HIGHにする) 質問:下のプログラムでArduinoに書き込んで動作させてみると、バッテリーの電圧は読み取っているのですが、digitalPin10~13のHIGH、LOWがうまくいきません。良い方法を教えてください。 void setup() { Serial.begin(9600); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); } void loop() { float battery_v[4];            for(int i=0;i<4;i++){ float convert_v=analogRead(i)*5./1024; battery_v[i]=convert_v/30*130; delay(100); Serial.print(i); Serial.print(" is "); Serial.println(battery_v[i]); delay(100); for(int r=9;r<14;r++){  // ここから下の命令がうまく動作しません。 if(battery_v[i]>14.5){ // digitalPin は10~13です。 digitalWrite(r,LOW); // すべてのdigitalWriteが }else { // LOWのままか、HIGHのままになってしまいます。 digitalWrite(r,HIGH); // } }   } delay(1000); } 以上、宜しくお願い致します。

  • arduinoのプログラムについて

    下のサイトにはarduinoを使って皮膚温度を測るプログラムが載っているのですが、何秒毎に測定しているか分かりますか?またその秒数を変更するにはどこを変えればいいのでしょうか? https://www.mirai-kougaku.jp/laboratory/pages/200207_02.php

  • arduinoのプログラムの書き方について

    aruduinoのプログラムの書き方として1つのプログラム内に下記のように複数のセットアップとvoid loopを書き込むのは可能なのでしょうか? void setup(led) { ledを点灯させる為の初期設定 } void setup(buzzer) { ブザーを鳴動させる為の初期設定 } void loop(led) { ledを点灯させる処理 } void loop(buzzer) { ブザーを鳴動させる処理 } どうか宜しく御回答の程お願いいたします。

専門家に質問してみよう