Dostam dane z czujnika w porcie UART1 z Beaglebone. Ale chcę tylko 20 ostatnich bajtów danych. Ale skierowanie tych problemów z kodem Python. Pierwszy: -

import serial, time
ser = serial.Serial()
ser.port = "/dev/ttyO1"

ser.baudrate = 9600
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None          #block read
ser.timeout = 5 

   ser.open()
   file.open("data.txt","w")

time.sleep(5)  #give the serial port sometime to receive the data
while True:
     data = ord(ser.read())
     print(data)
     file.write(data)

Dzięki temu kodzie mogę wydrukować dane. Nie wiem, jak zakończyć pętlę, gdy wszystkie dane zostaną odebrane i tylko ostatnie 10 lub 20 bajtów przechowywane w pliku. Użyłem Ord (Ser.Read), w przeciwnym razie dane będą takie.

�

u
�

u
�

ASCII. Aby uzyskać dane w dziesiętnie, używałem Ord (Data) Uzyskaj takie dane

79
1
1
12
0
13
116
0
jaswinder 24 lipiec 2020, 02:31

1 odpowiedź

Najlepsza odpowiedź

Możesz przeczytać dane w pliku, utwórz listę, usuń punkt danych Ostatnia (listę pierwszego elementu) i dołącz (do końca listy) Nowy i zapisz go.

while True:
    text = file.readlines()
    text = [line.strip() for line in text]
    try:
        data = ord(ser.read())
    except:
        break
    if len(text) == 20:
        text.pop(0)
    text.append(data)
    file.write('\n'.join(text))

Pełny kod:

import serial, time
ser = serial.Serial()
ser.port = "/dev/ttyO1"

ser.baudrate = 9600
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
#ser.timeout = None          #block read
ser.timeout = 5 

ser.open()
file.open("data.txt","w")

time.sleep(5)  #give the serial port sometime to receive the data
while True:
    text = file.readlines()
    text = [line.strip() for line in text]
    try:
        data = ord(ser.read())
    except:
        break
    if len(text) == 20:
        text.pop(0)
    text.append(data)
    file.write('\n'.join(text))

file.close()

Nie byłeś jasny o wyrobieniu z pętli, więc wyszedłem na to, że część. Jeśli chcesz złamać po 20. punkcie danych, powinieneś sprawdzić długość listy, a jeśli równa się 20, przerwa.

2
nagyl 24 lipiec 2020, 01:19