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输入从PC设置为可以读取数据的信号。 忙碌的是忙碌的时候。 ACK(确认)在未准备好读取下一个8位时设置为低电平,在准备好下一个数据集时设置为高电平。
非常感谢您的帮助!