PWM(外部LED)
led = PWM.new(16)
led.frequency( 440 )
while true
led1.duty(80)
sleep 1
led1.duty(40)
sleep 1
led1.duty(20)
sleep 1
end
圧電ブザー
http://wiki.seeedstudio.com/Grove-Buzzer/
buzzer = PWM.new(15)
while true
buzzer.frequency(261)
sleep 1
buzzer.frequency(294)
sleep 1
buzzer.frequency(330)
sleep 1
buzzer.frequency(349)
sleep 1
buzzer.frequency(392)
sleep 1
buzzer.frequency(440)
sleep 1
buzzer.frequency(494)
sleep 1
end
簡易mml再生
TBL_FREQ = [262, 294, 330, 349, 392, 440, 494,
523, 587, 659, 698, 784, 880, 988]
TBL_LENGTH = {1=>2000, 2=>1000, 4=>500, 8=>250}
PWM.new()
buzzer = PWM.new(15)
def tone( freq )
if freq == 0
buzzer.frequency(0)
return
end
buzzer.frequency(freq)
end
def play( mml )
mnote = nil
mlength = 4
octabe = 0
mml.each_char {|ch|
# 音階指示か?
if "CDEFGABR".index(ch)
play_sub( mnote, octabe, mlength )
mnote = ch
next
end
# 音長か?
if TBL_LENGTH[ch.to_i]
mlength = ch.to_i
next
end
# オクターブ上下か?
if ch == "<" || ch == ">"
play_sub( mnote, octabe, mlength )
if ch == "<"
octabe += 1
else
octabe -= 1
end
mnote = nil
next
end
}
play_sub( mnote, octabe, mlength )
end
def play_sub( mnote, octabe, mlength )
if !mnote
return
end
if mnote == "R"
sleep_ms( TBL_LENGTH[mlength] || 1 )
return
end
idx = "CDEFGAB".index(mnote)
if idx
idx = octabe * 7 + idx
if TBL_FREQ[idx]
tone( TBL_FREQ[idx] )
#display( idx )
sleep_ms( TBL_LENGTH[mlength] || 1 )
tone( 0 )
end
return
end
end
mml3 = "<C8DE4>C8DE4<C8DE4>C8DE4<C8DE4>C8DE4<E8FG4EDC A8AAFDDEFGGGEC4R8 EF4>A<C8>BAB<C2"
play mml3
SG90(サーボモータ)
http://akizukidenshi.com/catalog/g/gM-08761/
servo = PWM.new(15)
servo.frequency(50)
while true
servo.duty(2.5)
sleep 1
servo.duty(7.25)
sleep 1
servo.duty(12)
sleep 1
end