root/branches/dev/wminput/plugins/acc/acc.py

Revision 122, 1.7 kB (checked in by dsmith, 1 year ago)

added acc.py script

Line 
1 import wmplugin
2 import cwiid
3 import math
4
5 acc_zero = None
6 acc_one = None
7 acc = [0,0,0]
8
9 NEW_AMOUNT = 0.1
10 OLD_AMOUNT = 1 - NEW_AMOUNT
11
12 Roll_Scale = 1
13 Pitch_Scale = 1
14 X_Scale = 1
15 Y_Scale = 1
16
17 def wmplugin_info():
18         return [], \
19           [("Roll", wmplugin.ABS, 3141, -3141, 0, 0), \
20            ("Pitch", wmplugin.ABS, 1570, -1570, 0, 0), \
21            ("X", wmplugin.ABS | wmplugin.REL, 16, -16, 0, 0), \
22            ("Y", wmplugin.ABS | wmplugin.REL, 16, -16, 0, 0)], \
23           [("Roll_Scale", wmplugin.PARAM_FLOAT, Roll_Scale), \
24            ("Pitch_Scale", wmplugin.PARAM_FLOAT, Pitch_Scale), \
25            ("X_Scale", wmplugin.PARAM_FLOAT, X_Scale), \
26            ("Y_Scale", wmplugin.PARAM_FLOAT, Y_Scale)]
27
28 def wmplugin_init(id, wiimote):
29         global acc_zero, acc_one
30
31         wmplugin.set_rpt_mode(id, cwiid.RPT_ACC)
32         acc_zero, acc_one = wiimote.get_acc_cal(cwiid.EXT_NONE)
33         return
34
35 def wmplugin_exec(mesg):
36         global acc_zero, acc_one, acc
37         axes = [None, None, None, None]
38
39         for m in mesg:
40                 if m[0] == cwiid.MESG_ACC:
41                         acc = [NEW_AMOUNT*(new-zero)/(one-zero) + OLD_AMOUNT*old
42                                for old,new,zero,one in zip(acc,m[1],acc_zero,acc_one)]
43                         a = math.sqrt(sum(map(lambda x: x**2, acc)))
44
45                         roll = math.atan(acc[cwiid.X]/acc[cwiid.Z])
46                         if acc[cwiid.Z] <= 0:
47                                 if acc[cwiid.X] > 0: roll += math.pi
48                                 else: roll -= math.pi
49
50                         pitch = math.atan(acc[cwiid.Y]/acc[cwiid.Z]*math.cos(roll))
51
52                         axes[0] = int(roll  * 1000 * Roll_Scale)
53                         axes[1] = int(pitch * 1000 * Pitch_Scale)
54
55                         if (a > 0.85) and (a < 1.15):
56                                 if (math.fabs(roll)*(180/math.pi) > 10) and \
57                                    (math.fabs(pitch)*(180/math.pi) < 80):
58                                         axes[2] = int(roll * 5 * X_Scale)
59
60                                 if (math.fabs(pitch)*(180/math.pi) > 10):
61                                         axes[3] = int(pitch * 10 * Y_Scale)
62
63         return [], axes
64
Note: See TracBrowser for help on using the browser.