diff --git a/README.md b/README.md index 5eaf45e..68ef8e6 100644 --- a/README.md +++ b/README.md @@ -44,8 +44,6 @@ RTCなどを使用して時刻を維持し、マイコン側で時を刻まな ![](img/IMG_5777.jpeg) ![](img/IMG_5776.jpeg) - - | 基板シルク | 機能 | | ----- | --------------------------------------------------------------------------------------------------------------- | | SEL | L: 40kHz
H: 60kHz | @@ -54,35 +52,24 @@ RTCなどを使用して時刻を維持し、マイコン側で時を刻まな | GND | 基準電位 | | VDD | 1.1~3.3 v | - - 負論理出力でした。JJY信号の波形の立下りが1秒幅になります。 -![](img/wave%20(2).jpeg) +![](D:\Documents\Arduino\libraries\JJYreceiver\img\wave%20(2).jpeg) JJY波形 - - -![](img/wave%20(3).jpeg) +![](D:\Documents\Arduino\libraries\JJYreceiver\img\wave%20(3).jpeg) H +![wave (5).jpeg](D:\Documents\Arduino\libraries\JJYreceiver\img\wave%20(5).jpeg) - -![](img/wave%20(5).jpeg) L - - -![](img/wave%20(6).jpeg) +![wave (6).jpeg](D:\Documents\Arduino\libraries\JJYreceiver\img\wave%20(6).jpeg) P,M - - - - 補足 lgt8f328pを使用する場合は、書き込み時にVccは5Vが出力されます。この受信モジュールは3.6Vが絶対最大定格ですので、書き込み時は受信モジュールを外すか、電圧レギュレーターをライタとの間に設けて保護してください。3.3Vでも書き込めました。 @@ -99,6 +86,8 @@ https://ja.aliexpress.com/item/1005005254051736.html JJYデータの受信を開始します。ピン番号にはJJY受信モジュール出力を接続したマイコンの入力端子番号を設定します。 +マイコンのクロック精度は、100ppmの発振器で2時間で1秒弱程度ずれますので、適宜受信してください。 + ### power(bool) 引数はtrueがモジュール動作状態、falseがモジュール停止状態です。 @@ -127,15 +116,23 @@ JJYデータはLを含むデータが多いので、短めの点灯時間が多 JJY受信モジュールのデータ出力をマイコンの端子変化割り込み対応の端子に接続し、その端子の変化割り込みルーチンで呼び出してください。 + + ### getTime() -時刻を取得します。時刻が受信できていない場合は-1を返します。 +受信時刻を取得します。時刻が受信できていない場合は-1を返します。 + +getTime()が戻り値を返すには最低2つの内部の時刻受信データが一致する必要があります。JJYは1分かけて時刻情報を送信していますので、受信には最低2分かかります。良好な状態で3分程度、ノイズがある環境だと数分~受信不可となります。 delta_tick()が受信後も供給されている場合は、マイコンのクロック精度で刻んで維持している現在時刻が返されます。供給されていない場合は最後に受信した時刻を返します。現在時刻が確定した時点で内部受信動作は停止します。再び受信動作を実行する場合はbegin()を呼び出します。 -getTime()が戻り値を返すには最低2つの内部の時刻受信データが一致する必要があります。JJYは1分かけて時刻情報を送信していますので、受信には最低2分かかります。良好な状態で3分程度、ノイズがある環境だと数分~受信不可となります。 +[Note] v0.2.0より動作を変更 -マイコンのクロック精度は、100ppmの発振器で2時間で1秒弱程度ずれますので、適宜受信してください。 +## get_time() + +現在時刻を取得します。getTime()は受信時刻を指し停止するのに対して、こちらの時刻は受信中か否かにかかわらず常に時を刻んでいます。begin()により受信が成功すると時刻が校正されます。 + +[Note]v0.2.0より追加 ## サンプルスケッチ diff --git a/examples/JJYreceiver.ino b/examples/JJYreceiver.ino index 9ca77d2..e7c4f4a 100644 --- a/examples/JJYreceiver.ino +++ b/examples/JJYreceiver.ino @@ -1,3 +1,5 @@ +#include + #include "lgt_LowPower.h" #include #include @@ -22,11 +24,10 @@ void setup() { // Debug print debugSerial.begin(115200); - // Time for clock ticktock + // 10msec Timer for clock ticktock MsTimer2::set(10, ticktock); MsTimer2::start(); - // JJYReceiver lib setup. digitalWrite(MONITORPIN,HIGH); delay(1000); @@ -51,20 +52,11 @@ void loop() { time_t now = jjy.getTime(); if(now != -1){ String str = String(ctime(&now)); - debugSerial.println(str); // Print current localtime. - - // After time received, it can release Timer and isr routine. - detachInterrupt(digitalPinToInterrupt(DATA)); - - // If RTC used, it can stop Timer after RTC time updated. - // MsTimer2::stop(); + debugSerial.println(str); // Print current date time. }else{ String str = "Receiving:"; debugSerial.print(str); str = String(ctime(&now)); - debugSerial.println(str); // Print current localtime. - } - - - + debugSerial.println(str); + } } diff --git a/library.properties b/library.properties index e56b569..53d68d2 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=JJYReceiver -version=0.1.3 +version=0.2.0 author=BlueCrescent maintainer=BlueCrescent sentence=JJY standard radio signal wave receiver library. diff --git a/src/JJYReceiver.cpp b/src/JJYReceiver.cpp index 146ded4..5d94dcb 100644 --- a/src/JJYReceiver.cpp +++ b/src/JJYReceiver.cpp @@ -22,12 +22,13 @@ JJYReceiver::~JJYReceiver(){ } JJYReceiver::clock_tick(){ + globaltime = globaltime + 1; + if(state == TIMEVALID) return; for(uint8_t index = 0; index < VERIFYLOOP; index++){ localtime[index] = localtime[index] + 1; } } - int JJYReceiver::distance(uint8_t* arr1, uint8_t* arr2, int size) { int hammingDistance = 0; uint8_t temp; @@ -73,20 +74,23 @@ time_t JJYReceiver::getTime() { time_t diff3 = labs(localtime[2] - localtime[0]); if( diff1 < 2){ state = TIMEVALID; + digitalWrite(ponpin,HIGH); + //power(false); globaltime = localtime[1]; return globaltime; }else if(diff2 < 2){ state = TIMEVALID; + digitalWrite(ponpin,HIGH); + //power(false); globaltime = localtime[2]; return globaltime; }else if(diff3 < 2){ state = TIMEVALID; + digitalWrite(ponpin,HIGH); + //power(false); globaltime = localtime[0]; return globaltime; } - if(state == TIMEVALID) - power(false); - return; //DEBUG_PRINT(diff1); //DEBUG_PRINT(" "); //DEBUG_PRINT(diff2); @@ -94,6 +98,9 @@ time_t JJYReceiver::getTime() { //DEBUG_PRINTLN(diff3); return -1; } +time_t JJYReceiver::get_time() { + return globaltime; +} JJYReceiver::delta_tick(){ uint8_t data = digitalRead(datapin)==HIGH ? 1 : 0; @@ -209,12 +216,13 @@ JJYReceiver::power(){ return (digitalRead(ponpin) == LOW) ? true : false; } JJYReceiver::power(bool power){ + if(ponpin == -1) return true; if(power == true){ - if(ponpin != -1) digitalWrite(ponpin,LOW); + digitalWrite(ponpin,LOW); delay(300); return true; }else{ - if(ponpin != -1) digitalWrite(ponpin,HIGH); + digitalWrite(ponpin,HIGH); return false; } } diff --git a/src/JJYReceiver.h b/src/JJYReceiver.h index d540da9..c785d1e 100644 --- a/src/JJYReceiver.h +++ b/src/JJYReceiver.h @@ -57,7 +57,7 @@ class JJYReceiver { volatile uint8_t rcvcnt = 0; volatile enum STATE state = INIT; volatile unsigned long risingtime[2], fallingtime[2]; - int datapin,ponpin,selpin; + uint8_t datapin,ponpin = -1 ,selpin = -1; // int agcpin; volatile uint8_t markercount = 0; @@ -75,7 +75,7 @@ class JJYReceiver { volatile uint8_t CONST_H [N] = {0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; volatile uint8_t CONST_L [N] = {0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - int monitorpin = -1; + uint8_t monitorpin = -1; volatile time_t localtime[3] = {-100,-200,-300}; volatile time_t globaltime; volatile struct tm timeinfo; @@ -109,6 +109,7 @@ class JJYReceiver { int max_of_three(uint8_t a, uint8_t b, uint8_t c); bool calculateParity(uint8_t value, uint8_t bitLength, uint8_t expectedParity); time_t getTime(); + time_t get_time(); #ifdef DEBUG_BUILD int debug(); int debug2();