Class: TrafficLightPiServer

Inherits:
Sinatra::Base
  • Object
show all
Defined in:
lib/traffic_light_pi_server.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.init_lightsObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/traffic_light_pi_server.rb', line 8

def self.init_lights
  unless defined? @@mp3player
    @@mp3player = "mpg123"
  end

  unless defined? @@sound_dir
    @@sound_dir = "#{File.dirname(__FILE__)}/sounds"
  end

  @@pi_enabled = nil
  if RUBY_PLATFORM == 'arm-linux-eabihf'
    @@io = WiringPi::GPIO.new
    @@pi_enabled = true
  end

  @@lines = Hash.new
  @@line_map.each_key do |line|
    @@lines[line] = Hash.new
    @@line_map[line].each_key do |light|
      if @@pi_enabled
        pin = get_pin(line, light)
        @@io.mode(pin, OUTPUT)
        @@lines[line][light] = @@io.read(pin)
      else
        @@lines[line][light] = 0
      end
    end
  end
end

Instance Method Details

#get_pin(line, light) ⇒ Object



105
106
107
# File 'lib/traffic_light_pi_server.rb', line 105

def get_pin(line, light)
  @@line_map[line][light]
end

#reset_line(line) ⇒ Object



120
121
122
123
124
125
# File 'lib/traffic_light_pi_server.rb', line 120

def reset_line(line)
  @@line_map[line].each do |light, pin|
    write_light(line, light, 0)
  end
  write_light(line, :green, 1)
end

#write_light(line, light, state) ⇒ Object



109
110
111
112
113
114
115
116
117
118
# File 'lib/traffic_light_pi_server.rb', line 109

def write_light(line, light, state)
  pin = get_pin(line, light)
  if @@pi_enabled
    @@io.write(pin, state)
    state = @@lines[line][light] = @@io.read(pin)
  else
    @@lines[line][light] = state
  end
  "#{pin}:#{state}"
end