не удалось создать правильную логику c для поворотного датчика и приложения DAC4725 - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над проектом, в котором я подключаю роторный кодировщик и 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.

...