#!/usr/bin/perl -w
# -w ワーニングを出す
# データロガーから読み取るプログラム
# 湿度センサーを使った、温湿度データロガー(2010/11/13製作)
# /home/i/datalgr-htm-rs232c-101128-i.cgi mod 755
# 携帯 iモード用
# 2010/11/28 → 2010/12/08 完成
#
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" ; # シリアルポートを入出力可能でオープン
#system("stty </dev/cuad0 cs8 -parenb -cstopb speed 9600") ;
#print "open serial port COM2 ok\n" ;
# ######################### シリアルポートCOM1からデータを取得
#
print COM2 "0\n"; # アナログポート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\n"; # アナログポート2
my $data2 = <COM2>
$data2 =~s/\0\n//; # 後ろ\0\nを除去
print COM2 "3\n"; # アナログポート3
my $data3 = <COM2>
$data3 =~s/\0\n//; # 後ろ\0\nを除去
close COM2 ;
my $chs =0 ; # 湿度センサー (2010/11/28変更)
my $lm35_1 =0 ; # 温度センサー1 (2010/11/28変更)
my $lm35_2 =0 ; # 温度センサー2 (2010/11/28変更)
$chs =$data0/1023*2.495/0.01/2 ; # 湿度センサー (2010/11/28変更)
$lm35_1 =$data2/1023*2.495/0.01/6 ; # 温度センサー1 (2010/11/28変更)
$lm35_2 =$data3/1023*2.495/0.01/6 ; # 温度センサー2 (2010/11/28変更)
my $lm35_m =($lm35_1+$lm35_2)/2 ; # 温度センサーの平均 (2010/11/28変更)
my $chsf = round($chs, 1); # 小数点以下1桁まで求める subroutine 使用
my $lm35_1f = round($lm35_1 , 1); # 小数点以下1桁まで求める subroutine 使用
my $lm35_2f = round($lm35_2 , 1); # 小数点以下1桁まで求める subroutine 使用
my $lm35_mf = round($lm35_m , 1); # 小数点以下1桁まで求める subroutine 使用
# ########################### 時刻とデータの印字(ファイルへの出力)
$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 ;
#close LOGFILE ;
# ########################### ここからHTML出力へ
print "Content-type: text/html\n\n";
print <<EOM;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>計測中の湿度と温度を表示</title>
</head>
<body>
計測中の湿度と温度<br><br>
計測データ<br><br>
$year/$mon/$mday $hour:$min:$sec <br>
$data0 $data2 $data3 <br><br><br>
湿度と温度<br>
<table>
<tr>
<td>湿度センサー(CHS-UGS)</td><br>
<td>$chsf %RH</td><br><br>
</tr>
<tr>
<td>温度センサー1(LM35DZ)</td><br>
<td>$lm35_1f ℃</td><br><br>
</tr>
<tr>
<td>温度センサー2(LM35DZ)</td><br>
<td>$lm35_2f ℃</td><br><br>
</tr>
<tr>
<td>温度センサー平均(LM35DZ)</td><br>
<td>$lm35_mf ℃</td>
</tr>
</table>
<br><br><br>
<a href="/i/onsitsudo-i.html" target="MAIN">温度や湿度の呼び出し画面へ戻る</a><br><br>
</body>
</html>
EOM
# ###################### sub routine ######################
# $num を四捨五入して小数点以下 $decimals桁にする
sub round {
my ($num, $decimals) = @_;
my ($format, $magic);
$format = '%.' . $decimals . 'f';
$magic = ($num > 0) ? 0.5 : -0.5;
sprintf($format, int(($num * (10 ** $decimals)) + $magic) /
(10 ** $decimals));
}