Il giorno 30 novembre 2010 17:33, Antonio Galea <antonio.galea@xxxxxxxxx> ha scritto: > 2010/11/30 matteo ruffoni <mattruffoni@xxxxxxxxx>: > > > > 1)il file che fa i grafici di dati casuali in real time è qui > > http://eli.thegreenplace.net/2008/08/01/matplotlib-with-wxpython-guis/(il > > secondo esempio) e se ho ben capito i dati che grafica si trovano nella > > classe DataGen sotto le voci > > > > def _recalc_data(self): > > delta = random.uniform(-0.5, 0.5) > > r = random.random() > > Hai capito benissimo, sì. La classe GraphFrame registra un timer > per ridisegnare il grafico ogni 100ms. Ogni volta che il timer scatta, > se la "raccolta dati" non è stata fermata, chiama la classe DataGen > e si fa restituire un nuovo numero da aggiungere ai dati che ha in > memoria (il metodo on_redraw_timer). > > > 2) forse dovrei riuscire, ovviamente non ne sono sicuro, a sostituire > > delta(?) e r(?) , con idati provenienti dalle accelerezioni dello wimote, > > che dovrebbero essere fornite dalle librerie cwiid > > e sono nei campi(?) cwiid.Y > > Il primo problema è che non ho ben capito che differenza c'è tra delta e r? delta è un numero random tra -0,5 e +0,5 ma a cosa serve? (se lo sostituisco con 0 il grafico sta fisso sul 50) r ? è il random.random() (randomissimo?) sostituito ocn 0 non fa cambiare nulla Quale dei due deve essere sostituiro con le acc? > def _recalc_data(self): > ax, ay, az = [], [], [] > messages = wiimote.get_mesg() # Get Wiimote Messages > for mesg in messages: # Loop through Wiimote Messages > if mesg[0] == cwiid.MESG_ACC: # If a accelerometer message > ax.append( mesg[1][cwiid.X] ) > ay.append( mesg[1][cwiid.Y] ) > az.append( mesg[1][cwiid.Z] ) > #adesso che hai i tre array delle accelerazioni, li puoi usare > #per calcolare delta ed r > ho provato delta=ay r=0 oppure delta=1 r=ay oppure delta = int(ay) > r = 0 > > Wiimote activiated... Press + to start recording and - to stop recording Traceback (most recent call last): File "mat10_wx_mpl_dynamic_graph.py", line 355, in <module> app.frame = GraphFrame() File "mat10_wx_mpl_dynamic_graph.py", line 144, in __init__ self.data = [self.datagen.next()] File "mat10_wx_mpl_dynamic_graph.py", line 62, in next self._recalc_data() File "mat10_wx_mpl_dynamic_graph.py", line 75, in _recalc_data delta = int(ay) TypeError: int() argument must be a string or a number, not 'list' Mi sembra che il problema sia che vuole dei dati che non siano liste (in tutti i casi la risposta è più o meno la stessa) e anche a me sembra un po' logico nel real time non c'è bisogno di liste Ciao Matteo > Ovviamente, le funzioni per delta ed r te le inventi a gusto. Ricordati > di gestire il caso in cui gli array sono vuoti - potresti avere il Wiimote > spento. > > > Sto "studiando" python da una settimana quindi non sono in grado di usare > un > > linguaggio adatto e non so nemmeno se le soluzioni che ho individuato > sono > > quelle giuste. > > Beh, per essere alle prime armi hai già messo le mani su "roba > buona"! > > > Un file che fa dei grafici ragionevoli, ma non in real time, è qui > > http://convolutedlogic.com/projects/wiimote/index.htm e si chiama > > wiimote_record_accel_vel_pos.py > > Per graficare questi, devi cambiare la logica della classe > wxPython/matplotlib che hai postato: quella usa un'unica > variabile in y, e un semplice indice di iterazione in x. > > Potresti usare un thread[1] separato, che raccoglie i dati del Wiimote > e li accumula in un semplice array di tuple etichettate con il tempo > di lettura: > data = [ (t0,ax0,ay0,az0),...] > > Poi la classe che grafica la modifichi per visualizzare quel che ti pare > di questi dati. > > Spero di non aver sparato troppo in alto, e che i suggerimenti > ti tornino utili! > > Antonio > > [1] http://www.doughellmann.com/PyMOTW/threading/index.html > -- > Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO > "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx > > >