質問編集履歴

1 詳細の修正

bobby2128

bobby2128 score 34

2017/02/27 10:16  投稿

Arduino M0 Pro でRTC機能を実現したいです。(手段は自由です)
###前提・実現したいこと
Arduino M0 Proで、RTC機能(時計機能)を実現したいです。
出来ればTiny RTC I2C Modulesを用いて実現したいですが、
下に示すように、過去の質問において、Arduino M0 ProとTiny RTC I2C Modulesを使おうとしたのですが難しかったので、質問をシンプルにし、手段にこだわらず、新たに質問投稿をさせていただきました。
過去の質問
https://teratail.com/questions/66738
https://teratail.com/questions/66775
###発生している問題・エラーメッセージ
過去の質問にも記載させていただきましたが、もともと、Arduino UNOでは以下のコードにて実行可能だったのですが、Arduino M0 Proに変更してコンパイルした際に、UNOでは見られなかったコンパイルエラーが発生しコンパイルと書き込みができない状態です。
###該当のソースコード
```c
// Tiny RTC (DS1307)
#include <Wire.h>   // I2C-Bibliothek einbinden
#include "RTClib.h" // RTC-Bibliothek einbinden
RTC_DS1307 RTC;     // RTC Modul
#include <OneWire.h>           // OneWire-Bibliothek einbinden
#include <DallasTemperature.h> // DS18B20-Bibliothek einbinden
#define DS18B20_PIN 2  // Pin für DS18B20 definieren Arduino D2
OneWire oneWire(DS18B20_PIN);         // OneWire Referenz setzen
DallasTemperature sensors(&oneWire);  // DS18B20 initialisieren
void setup(void) {
 // Initialisiere I2C 
 Wire.begin();
 // Initialisiere RTC
 RTC.begin();
 // Serielle Ausgabe starten
 Serial.begin(9600);
 // Begrüßungstext auf seriellem Monitor ausgeben
 Serial.println("Starte Datum, Zeit und Temperatur - blog.simtronyx.de");
 // Prüfen ob RTC läuft 
 if (! RTC.isrunning()) {
   // Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft
   RTC.adjust(DateTime(__DATE__, __TIME__));
   Serial.println("Echtzeituhr wurde gestartet und auf Systemzeit gesetzt.");
 }
 else Serial.println("Echtzeituhr laeuft bereits.");
 sensors.begin(); // DS18B20 starten
}
void loop(){
 DateTime now=RTC.now();  // aktuelle Zeit abrufen
 show_time_and_date(now); // Datum und Uhrzeit ausgeben
 sensors.requestTemperatures();                // Temperatursensor auslesen
 show_temperature(sensors.getTempCByIndex(0)); // Temperatur ausgeben
 delay(3000); // 30 Sekunden warten bis zur nächsten Ausgabe
}
// Wochentag ermitteln
String get_day_of_week(uint8_t dow){
 String dows=" ";
 switch(dow){
  case 0: dows="So"; break;
  case 1: dows="Mo"; break;
  case 2: dows="Di"; break;
  case 3: dows="Mi"; break;
  case 4: dows="Do"; break;
  case 5: dows="Fr"; break;
  case 6: dows="Sa"; break;
 }
 return dows;
}
// Datum und Uhrzeit ausgeben
void show_time_and_date(DateTime datetime){
 // Wochentag, Tag.Monat.Jahr
 Serial.print(get_day_of_week(datetime.dayOfWeek()));
 Serial.print(", ");
 if(datetime.day()<10)Serial.print(0);
 Serial.print(datetime.day(),DEC);
 Serial.print(".");
 if(datetime.month()<10)Serial.print(0);
 Serial.print(datetime.month(),DEC);
 Serial.print(".");
 Serial.println(datetime.year(),DEC);
 // Stunde:Minute:Sekunde
 if(datetime.hour()<10)Serial.print(0);
 Serial.print(datetime.hour(),DEC);
 Serial.print(":");
 if(datetime.minute()<10)Serial.print(0);
 Serial.print(datetime.minute(),DEC);
 Serial.print(":");
 if(datetime.second()<10)Serial.print(0);
 Serial.println(datetime.second(),DEC);
}
// Temperatur ausgeben
void show_temperature(float temp){
 Serial.print("Temperatur: ");
 Serial.print(temp);
 Serial.print(" "); // Hier müssen wir ein wenig tricksen
 Serial.write(176); // um das °-Zeichen korrekt darzustellen
 Serial.println("C");
}
```
###試したこと
過去の質問ごご参照ください
https://teratail.com/questions/66738
https://teratail.com/questions/66775
###補足情報(言語/FW/ツール等のバージョンなど)
Arduino M0 Pro
Arduino IDE 1.8.0
Tiny RTC I2C Modules
DS1307
  • C

    4657 questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • Arduino

    691 questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る