/* GPS radio clock 2.02 2014/07/07 daikunomokichi */ #include <Wire.h> #include <wI2cLcdACM1602.h> wI2cLcdACM1602 lcd; int dHour = 0; //JST「時」 int dHour0 = 0; int dHour1 = 0; int dHour2 = 0; int dMin = 0; //内部「分」 int dMin0 = 0; int dMin1 = 0; int dSec = 0; //内部「秒」 int dSec0 = 0; int dSec1 = 0; int dSec2 = 0; int dSec3 = 0; int dIntpin = 2; //割込D2 char buf[256]; int count = 0; char* gpsTime; //個別データ用の文字列用ポインタ char* gpsCnt; //個別データ用の文字列用ポインタ char dRun = 0; //補足完了 void setup() { Serial.begin(9600); Serial.println("$PMTK220,500*2B"); //データ更新レート 2Hz Wire.begin(); //I2C初期化 lcd.begin(); //LCD初期化 lcd.clear(); //全クリア lcd.noBlink(); //カーソル点滅なし lcd.noCursor(); //カーソル表示なし lcd.setCursor(0, 0); lcd.print("Preliminary GPS"); //最初のメッセージ表示 lcd.setCursor(0, 1); lcd.print("2.02 by mokichi"); //最初のメッセージ表示 pinMode(dIntpin, INPUT); attachInterrupt(0, yCnt, RISING); //attachInterrupt(0,yCnt, FALLING); //HIGHからLOW delay(1000); lcd.clear(); } void loop() { count = 0; do { if (Serial.available()) { buf[count] = Serial.read(); count++; } if (count > 250) { break; } } while (buf[count - 1] != 0x0A); buf[count] = '\0'; if (0 == strncmp("$GPGGA", buf, 6)) { strtok(buf, ","); gpsTime = strtok(NULL, ","); //m1>UTC時刻の抽出 strtok(NULL, ","); //m2 strtok(NULL, ","); //c1 strtok(NULL, ","); //m3 strtok(NULL, ","); //c2 strtok(NULL, ","); //d1 gpsCnt = strtok(NULL, ","); //d2>測位に使用した人工衛星の個数 lcd.setCursor(14, 1); lcd.print(gpsCnt); lcd.print(" "); dMin0 = gpsTime[2]; dMin1 = gpsTime[3]; dMin = ((dMin0 - 48) * 10) + dMin1 - 48; dSec0 = gpsTime[4]; dSec1 = gpsTime[5]; dSec2 = ((dSec0 - 48) * 10) + dSec1 - 48; dHour0 = gpsTime[0]; dHour1 = gpsTime[1]; dHour2 = ((dHour0 - 48) * 10) + dHour1 - 39; switch (dHour2) { case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: dHour = dHour2 - 24; break; default: dHour = dHour2; break; } } dSec3 = dSec - dSec2; switch (dSec3) { case -1: dRun = -1; break; case 0: dRun = -1; break; case 1: dRun = -1; break; default: dRun = 0; break; } if (dRun != 0) { lcd.setCursor(0, 0); lcd.print("GPS radio clock"); } else { lcd.setCursor(0, 0); lcd.print("Preliminary "); lcd.print(dSec3) ; lcd.print(" "); } lcd.setCursor(6, 1); lcd.print(dSec / 10); lcd.print(dSec % 10); lcd.setCursor(0, 1); lcd.print(dHour / 10); lcd.print(dHour % 10); lcd.print(":"); lcd.print(dMin / 10); lcd.print(dMin % 10); lcd.print(":"); lcd.setCursor(8, 1); lcd.print("(JST)"); lcd.print(char(222)); } void yCnt() { dSec++; if (dSec > 59) { dSec = 0; } if (59 == dSec2) { dRun = -1; dSec = 0; } }
自作の木製CNCというか、合板製のフレームとパーチクルボードのステージで構成した自作CNCを中心に、いろいろ遊んでいます。自作CNCは、「合板製CNC」と名付けました。 旧サイトは、http://blog.seyo.info/diary/ です。製作初期の段階はそちらで。最近は、はんだコテを握って電子工作をしています。 読んでいただいた方からのコメント書き込みができるようになりました。よろしくお願いします。
2014/07/07
GPS redio clock Act.6
スケッチを改良しました。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿