トップ «前の日記(2014-04-11(Fri)) 最新 次の日記(2014-04-15(Tue))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2014-04-14(Mon) よく晴れてよく飛散

3本のGPIOに6個のLEDようやく制御

できるようになった。
例によってPython-2.7.3。

点灯/消灯を定義した関数(six_leds_on_off.py)
led[0]をIN, [1]をLOW, [2]をHIGHにする。

import time
import RPi.GPIO as GPIO
 
leds = [[28, 29, 30], 
        [28, 30, 29],
        [29, 28, 30], 
        [29, 30, 28],
        [30, 29, 28], 
        [30, 28, 29]]
 
def led_on(port):
  in_port, out_port, l_port = leds[port]
  GPIO.setup(in_port, GPIO.IN)
  GPIO.setup(out_port, GPIO.OUT)
  GPIO.setup(l_port, GPIO.OUT)
  GPIO.output(l_port,GPIO.HIGH)
 
def led_off(port):
  in_port, out_port, l_port = leds[port]
  GPIO.output(l_port,GPIO.LOW)

で、順繰りに点灯させる例。
とりあえず、最初の引数で点灯/消灯時間、 次の引数で繰り返し回数。
指定がなければ0.1秒、3回。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from sys import argv
import time
import RPi.GPIO as GPIO
from six_led_on_off import led_on
from six_led_on_off import led_off
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
 
try:
  ltime = float(argv[1])
  repeat_time = int(argv[2])
except:
  ltime = 0.1
  repeat_time = 3
 
for i in range(repeat_time):
  for led in range(6):
    led_on(led)
    time.sleep(ltime)
    led_off(led)
 
GPIO.cleanup()

点灯/消灯時間を0.002秒以下にすると、全部が点灯している ように見えた。

オーバーヘッド?

6個のLEDの点滅繰り返しの合計時間は、丁度1分になるはず。

$ time sudo python circle.py 1 10          
 
real    1m0.356s
user    0m0.200s
sys     0m0.070s
 
$ time sudo python circle.py 0.1 100       
 
real    1m0.487s
user    0m0.320s
sys     0m0.090s
 
$ time sudo python circle.py 0.01 1000     
 
real    1m1.750s
user    0m1.110s
sys     0m0.300s
 
$ time sudo python circle.py 0.001 10000   
 
real    1m13.671s
user    0m8.390s
sys     0m2.070s
 
$ time sudo python circle.py 0.0001 100000
 
real    3m7.781s
user    1m21.170s
sys     0m16.640s

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。