[Python] [python] Help Lettura da Seriale
Riccardo Brazzale
riccardo.brazzale a gmail.com
Lun 4 Nov 2013 16:24:38 CET
Il giorno 04 novembre 2013 16:11, Manlio Perillo
<manlio.perillo a 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 a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
Gentilissimo.
Faccio delle prove.
Grazie!
--
Riccardo Brazzale
Linux User #299418 Linux Machine #184578
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131104/656991c0/attachment.html>
Maggiori informazioni sulla lista
Python