#!/usr/bin/perl -w
# -w ワーニングを出す
# データロガーから読み取るプログラム
# 湿度センサーを使った、温湿度データロガー(2010/11/13製作)
#
# 2015/11/28 xs36v4 ubuntu 用に修正
# /home/datalgr/datalgr-htm-rs232c-151128-cron.pl mod 755
# /dev/cuau0 ---> /dev/ttyS0
#
# /home/datalgr/datalgr-htm-rs232c-11109-cron.pl mod 755
# crontab用のperl
# 一部修正し、データを10回採り、平均することとした
# 2010/11/28 → 2010/12/10 完成
# 2011/11/05 flora T5500用にディバイス名を変更 cuad0 → cuau0
# 2011/11/05 エラーが出る。数値の合計がうまくとれない???
# 2011/11/08 freebsdのバージョンが8になって、
# シリアルドライバーがsioからuartに変更になった。
# uartはカノニカルモード(canonical mode)になるようだ。
# 根本的な解決はわからないが、当面、非カノニカルモード
# にすれば対応可能とのこと。
# open 文のあとにエコーバックをやめる次の一文を追加した。
# system( "stty -f /dev/cuau0 -echo" ) ;
# 2011/11/09 完成 デバッグ用のいらない文を削除やコメントアウト
#
use strict; # 宣言した変数以外を使えなくする
$| = 1; # ゼロ以外が代入されると出力をバッファリングしなくなる。
my $file="/home/datalgr/log-data.txt";
my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;
my $wday;
my $yday;
my $isdst;
my $tt;
my $null="";
# 読み込み書き込みファイルオープン
# 読み取り 書き込み 追加 新規作成 上書き
# < filename ○ × × × ×
# > filename × ○ × ○ ○
# >> filename × ○ ○ ○ ×
# +< filename ○ ○ × × ×
# +> filename ○ ○ × ○ ○
# +>> filename ○ ○ ○ ○ ×
#open (COM2, "+</dev/cuad0") or die "ERROR /dev/cuad0 not open\n" ; # シリアルポートを入出力可能でオープン
#open (COM2, "+</dev/cuau0") or die "ERROR /dev/cuau0 not open\n" ; # シリアルポートを入出力可能でオープン
open (COM2, "+</dev/ttyS0") or die "ERROR /dev/ttyS0 not open\n" ; # シリアルポートを入出力可能でオープン
#system( "stty -f /dev/cuau0 -echo" ) ; # 2011/11/8 非カノニカルモードにする
system( "stty -F /dev/ttyS0 -echo" ) ; # 2015/11/28 非カノニカルモードにする
#print "open serial port COM2 ok\n" ;
# ######################### シリアルポートCOM2からデータを取得 ダミーです
#
print COM2 "0"; # アナログポート0
my $data0 = <COM2>;
#$data0 =~s/\0\n//; # 後ろ\0\nを除去
#print COM2 "1\n"; # アナログポート1 # Vrefに使用するためアナログポート使用不可(2010/11/28変更)
#my $data1 = <COM2>; # Vrefに使用するためアナログポート使用不可(2010/11/28変更)
#$data1 =~s/\0\n//; # 後ろ\0\nを除去 # Vrefに使用するためアナログポート使用不可(2010/11/28変更)
print COM2 "2"; # アナログポート2
my $data2 = <COM2>;
#$data2 =~s/\0\n//; # 後ろ\0\nを除去
print COM2 "3"; # アナログポート3
my $data3 = <COM2>;
#print "data3=" , $data3 ; # debug
#$data3 =~s/\0\n//; # 後ろ\0\nを除去しない
my $i; # カウンター用
my $data1 ; # 受信データの処理用
$data0 = 0 ; # ゼロクリアー
$data2 = 0 ; # ゼロクリアー
$data3 = 0 ; # ゼロクリアー
for ($i = 1; $i <= 10; $i++) { ; # 10回データー計測し合計をとる *************************************
print COM2 "0\n"; # アナログポート0
$data1 = <COM2>;
#print "data1=" , $data1 ;
$data1 =~s/\0\n//; # 後ろ\0\nを除去
$data0 = $data0 + $data1;
print COM2 "2\n"; # アナログポート2
$data1 = <COM2>;
#print "data2=" , $data1 ;
$data1 =~s/\0\n//; # 後ろ\0\nを除去
$data2 = $data2 + $data1;
print COM2 "3\n"; # アナログポート3
$data1 = <COM2>;
#print "data3=" , $data1 ;
$data1 =~s/\0\n//; # 後ろ\0\nを除去
$data3 = $data3 + $data1;
} ; # 10回修了
$data0 = $data0 / 10 ; # 10回の平均を取る
$data2 = $data2 / 10 ; # 10回の平均を取る
$data3 = $data3 / 10 ; # 10回の平均を取る
close COM2 ;
# ########################### 時刻とデータの印字(ファイルへの出力)
$tt=time();
($sec, $min, $hour, $mday, $mon, $year,
$wday, $yday, $isdst) = localtime($tt);
$year=$year+1900;
$mon=$mon+1;
# ファイルへの出力
open (LOGFILE,">>$file") or die "ERROR output file not open$!\n" ; # 出力ファイルをオープン
print LOGFILE $year,"/",$mon,"/",$mday," ",$hour,":",$min,":",$sec," ",$data0," ",$data2," ",$data3,"\n" ;
close LOGFILE ;