<Raspberry Pi-24> LCD(AQM0802A)に時刻を表示させたいと思います。 尚、<Raspberry Pi-23>を参照してソフト関連の作業を行っておいてください。 <知っておきたいこと> ターミナルからdateを打ち込むと画像のように表示します。 LCD(AQM0802A)は8文字/1行ですので1行目に16/02/11、2行目に15:00:06のように したいと思います。 上の画像から分かるように、ターミナルからdate +"%y/%m/%d"を打ち込んで 次にdate +"%H:%M:%S"を打ち込めばOKです。 しかし、いちいちターミナルから打ち込むのは大変です。 そこでこの操作を自動で行うためのプログラムをします。 下の画像のようにnanoエディターでtokei.sh名のファイルを作ります 下の画像がプログラムの内容 ここでバックスラッシュ"`"は@マークキーです(Shift+@) ---------------------------------------- #!/bin/sh while [ true ] do ymd=`date +"%y/%m/%d"` hms=`date +"%H:%M:%S"` echo $ymd echo $hms sleep 1 done ---------------------------------------- 次にchmod 755 jikoku.shと打ち込んでアクセス権を変更する そして./jikoku.shと打ち込むと日付と時刻が表示。停止はCTRL+C 次に下をtokeilcd.shの名前で作り実行して見てください。 ---------------------------------------------------------------------- #!/bin/sh ymd="49 54 47 48 50 47 49 49" hms="49 53 58 50 49 58 49 49" i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0C 0x01 i #LCD初期化 i2cset -y 1 0x3e 0x40 $ymd i #LCD1行目データ表示 i2cset -y 1 0x3e 0x00 0xC0 b #LCD2行目先頭に移動 i2cset -y 1 0x3e 0x40 $hms i #LCD2行目データ表示 ---------------------------------------------------------------------- ymd="49 54 47 48 50 47 49 49"は、16/02/11 のアスキーコード(10進数)です。 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 6 / 0 2 / 1 1 hms="49 53 58 50 49 58 49 49"は、15:21:11 のアスキーコード(10進数)です。 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 1 5 : 2 1 : 1 1 この画像のように表示出来たと思います。 これでは時間がカウントしないので1秒毎にカウントするようにプログラムを 作成します。 下のような4ステップイメージでプログラムします。 ←←←←←←←←←←←←←←←←←←←←← ↓ ↑ --------------------------- ↑ I ymd=`date +"%y/%m/%d"` I ↑ I hms=`date +"%H:%M:%S"` I ↑ --------------------------- ↑ ↓ ↑ ------------------------------------------ ↑ I ymd、hmsをアスキーコード(10進数)に変換 I ↑ ------------------------------------------ ↑ ↓ ↑ ------------------------------------------------------------------------ ↑ I i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0C 0x01 i I ↑ I i2cset -y 1 0x3e 0x40 $ymd i I ↑ I i2cset -y 1 0x3e 0x00 0xC0 b I ↑ I i2cset -y 1 0x3e 0x40 $hms i I ↑ ------------------------------------------------------------------------ ↑ ↓ ↑ ----------- ↑ I 0.1秒毎 I ↑ ----------- ↑ ↓ ↑ →→→→→→→→→→→→→→→→→→→→→ 下のプログラムをtokeidsp.shなど適当なファイル名で作成して chmod 755 tokeidsp.shでアクセス権を変更後./tokeidsp.shで実行 -------------------------------------------------------------------------------------------------------------- #!/bin/sh i2cset -y 1 0x3e 0x00 0x38 0x39 0x14 0x70 0x56 0x6c 0x38 0x0C 0x01 i #LCD初期化 #関数 文字→10進に変換 moji_conv() { cnt=0 #cntが$mojisu以上になるまで while [ $cnt -lt $mojisu ] do cnt=$(( cnt + 1 )) #cntをインクリメント lcddsp=`echo $allmoji | cut -c $cnt` #$lcmoji列の$cnt番目の文字をlcddspに入れる lcdmoji_dec=$(printf "%d" \'$lcddsp) #その$lcddspを10進に変換 lcdgyo=$lcdgyo$lcdmoji_dec" " #その$lcddspに" "を連結してlcdgyoに入れる done } #関数 文字表示 lcd_dsp() { i2cset -y 1 0x3e 0x40 $ymd i #LCD1行目データ表示 i2cset -y 1 0x3e 0x00 0xC0 b #LCD2行目先頭に移動 i2cset -y 1 0x3e 0x40 $hms i #LCD2行目データ表示 } mojisu=8 #LCD1行が8文字 while [ true ] do #------LCD 1行目データ---------------- lcdgyo="" #lcdgyoをクリア allmoji=`date +"%y/%m/%d"` #西暦下2桁と月、日をallmojiに入れる moji_conv #関数呼出 文字→10進に変換 ymd=$lcdgyo #変換した文字列ををymdに入れる #------1行目データ-------------------- #------LCD 2行目データ---------------- lcdgyo="" #lcdgyoをクリア allmoji=`date +"%H:%M:%S"` #時、分、秒をallmojiに入れる moji_conv #関数呼出 文字→10進に変換 hms=$lcdgyo #変換した文字列をhmsに入れる #------2行目データ-------------------- lcd_dsp #関数呼出 文字表示 sleep 0.1 #0.1秒毎に時刻の表示 done -------------------------------------------------------------------------------------------------------------- 下の画像をクリックしてください。 Raspberry Pi-25に続く・・・ Raspberry メニューに戻る