Я работаю над проектом, в котором я подключаю роторный кодировщик и MCP4725 da c к своему Raspberry Pi 3. Я принимаю значение поворотного энкодера в качестве события прерывания и помещаю это значение в свой da c в основную функцию, где две разные программы работают должным образом, но я не смог правильно использовать их в одной программе. Так как я совершенно новичок как в python, так и в малине, я не могу найти способ преодолеть проблему. На данный момент я могу поставить значение моего поворотного энкодера прямо на мой DAC4725. Вот мой код
from RPi import GPIO
from time import sleep
import math
import Adafruit_MCP4725
dac=Adafruit_MCP4725.MCP4725(address=0x61)
a=22
b=23
GPIO.setmode(GPIO.BCM)
GPIO.setup(a,GPIO.IN)
GPIO.setup(b,GPIO.IN)
clkLastState=GPIO.input(a)
def my_callback(channel):
global clkLastState
global counter
clkState=GPIO.input(a)
if clkState != clkLastState:
dtState=GPIO.input(b)
if dtState != clkState:
counter +=1
else:
counter -=1
text=str(counter/2) #as i take one rotation is 1000(my encoder
give me 2000)
print (text[0:-2])
clkLastState=clkState
counter=0
clkLastState=GPIO.input(a)
def main():
global counter
try:
# GPIO.add_event_detect(23,GPIO.BOTH,callback=my_callback)
while (1):
print(counter/2)
dac.set_voltage(int(counter/2))
vlt=int(counter/2)/4096*5.0
print(vlt)
sleep(1)
except KeyboardInterrupt:
print("end it")
GPIO.cleanup()
GPIO.add_event_detect(23,GPIO.BOTH,callback=my_callback)
#input("enter anything")
if __name__=='__main__':
# input("do")
main()
В соответствии с моим приложением main должно работать всегда, и когда когда-либо изменяется значение энкодера, оно должно обнаруживать и передавать это значение основной функции, где моя основная функция помещает это значение в da * 1008. * с линейным изменением, т. е. если значение датчика равно 1000, то для l oop следует увеличить его до 1000 и установить значение da c, опять же, если оно равно 1200, то снова оно должно увеличиться до 1200.