Il giorno 04 novembre 2013 16:11, Manlio Perillo <manlio.peri...@gmail.com>ha scritto:
> 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 > Gentilissimo. Faccio delle prove. Grazie! -- Riccardo Brazzale Linux User #299418 Linux Machine #184578
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python