パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Pi3で赤色ドットマトリックスLED8x8ドットを制御してみる

2018-11-14 | Raspberry Pi 2 or 3 or Pico


利用したパーツ
(秋月電子)
ブレッドボード2枚 200円x2
赤色ドットマトリックス8x8ドット(OSL641501-ARA) 200円
ジャンパーワイヤ オスオスセット60本以上 220円
カーボン抵抗1kΩ100本セット 100円

(千石電商)
ジャンパーワイヤ メスメスセット50本 650円



まずOSL641501-ARAを200円のブレッドボード2枚に挿します。



秋月電子でマニュアルを探して

<画像参考>
赤色ドットマトリクスLED 8x8ドット OSL641501-ARA


COLをドットマトリックスパーツの上(画面左)
ROWをドットマトリックスパーツの下(画面右)に番号順に揃えます。
LEDのアノード側(COLの方)には1KΩの抵抗もつけます。

PINの番号はパーツをLED正面(パーツの番号が書いているほうを下)からみて左下から左上まで反時計まわりです。
(こんな感じです。)
16 15 14 13 12 11 10 9


1 2 3 4 5 6 7 8




そしてRaspberry Pi3にそれぞれつなげていきます。


COLを2から右にGPIO 2, 3, 4, 17, 27, 22, 10, 9
LOWを24から右にGPIOの24, 25, 8, 7, 12, 16, 20, 21
に接続してハード側は完成です。(接続先は、わかりやすいと思ってこんな感じにしてます)


プログラムは2本、スクロール、ランダムで適当なキャラクターをつくるものです。
LEDのコントロールはなんか癖があるようで、まだ今ひとつのような気もしています。
あと発色は赤なのですが、スマホのカメラで取るとなぜか輝度をあげている時に黄色になってます。

import RPi.GPIO as GPIO
import time

d=[]
#        123456789012345678901234567890
d+=["000880000000888880000008888800"]
d+=["008080000008000008000080000080"]
d+=["000080000000000008000000000800"]
d+=["000080000000000008000000888000"]
d+=["000080000000000880000000000800"]
d+=["000080000000088000000000000080"]
d+=["000080000000800000000000000080"]
d+=["008888880008888888880088888800"]

f=[]
f+=["113567788888888645423223342111"]
f+=["113566677788888854433335664111"]
f+=["124577766678888875554567775111"]
f+=["124676556788888887752123676211"]
f+=["224542211577888888642354367211"]
f+=["234424523557788887544455667411"]
f+=["234555666777788887777777777511"]
f+=["235677777777778888888888887611"] 


GPIO.setmode(GPIO.BCM)

def pinSet(pin_num,sw):
  if pin_num in [2,3,4,17,27,22,10,9,24,25,8,7,12,16,20,21]:
    if sw==0:
      GPIO.setup(pin_num, GPIO.OUT) 
      GPIO.output(pin_num, GPIO.LOW)
    if sw==1:
      GPIO.setup(pin_num, GPIO.OUT) 
      GPIO.output(pin_num, GPIO.HIGH)

def allLight():
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  for p in high:
    pinSet(p,1)
  for p in low:
    pinSet(p,0)

def allFree():
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  for p in high:
    pinSet(p,0)
  for p in low:
    pinSet(p,0)

def  dataCut(px):
  px=px%len(d[0])
  r=[]
  for i in d:
    r+=[(i+i)[px:px+8].replace("8","1")]
  #print(r)
  return r

def  dataCutB(px):
  px=px%len(d[0])
  r=[]
  for i in f:
    r+=[(i+i)[px:px+8]]
  return r

def patLight(pat,lineTime,times):
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  allFree()
  highDat=[0,0,0,0,0,0,0,0]
  for t in range(times):
    for y in range(8):
      for x in range(8):
        if pat[y][x]=="1":
          if highDat[x]==0:pinSet(high[x], 1)
          highDat[x]=1
        else:
          if highDat[x]==1:pinSet(high[x], 0)
          highDat[x]=0
      pinSet(low[y], 0)     
      time.sleep(lineTime)
      pinSet(low[y], 1)

def patLightRate(pat,lineTime,times):
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  allFree()
  highDat=[0,0,0,0,0,0,0,0]
  for t in range(times):
    for y in range(8):
      for x in range(8):
        if int(pat[y][x])>t:
          if highDat[x]==0:pinSet(high[x], 1)
          highDat[x]=1
        else:
          if highDat[x]==1:pinSet(high[x], 0)
          highDat[x]=0
      pinSet(low[y], 0)     
      time.sleep(lineTime)
      pinSet(low[y], 1)

def main():
  #p1
  allLight()
  time.sleep(1)

  #p2
  pat=["11111111"]+["10000001"]*6+["11111111"]
  patLight(pat,0.001,200)

  #p3 
  pat=(["10101010"]+["01010101"])*4
  patLight(pat,0.001,200)

  #scroll 123
  for i in range(60):
    patLight(dataCut(i),0.001,10)
  patLight(dataCut(0),0.001,100)

  #scroll eye
  for i in range(240):
    for j in range(10):
      patLightRate(dataCutB(i),0.00001,8)

  GPIO.cleanup()                      

main()




import RPi.GPIO as GPIO
import time
import random

GPIO.setmode(GPIO.BCM)

def pinSet(pin_num,sw):
  if pin_num in [2,3,4,17,27,22,10,9,24,25,8,7,12,16,20,21]:
    if sw==0:
      GPIO.setup(pin_num, GPIO.OUT) 
      GPIO.output(pin_num, GPIO.LOW)
    if sw==1:
      GPIO.setup(pin_num, GPIO.OUT) 
      GPIO.output(pin_num, GPIO.HIGH)

def allFree():
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  for p in high:
    pinSet(p,0)
  for p in low:
    pinSet(p,0)

def  dataSet(d):
  r=[]
  for i in d:
    r+=[i+i[::-1]]
  return r

def dataCreate():
  r=[]
  for i in range(8):
    o=""
    for j in range(4):
      o+=str(random.randint(0,4)*2)
    r+=[o]
  return r

def dataCreateB():
  r=[]
  for i in range(8):
    o=""
    for j in range(4):
      o+=str(random.randint(0,1)*8)
    r+=[o]
  return r

def patLightRate(pat,lineTime,times):
  high=[2,3,4,17,27,22,10,9]
  low=[24,25,8,7,12,16,20,21]
  allFree()
  highDat=[0,0,0,0,0,0,0,0]
  for t in range(times):
    for y in range(8):
      for x in range(8):
        if int(pat[y][x])>t:
          if highDat[x]==0:pinSet(high[x], 1)
          highDat[x]=1
        else:
          if highDat[x]==1:pinSet(high[x], 0)
          highDat[x]=0
      pinSet(low[y], 0)     
      time.sleep(lineTime)
      pinSet(low[y], 1)

def main():
  #scroll eye
  for i in range(100):
    d=dataCreateB()
    print(d)
    d=dataSet(d)

    for j in range(20):
      patLightRate(d,0.00001,8)
    
  GPIO.cleanup()                      

main()


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。