Kirjoittaja Aihe: [ratkaistu pythonilla] USB laitteen tuottama tuloste päätteelle päätekomennoilla  (Luettu 2171 kertaa)

teele

  • Käyttäjä
  • Viestejä: 852
    • Profiili
 
USB-portissa on laite, joka kirjoittaa sekunnin välein muutaman sanan viestin, ja viestien tuloa voi seurata esimerkiksi jollain pääteohjelmalla tai omatekoisella tätä varten tehdyllä ohjelmalla.

Yritin sitten saada tulostetta päätteelle

Koodia: [Valitse]
$tail -F /dev/ttyUSB0
koetuloste usbilta ...
koetul

$cat /dev/ttyUSB0
koetuloste usbilta ...
koetul


Mutta vain pari riviä tulee näkyville, vaikka tulostus on käynnissä usbiin koko ajan. Jostain syystä bash haluaa katkaista tuostuksen, mutta rivinvaihdosta tai kursorinpalautuksesta ei kuitenkaan taida olla kyse, koska ensimmäinen rivi tulee oikein ja seuraava katkeaa keskeltä.

Haluaako bash tässä vain lukea tietyn pituisia rivejä. Miten saisi tulostuksen jatkumaan vaikka <ctrl> c:n painamiseen asti.

« Viimeksi muokattu: 12.08.17 - klo:14.08 kirjoittanut teele »

jarmala

  • Käyttäjä
  • Viestejä: 790
    • Profiili

USB-portissa on laite, joka kirjoittaa sekunnin välein muutaman sanan viestin, ja viestien tuloa voi seurata esimerkiksi jollain pääteohjelmalla tai omatekoisella tätä varten tehdyllä ohjelmalla.

Yritin sitten saada tulostetta päätteelle

Koodia: [Valitse]
$tail -F /dev/ttyUSB0
koetuloste usbilta ...
koetul

$cat /dev/ttyUSB0
koetuloste usbilta ...
koetul


Mutta vain pari riviä tulee näkyville, vaikka tulostus on käynnissä usbiin koko ajan. Jostain syystä bash haluaa katkaista tuostuksen, mutta rivinvaihdosta tai kursorinpalautuksesta ei kuitenkaan taida olla kyse, koska ensimmäinen rivi tulee oikein ja seuraava katkeaa keskeltä.

Haluaako bash tässä vain lukea tietyn pituisia rivejä. Miten saisi tulostuksen jatkumaan vaikka <ctrl> c:n painamiseen asti.

Sama ongelma kuin minulla Arduinon kanssa. Tuo tail -komento toimi hyvin Ubuntu 12.04:ssä, mutta ei toiminut enää 14.04:ssä. Syytä ei löytynyt. Eikä ole vieläkään tiedossa...

Ongelma ratkesi, kun lukee USB:tä python -skriptillä...

Koodia: [Valitse]
#! /usr/bin/python
import serial
from time import strftime, sleep
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.5)
sleep (0.5)
#ser.write ('Reset'.encode('UTF8'))
while 1:
sleep(0.5)
if ser.inWaiting() >= 1:
# messages14 chars
lin = ser.readline()
line = lin.decode('utf8')
f = open( 'z', 'a')
f.write (line)
f.close()
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB
Ubuntu 22.04 LTS, KDE Plasma, Celeron N5105, 8 GB

teele

  • Käyttäjä
  • Viestejä: 852
    • Profiili
Kiitos ohjeesta, pitää kai siirtyä pythoniin....

katsoin kuitenkin  vielä, että nopeuskin oli oikein

Koodia: [Valitse]
$ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 0; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

mutta sekään ei näytä olevan väärin.
 

Jos osaisi, voisi olla mahdollista yrittää säätää tulostuksen jatkuvaksi stty -komennon avulla.

Aiempana olevan python-ohjelman tulostus toimii kuitenkin nätisti

Koodia: [Valitse]
$ python3 test01.py
... 

no data detected, still r
no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

no data detected, still running ... 

Tässä vielä koodi
Koodia: [Valitse]
#! /usr/bin/python

import serial
from time import strftime, sleep
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout = 0.5)
sleep (0.5)
#ser.write ('Reset'.encode('UTF8'))
while 1:
sleep(0.5)
if ser.inWaiting() >= 1:
lin = ser.readline()
line = lin.decode('utf8')
f = open( 'tsto', 'a')
f.write (line)
f.close()
print(line)


'''
aluekommentointi kolmella heittomerkillä :)

'''
« Viimeksi muokattu: 12.08.17 - klo:14.20 kirjoittanut teele »