2019.10.27 Open | ||||
ArduinoでRTCとGPSから取得した時刻をOLEDディスプレイに表示する |
||||
OLEDディスプレイとRTCはI2C通信、GPSはソフトウェアシリアル通信、同時に上手く使えるのだろうか?と思いつつ先の先に実験した3つのスケッチを統合し、整理しつつ稼働試験を行っていきました。先ずはシリアルモニタでPCにてRTCとGPSの出力をArduinoが受け取っている事をチェック。無事通信し受け取っていることを確認(ここ迄は簡単でした)。その後OLEDに表示させるようにしました(ここで色々臍を噛み、時間を食いました)。 結果として下の左の画像のようにRTCとGPSの時刻をOLEDディスプレイに表示させることが出来ました。スケッチを一番下に示します。 きちんと訳が判らないのに弄り倒す事で何とかやっている故危なっかしいです。次はGPSでRTCの時刻を合わせるスケッチを作ることにします。 |
||||
実験機器(左)と結果の動画(右:mp4ファイル) | ||||
|
||||
Arduinoのスケッチ |
||||
ArduinoでGPSから時刻を取得するスケッチを製作する。使用したGPSは秋月電子通商で売っていたコレ 下記のスケッチでGPSから時刻が取得されてPCのシリアルモニタ上に表示される。 TinyGPSのソースではうまく動かなかったのでDevicePlusの方に載っていた緯度経度高度のスケッチをちょっと改変して使いました。 |
||||
/* * RTCとGPSからの時刻をOLEDに表示するスケッチ * 2019年10月26日完成 * * 開発者 M氏@Lab. of Voynich Code */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SH1106.h> #define OLED_RESET 4 Adafruit_SH1106 display(OLED_RESET); #define NUMFLAKES 10 #define XPOS 0 #define YPOS 1 #define DELTAY 2 #include <DS3231.h> #include <TinyGPS++.h> #include <SoftwareSerial.h> DS3231 Clock; TinyGPSPlus gps; SoftwareSerial mySerial(10, 11); // RX, TX RTClib RTC; void setup() { Wire.begin(); Serial.begin(57600); mySerial.begin(9600); mySerial.println("Hello, world?"); display.begin(SH1106_SWITCHCAPVCC, 0x3C); } void loop() { // int sec; display.display(); display.clearDisplay(); DateTime now = RTC.now(); while (mySerial.available() > 0){ char c = mySerial.read(); gps.encode(c); } display.setCursor(0,0); display.setTextSize(1); display.setTextColor(WHITE); display.print("RTC: "); display.setTextSize(2); display.setTextColor(WHITE); display.print(now.hour()); display.print(':'); display.print(now.minute()); display.print(':'); display.println(now.second()); display.setTextSize(1); display.setTextColor(WHITE); display.print("GPS: "); display.setTextSize(2); display.setTextColor(WHITE); display.print(gps.time.hour()); display.print(":"); display.print(gps.time.minute()); display.print(":"); display.print(gps.time.second()); } |