并行打印机GPIO

时间:2016-07-18 13:48:51

标签: python raspberry-pi gpio

import RPi.GPIO as GPIO
from time import sleep
import binascii
from thread import start_new_thread
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
D0=18
D1=23
D2=24
D3=25
D4=12
D5=16
D6=20
D7=21
STR=13
ACK=5
BUSY=6
GPIO.setup(D0, GPIO.IN) #D0
GPIO.setup(D1, GPIO.IN) #D1
GPIO.setup(D2, GPIO.IN) #D2
GPIO.setup(D3, GPIO.IN) #D3
GPIO.setup(D4, GPIO.IN) #D4
GPIO.setup(D5, GPIO.IN) #D5
GPIO.setup(D6, GPIO.IN) #D6
GPIO.setup(D7, GPIO.IN) #D7
GPIO.setup(STR, GPIO.IN) #STROBE
GPIO.setup(ACK, GPIO.OUT) #ACKN
GPIO.setup(BUSY, GPIO.OUT) #BUSY
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #TEST
global D0_value
global D1_value
global D2_value
global D3_value
global D4_value
global D5_value
global D6_value
global D7_value
global data1
a=1
output=""
b=1
pin_list= [21,20,16,12,25,24,23,18]
GPIO.output(ACK, 1)
def bin2ascii(output):
        global b
        global bin
        global ascii
        bin=filter(str.isdigit, repr(output))
        ascii="".join(("0b", bin))
        n=int(ascii,2)
        print(binascii.unhexlify('%x' % n))
        GPIO.output(BUSY, 0)
        GPIO.output(ACK, 1)
def waitforstrobe(callback):
        global output
        GPIO.output(BUSY, 1)     
        GPIO.output(ACK, 0)
        data1=[GPIO.input(x) for x in pin_list]
        if not output:
                output=data1
        else:
                output+=data1
        GPIO.output(ACK, 1)
        start_new_thread(bin2ascii,(output,))
GPIO.add_event_detect(STR, GPIO.FALLING, callback=waitforstrobe, bouncetime=10)
print("Waiting for printsignal...")
GPIO.output(BUSY, 0)
嘿大家, 我是rasbian编程新手。

我想对pi 3进行编程,以便pi显示打印机数据。

我使用电平转换器将所有数据线,选通确认和忙线焊接到GPIO。

我的问题是程序只显示从数据行解码的错误的ascii Charakters。

我觉得读取和解码过程会变慢,因此并非所有二进制数据都被捕获。

你有什么想法,所以编程更好吗?

STR输入从P​​C设置为可以读取数据的信号。 忙碌的是忙碌的时候。 ACK(确认)在未准备好读取下一个8位时设置为低电平,在准备好下一个数据集时设置为高电平。

非常感谢您的帮助!

0 个答案:

没有答案