Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 11.08.17 - klo:17.13

Otsikko: [ratkaistu pythonilla] USB laitteen tuottama tuloste päätteelle päätekomennoilla
Kirjoitti: teele - 11.08.17 - klo:17.13
 
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.

Otsikko: Vs: USB laitteen tuottama tuloste päätteelle päätekomentojen avulla
Kirjoitti: jarmala - 11.08.17 - klo:23.23

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()
Otsikko: Vs: USB laitteen tuottama tuloste päätteelle päätekomentojen avulla
Kirjoitti: teele - 12.08.17 - klo:14.06
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ä :)

'''