前提・実現したいこと
パイソン3で並行処理を利用して2つの関数を定義して使っていますが、片方はarduinoを利用して可変抵抗の値をデジタルの0~1023で読み取っています。
もう片方のプログラムでその値を読み取りながら利用してモーターコントローラの制御に使用してモーターの回転速度を変えるためDuty比が可変になるようにしたいです。
どうかお助け願います。よろしくお願いいたします。
発生している問題・エラーメッセージ
2つの関数の間で変数の共有をすればいいのではと考えてmultiprocessingで共有メモリーのValueクラスを用いてみましたがうまいこと共有できません。エラーメッセージは以下のものです。
Traceback (most recent call last): File "/home/pi/並行処理(multiprocessing).py", line 45, in <module> Process(target = A()), File "/home/pi/並行処理(multiprocessing).py", line 16, in A shared_count.value = (int(line.strip().decode('utf-8'))) NameError: name 'shared_count' is not defined
該当のソースコード
python3.5.3
1import serial 2from multiprocessing import Pool, Value, Process 3import RPi.GPIO as GPIO 4import sys 5import time 6 7GPIO.setmode(GPIO.BCM) 8GPIO.setup(14, GPIO.OUT) 9GPIO.setup(15, GPIO.OUT) 10GPIO.setup(18, GPIO.OUT) 11 12 13def A(): 14 ser = serial.Serial('/dev/ttyACM0', 9600, timeout = None) 15 line = ser.readline() 16 shared_count.value = (int(line.strip().decode('utf-8'))) 17 MAX_TIME = 50 18 st = time.time() 19 while True: 20 print(int(line.strip().decode('utf-8'))) 21 time.sleep(0.01) 22 if (time.time() - st) > MAX_TIME: 23 sys.exit() 24 25 26def B(): 27 p = GPIO.PWM(18, 1) 28 Hz = 700 29 p.ChangeFrequency(Hz) 30 duty = 0.0 31 p.start(duty) 32 while True: 33 global shared_count, shared_value 34 shared_count = count 35 shared_value = value 36 duty = (count / 10) % 101 37 p.ChangeDutyCycle(duty) 38 time.sleep(0.1) 39 GPIO.output(14, True) 40 GPIO.output(15, False) 41 42 43 44jobs = [ 45 Process(target = A()), 46 Process(target = B()) 47 ] 48 49for j in jobs: 50 j.start() 51 52for j in join: 53 j.join() 54 55 56 57 58 59 60 61 62 63
試したこと
プログラミングにまったく知識がない状態なので試したことは文の上下を入れ替えたり程度です・・・
補足情報(FW/ツールのバージョンなど)
ツールは
Arduino Uno
Raspberry3
モータードライバはTOSHIBA TA7291Pです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/30 07:18