[Linuxtrent] Re: Suggerimento python per wiimote

  • From: Antonio Galea <antonio.galea@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Wed, 1 Dec 2010 02:07:25 +0100

2010/12/1 matteo ruffoni <mattruffoni@xxxxxxxxx>:
>
> 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

r è un numero casuale, tra 0 ed 1. Il dato che verrà graficato è
self.data, che viene calcolato così, usando sia r che delta (ho
parafrasato il codice originale):

       if r > 0.9:
           delta *= 15
       elif r > 0.8:
           delta += (0.5 if self.init > self.data else -0.5)
       self.data += delta

Il valore di self.init è 50; il tuo grafico ti dice come si presenta
questa funzione :-)

> Quale dei due deve essere sostituiro con le acc?

Cominciamo da una cosa semplice - diciamo il grafico di ax.

class DataGen(object):
   def __init__(self, init=0):
       self.data = self.init = init
   def next(self):
       self._recalc_data()
       return self.data
   def _recalc_data(self):
     ax = []  # lista di valori di accelerazione
     messages = wiimote.get_mesg()   # sono arrivati dei messaggi dal Wiimote?
     for mesg in messages:   # leggili tutti
       if mesg[0] == cwiid.MESG_ACC: # è l'accelerometro?
           ax.append( mesg[1][cwiid.X] )  # ricordati il valore letto
     n = len(ax)
     if n:
       self.data = sum(ax)/n  # ritorna la media dei valori
     #else:
     #  self.data = 0

Se il Wiimote manda più messaggi tra un timer ed il successivo,
ritorniamo la media; se non è arrivato niente, il valore ritornato
sarà quello della lettura precedente (se invece decommenti le ultime
due righe avrai 0 come valore quando non è arrivato nulla).

>     delta = int(ay)
> 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

Ok, non è però logico che tu voglia trasformare una lista in
un intero senza dire a Python come :-)

Spero di essere stato comprensibile,

Antonio
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: