ようこそNICのホームページへ(なが〜い試運転中 from 2004年)
  • @nifty atnifty-ddns ddo.jp dip.jp   HP パソコン 健康 落語 海外 思うまま 電子工作

  • Last update:2018/04/21    Build:2018/04/21
  •  
    #!/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 ;
    

    電子工作へ     HomePage     このページのトップ