Last active
January 13, 2019 06:55
-
-
Save Coro365/31915948f295c0868778e81d8d4eea73 to your computer and use it in GitHub Desktop.
Control air purifier by servo motor (Panasonic F-VX501)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def initialize_state | |
$mode_state_file = "#{__dir__}/mode_state_file" | |
$power_state_file = "#{__dir__}/power_state_file" | |
update_mode_state(1) unless FileTest.exist?($mode_state_file) | |
update_power_state(1) unless FileTest.exist?($power_state_file) | |
$mode_state = File.read($mode_state_file).to_i | |
$power_state = File.read($power_state_file).to_i | |
$mode_name = ["low", "mid", "high", "auto"] | |
end | |
def change_air_flow(target_mode) | |
n = target_mode - $mode_state | |
n = n + $mode_name.size if n.negative? | |
puts "#{$mode_name[$mode_state]} => #{$mode_name[target_mode]}" | |
puts n | |
mode_push(n) | |
update_mode_state(target_mode) | |
end | |
def power_change(t) | |
power_push unless $power_state == t | |
update_power_state(t) | |
end | |
def mode_push(n) | |
n.times do | |
puts "mode push!" | |
left_turn | |
sleep 1 | |
init_position | |
sleep 1 | |
end | |
end | |
def power_push | |
puts "power push!" | |
right_turn | |
sleep 1 | |
init_position | |
sleep 1 | |
end | |
def update_mode_state(state) | |
File.open($mode_state_file,"w") {|f|f.print state } | |
end | |
def update_power_state(state) | |
File.open($power_state_file,"w") {|f|f.print state } | |
end | |
def right_turn | |
`echo 0=70% > /dev/servoblaster` | |
end | |
def left_turn | |
`echo 0=35% > /dev/servoblaster` | |
end | |
def init_position | |
`echo 0=50% > /dev/servoblaster` | |
end | |
function = ARGV[0] | |
target = ARGV[1] | |
initialize_state | |
unless target.match(/[0123]/) | |
puts "ERROR: target number is 0-3" | |
exit | |
end | |
target = target.to_i | |
if function == "power" | |
power_change(target) | |
elsif function == "mode" | |
power_change(1) if $power_state == 0 | |
change_air_flow(target) | |
else | |
puts "ERROR: function is power or mdoe" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment