RaspberryPi プッシュスイッチによるON/OFF処理 2014.1.6 shellvalley


# ---------------------------------------------------------------------------



# ---------------------------------------------------------------------------

電源オン:プッシュボタン(赤)オン
@リレー :オン
ALED赤:点灯
BLED青:点灯/消灯の繰り返し(500ms周期)
CRaspberryPi:電源オン
D数十秒後、/etc/init.d/rc.localに書かれた
"shutdown-daemon2.sh"が動き出す
ELED白:消灯->点灯->消灯->点灯->消灯(維持)

F正常動作は以下の状態維持
 LED赤:点灯
 LED青:点灯/消灯の繰り返し(500ms周期)
 LED白:消灯

電源オフ:プッシュボタン(白)5,6秒間オン

@LED白:点灯
ARaspberryPi:"shutdown -h now"処理開始
動作中の"shutdown-daemon2.sh"によりshutdown処理
"/home/pi/pi_shutdown/shutdown-daemon2.sh"
BRaspberryPi:"shutdown-halt.sh"処理開始
"/etc/default/halt"に書かれた
"/home/pi/pi_shutdown/shutdown-halt.sh"がcallされ、
gpio pin-03にlowを出力
CpicマイコンにてポートA3がlowにより数秒後リレーをoffする
RaspberryPi 及び マイコンの電源が切れる


# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# file name "/etc/init.d/rc.local"

#! /bin/sh
### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $remote_fs $syslog $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
if [ -x /etc/rc.local ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)"
/etc/rc.local
ES=$?
[ "$VERBOSE" != no ] && log_end_msg $ES
return $ES
fi
}

case "$1" in
start)
do_start
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
su -c /home/pi/pi_shutdown/shutdown-daemon2.sh &


# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# file name "/etc/default/halt"
# ---------------------------------------------------------------------------

# Default behaviour of shutdown -h / halt. Set to "halt" or "poweroff".
echo "shutdown-halt.sh start!!"
su -c /home/pi/pi_shutdown/shutdown-halt.sh &
HALT=poweroff

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# file name "/home/pi/pi_shutdown/shutdown-daemon2.sh"
# ---------------------------------------------------------------------------

#!/bin/sh

# pin7(GPIO-04)がn秒間high(3.3v)の時、shutdownコマンドを発生させる

GPIO=4 # 使用するGPIOポート #pin7=(GPIO-04)
PUSHTIME=5 # 押す秒数
LED=2 # LED点灯用GPIOポート #pin3=(GPIO-02)

# 初期設定
# pin7をinputモードにし、low設定しておく

echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "low" > /sys/class/gpio/gpio$GPIO/direction

# 立ち上げ確認:LED点灯
# (長時間on/offを繰り返すとフラッシュメモリーに影響する為立ち上げ時のみとする)
echo "$LED" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$LED/direction
echo "1" > /sys/class/gpio/gpio$LED/value
sleep 1
echo "0" > /sys/class/gpio/gpio$LED/value
sleep 1
echo "1" > /sys/class/gpio/gpio$LED/value
sleep 1
echo "0" > /sys/class/gpio/gpio$LED/value
sleep 1
echo "1" > /sys/class/gpio/gpio$LED/value
sleep 1
echo "0" > /sys/class/gpio/gpio$LED/value

#5秒間押されるまで待つ : loop
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
data=`cat /sys/class/gpio/gpio$GPIO/value`
if [ "$data" -eq "1" ] ; then
cnt=`expr $cnt + 1`
else
cnt=0
fi
sleep 1
done

# シャットダウンの実行
shutdown -h now


# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# file name "/home/pi/pi_shutdown/shutdown-halt.sh"
# ---------------------------------------------------------------------------

#!/bin/sh

# /etc/default/halt よりこのシェルがcallされ、GPIO3(pin5)をlowにする
#
GPIO=3 # 使用するGPIOポート #pin5=(GPIO-03) 2014.1.6
#
echo "$GPIO" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio$GPIO/direction
echo "0" > /sys/class/gpio/gpio$GPIO/direction
# ---------------------------------------------------------------------------



/*
*************************************************************************
cpu :12F675
*************************************************************************
*/
#include <12F675.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT //内部4MHzクロック指定
#use delay(clock=4000000)
//=============================================================================
#byte ADCON0=0x1F // A/D制御レジスタ
#byte ANSEL=0x9F // アナログ・セレクト・レジスタ
#byte CMCON=0x19 // コンパレータ・コントロール・レジスタ
#byte VRCON=0x99 // ボルテージ・レファレンス・コントロール・レジスタ

void main(void){
int led03;

ADCON0 = 0; // A/Dコンバータ未使用
CMCON = 7; // コンパレータをデジタルIOポートとして利用する
ANSEL = 0; // 通常のデジタルI/Oとして使用す
VRCON = 0; // デジタルIOポートとして利用する
led03 = 0;

set_tris_a(0x08); //A3を入力に設定
output_a(0x04);
output_high(PIN_A0); // リレーON==>DC Power
output_high(PIN_A1); // Power ON LED 点灯
while(1){
delay_ms(500);
if(input(PIN_A3) == 0){
output_high(PIN_A2); // LED 点灯
delay_ms(4000);
output_low(PIN_A0); // リレーOFF==>DC Power断
sleep();
}
if(led03 == 1){
output_high(PIN_A2); // LED 点灯
led03 = 0;
}
else{
output_low(PIN_A2); // LED 消灯
led03 = 1;
}
}
}
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------