緑の中に

緑の中に
国立天文台

6/10/2023

取出した[時分]の活用(レベル3)

 取出した[時分]の活用(レベル3)







[05:30]にアラームをセットしました。

ここで言うアラームとはRTC-10独自のアラームとは違います。
誤解無いようにお願いします。

時刻5桁(5文字xx:xx)を照合し、現在時刻がアラーム時刻と一致するとLEDを点灯します。点灯時間は1分間です。
分の桁上げが発生するまで点灯は継続することになります。

Arduino Uno には5個のLEDを取付けました。理由はプログラムの実行位置を確認するためです。if文などでは、論理がややこしくなりシーケンスの確認が必要です。
確認方法として他には、シリアルプリント命令を使用して分かりやすい記号を印字する方法を採用しました。

気づいた事をランダムに記します。

・ハード部ですが、RTCの受け端子(Rx)を構築する必要があることです。
 0,1番ピンを使用してはいけません。
  
・C言語の配列・文字・文字列の扱いが要求されました。

・ポインタの使用は避けて通れません。ポインタの威力を実感しました。

・Chat GPTと私のコラボとも考えられます。しかし、相当の修正が余儀なくさ       ました。参考書をめくるより早いです。

・11番ピン(Tx端子)に構築しましたが、ジャンパー(配線)は外しています。
    今のところ未使用です。

#include <stdio.h>

#include <string.h>

#include <SoftwareSerial.h>

SoftwareSerial rtcSerial(10, 11);// RTC-10のTxをArduinoの10番ピン(Rx)に接続し、11番ピン(Tx)を使用して通信する

---------------   -----------------    -------------

if (rtcSerial.available() >= 6) {//if_1   // RTC-10から10バイトのデータが受信可能な場合 6でok

char nowTime[6];// 受信したデータを格納する文字配列 [要素数] 6でok  現在時刻の意味

rtcSerial.readBytes(nowTime, 6);  // データを読み込み、nowTimeに格納する 6でok

 nowTime[6] = '\0';// 文字列の終端を追加する  


 Serial.println(nowTime);// Arduinoのシリアルモニターに受信したデータを表示


 char* firstColon = strchr(nowTime, ':');  // 最初のセミコロン「:」を検索する firstColonが文字型のポインタであることを示し

         //strchrは「ストリング・クラ」と発音します。 

      //nowTime文字列内で最初に見つかったセミコロン(:)のポインタを返す関数です。

   //セミコロンが見つからない場合はNULLポインタを返します。

----------    -----------------   ----------------

char nowTime[6];// 受信したデータを格納する文字配列 [要素数] 6でok  現在時刻の意味

char *p_Ntime;//ポインタ(アドレス値を格納している) ポインタNewTimeの意味

p_Ntime=nowTime;//配列の先頭のアドレス値を格納する

char *p_alarm;//ポインタ(アドレス値を格納している)  ポインタalarmの意味


Serial.println(p_Ntime);//ポインタNewTimeの意味

Serial.println("p_alarm");//ポインタalarmの意味

Serial.print(p_alarm);//シリアルモニタに印字(変数p_alarmの内容)


p_alarm="06:05";//ポインタalarmに04時03分をセット @@@@@@@@@@@@@@@

Serial.println(p_Ntime);//ポインタNewTimeの意味

Serial.println("p_alarm");//ポインタalarmの意味

Serial.print(p_alarm);//シリアルモニタに印字(変数p_alarmの内容)


  if(strncmp(p_alarm,p_Ntime,5)==0){//2つの文字列の比較 5文字

     Serial.println("_Atari◎");//あたり

    digitalWrite(led1, HIGH);  // LEDを点灯させる

  } else{

    Serial.println("_Hazure○");// はずれ

    digitalWrite(led1, LOW);  // LEDを消灯

  }


================

順序はランダムです。ここに出ている命令は意味があります。
その意味で掲載しました。

非常にランダムに不完全な記載です。ご承知ください。勘所の参考にして下さい。
別機会にプログラム(スケッチ)の全容を掲載したいと思います。

RTC-10に着手してから3週間経ちました。