Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: 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
$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.
-
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
$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ä...
#! /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()
-
Kiitos ohjeesta, pitää kai siirtyä pythoniin....
katsoin kuitenkin vielä, että nopeuskin oli oikein
$ 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
$ 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
#! /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ä :)
'''