On 04/11/2013 15:43, Riccardo Brazzale wrote:
[...]
Hai ragione,
vediamo di ricapitolare:
c'e' una macchina dotata di un pulsante, un display e una porta
seriale.
L'operatore deve fare delle misurazioni (in questo caso deve
determinare, attraverso lo strumento di cui è dotata questa macchina
le caratteristiche di un foglio di carta: porosità e
spessore).Quando ha
posizionato il foglio, schiaccia questo pulsante e la macchina
mostra sul display i risultati.
Contemporaneamente mette gli stessi risultati a disposizione
sulla seriale.
Ora, non essendoci niente collegato alla seriale, l'operatore
trascrive
i dati su un foglio e poi provvede a caricarli su un foglio xls.
[...]
Allego il sorgente:
Ti consiglio di organizzare il codice usando delle funzioni; altrimenti
così non è molto leggibile.
#!/usr/bin/python
# -*- coding: utf-8 -*-
[...]
while 1:
dati = conn.read(64)
stdscr.addstr(3, 20, dati)
stdscr.refresh()
fou.write(dati + "\n")
Come è il formato dei dati?
stdscr.addstr(8, 5, 'PREMI Q PER USCIRE', curses.A_REVERSE)
Ok, allora premendo Q deve uscire e non semplicemente generare il file xls.
Curiosità: che succede se spegni l'apparecchio mentre questo programma è
in esecuzione? Si blocca indefinitamente su conn.read(64) ?
stdscr.refresh()
tasto_premuto = stdscr.getch() <== qui si blocca e attende e non va
all'else
if tasto_premuto == ord('q') or tasto_premuto == ord('Q'):
# Chiudo il file temporaneo
fou.close()
Il codice seguente è un ottimo candidato ad essere spostato in una
funzione, a cui passi il nome del file con i dati.
> [...]
#chiudo
curses.echo()
curses.nocbreak()
curses.curs_set(1)
curses.endwin()
sys.exit(0)
basta anche un semplice break.
Anzi è meglio, così puoi spostare il codice di inizializzazione e
terminazione delle curses fuori dal ciclo while (meglio se in funzioni
separate).
else:
a = 0
La variabile `a` a cosa serve?
stdscr.addstr(8, 5, ' ')
stdscr.refresh()
continue
Comunque il codice lo puoi riscrivere in questo modo, tralasciando la
gestione degli errori:
import sys
import select
# ... open serial port, init curses
while 1:
rfd, wfd, efd = select.select([stdin, conn], [], [], 0)
if conn in rfd:
dati = conn.read(64)
# ... aggiorna schermo e file dati
if stdin in rfd:
cmd = stdin.read()
if cmd.strip().lower() == "q":
# ... salva il file excel
break
# close serial port, close curser
Ciao Manlio
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python