Oppure

Loading
05/08/15 13:51
lucky
Salve community,
mi affido alla vostra squisita competenza.
Mi trovo a dover lavorare su un UDOO Quad, un dispositivo che integra su una board una CPU Quad core e un arduino il tutto con tanto di modulino Wifi, ingresso SATA etc. Insomma una bella bestiolina. Il target di questo dispositivo sarebbe quello di un oggetto che riesce a dialogare con strumentazione elettronica quali sensori, motori, potenziometri digitali etc. magari attraverso l'arduino onboard, e che riesca a fornire un'interfaccia con "il resto dell'universo" tramite le più svariate modalità(server http, ssh, ftp, vnc, o qualsiasi altra cosa riusciate a far girare su un Pinguino). Ho caricato un banalissimo programmino sull'arduino onboard di questa scheda, il quale non fa altro che leggere un pin di input analogico e sputare il livello letto su una seriale in formato ASCII una riga per volta. Il mio dilemma è il seguente, posto che sta bestiola mi tira fuori una quantità spropositata di dati al secondo, come fare per leggerne "il più possibile" e semplicemente rappresentarli come punti su un diagramma cartesiano in aggiornamento continuo. Un po' come fa un logger. Al momento ho realizzato, anche aiutandomi con il materiale in rete, un programmino in python che sfrutta al libreria matplotlib per raggiungere lo scopo. Tuttavia ho sempre l'impressione che il tutto sia sempre troppo lento. Mi sembra di aver capito che il collo di bottiglia in tutto il processo sia proprio il disegnare il punto sul grafico al che pongo le domande:
1) Posto che il python vada bene per la questione, qual'è il miglior modo per mostrarmi i dati presi da questa seriale?
2) Posto che con il python io non posso andare oltre un certo limite, devo passare al C?
3) In tal caso tutta la questione come andrebbe risolta?

Grazie in anticipo della disponibilità
aaa
05/08/15 20:54
pierotofy
Cambiare linguaggio non ti darà un grande vantaggio in termini di performance; è probabile che l'algoritmo che hai implementato per disegnare probabilmente fa troppe chiamate alla funzione che "renderizza" il grafico.

Salva i dati di input che ricevi dall'arduino, ma non renderizzarli subito; avvia un thread secondario e fai l'update del grafico una volta ogni tot secondi.
Il mio blog: piero.dev
06/08/15 13:02
lucky
Ciao Piero,
grazie della pronta risposta.
Avevo intuito che il problema fosse proprio il fatto che la finestra del grafico venga ridisegnata ad ogni immissione di dati e credo sia proprio questo che mi ruba la maggior parte del tempo. Quella del separare i due task su due thread diversi mi sembra una buona idea che proverò a portare avanti, tuttavia devo vedere se è possibile forzare matplotlib (or similia) a non ridisegnare tutta la finestra grafica. Hai qualche esperienza in merito?
Grazie ancora!
aaa
10/08/15 18:14
Roby94
Postato originariamente da lucky:e sputare il livello letto su una seriale in formato ASCII una riga per volta.

Non è un consiglio che dovrebbe portarti ad una soluzione. Ma in ogni caso adoperare la codifica ACHII in una trasmissione seriale di dati non è una buona scelta, si perde tempo nella codifica e decodifica dei dati, inoltre si crea ridondanza inutile.
aaa
10/08/15 18:17
nessuno
ACHII ... è il verso di una canzone? Una esclamazione sumerica? Un grido di guerra giapponese...?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
11/08/15 7:54
Roby94
Ahahahahah scusate, non ci ho nemmeno fatto caso, e dire che l'ho anche riletto prima di pubblicare.
aaa