

A TxD:UARTの送信
左が実態配線図です、
---------------------------------------------------------------------
// NJR4265 J1 移動体検知センサモジュールのテスト
// Arduino Zero Pro での実験スケッチです。
// Arduinoは起動後、USART受信モードに入りコマンドを受信したらその内容に応じて処理する。
// センサーは起動後、初期化処理が終えたら"起動通知コマンド "を送って来るので、
// それを受けたら"閾値の設定コマンド"で接近/離反の閾値設定を行う。
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define ApproachLEDpin 7 // 接近用LEDピン
#define LeaveLEDpin 8 // 離反用LEDピン
// 変数の定義
char ReceiveData[12] ; // 通信コマンドの受信バッファ
int ReceiveDataNum ; // 通信コマンドの文字列長さ兼受信フラグ変数
union pari_t {
uint8_t dt ;
struct {
unsigned b0 :1;
unsigned b1 :1;
unsigned b2 :1;
unsigned b3 :1;
unsigned b4 :1;
unsigned b5 :1;
unsigned b6 :1;
unsigned b7 :1;
} ;
} ;
/*******************************************************************************
* 電源起動時とリセットの時だけのみ処理される関数(初期化と設定処理) *
*******************************************************************************/
void setup()
{
pinMode(ApproachLEDpin, OUTPUT); // 接近用LEDピンを出力に設定
pinMode(LeaveLEDpin, OUTPUT); // 離反用LEDピンを出力に設定
// シリアルモニターの設定
// (RX=0 TX=1 BaudRate=9600bps Data=8bit Parity=odd Stop=1bit Flow=none)
Serial.begin(9600,SERIAL_8O1) ;
ReceiveDataNum = -1 ;
}
/*******************************************************************************
* 繰り返し実行される処理の関数(メインの処理) *
*******************************************************************************/
void loop()
{
int ans ;
// 通信コマンドの受信
ans = NJR_Receive() ;
if (ans != -1) {
// 受信した通信コマンドに対する各処理
NJR_PrcCommands(ans) ;
}
}
// 受信した通信コマンドに対して処理を行う
// num:受信コマンドの文字長さ
void NJR_PrcCommands(int num)
{
switch(ReceiveData[1]) {
case 'W':// 起動完了
digitalWrite(ApproachLEDpin, HIGH) ;
digitalWrite(LeaveLEDpin, HIGH) ;
delay(2000) ;
digitalWrite(ApproachLEDpin, LOW) ;
digitalWrite(LeaveLEDpin, LOW) ;
// 閾値の設定を行う(接近=5m/離反=5m)
NJR_SetThreshold(500,500) ;
break ;
case 'C':// 移動物が接近
digitalWrite(ApproachLEDpin, HIGH) ;
break ;
case 'L':// 移動物が離反
digitalWrite(LeaveLEDpin, HIGH) ;
break ;
case 'N':// 移動物が無い
digitalWrite(ApproachLEDpin, LOW) ;
digitalWrite(LeaveLEDpin, LOW) ;
break ;
case 'E':// エラー
break ;
}
}
// 接近/離反時の閾値を設定する処理
// sp:接近時の閾値を指定(0-999cm)
// sm:離反時の閾値を指定(0-999cm)
void NJR_SetThreshold(int sp,int sm)
{
char buf[8] ;
// 接近時の閾値を送信する
sprintf(buf,"@SP%d\r\n",sp) ;
Serial.print(buf) ;
// 離反時の閾値を送信する
sprintf(buf,"@SM%d\r\n",sm) ;
Serial.print(buf) ;
}
// 通信コマンドを受信する処理
// 受信したコマンドの文字長さを返す(CR/LFも含む)、未受信なら−1を返す。
// 受信したコマンドの文字はReceiveDataバッファに格納する。
int NJR_Receive()
{
int ans , ret ;
char dt ;
ret = -1 ;
while(1) {
// 受信データが有るなら処理を行う
ans = Serial.available() ;
if (ans > 0) {
// 1バイト読み出す
dt = Serial.read() ;
// 通信コマンドの開始
if (dt == '@') ReceiveDataNum = 0 ;
if (ReceiveDataNum >= 0) {
// 通信コマンドをバッファに溜める
ReceiveData[ReceiveDataNum] = dt ;
ReceiveDataNum++ ;
// 通信コマンドの最後(CR/LF)
if (dt == '\n' && ReceiveData[ReceiveDataNum-2] == '\r') {
ret = ReceiveDataNum ;
ReceiveDataNum = -1 ;
break ;
}
}
} else break ;
}
return ret ;
}
---------------------------------------------------------------------
起動させると、センサーモジュールからの受信待ちになります。

【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.