Paso 6: Cosas de informática
Para que esto funcione necesitará la última versión de GlovePIE (aquí), el software de arduino si usted eligió la opción 1 (aquí) y un juego para utilizar la configuración con.
En primer lugar, conectar un wiimote a la computadora usando cualquiera construido en bluetooth o un bluetooth dongle.
A continuación, descargar GlovePIE y crear un nuevo archivo llamado IRloc.PIE
Introduzca el siguiente código:
Si var.loopUntil=0 {}
var.startX=wiimote1. PointerX
var.startY=wiimote1. PointerY
var.SBD=wiimote1.z
var. ButtonFreezeTime = 250ms
var. PointerBump = KeepDown (prensado (wiimote1. A), var. ButtonFreezeTime) o KeepDown (prensado (wiimote1. B), var. ButtonFreezeTime)
Wiimote1.Led1 = true
Wiimote1.LED2 = true
Wiimote1.Led3 = true
Wiimote1.Led4 = true
Wait(10ms)
var.difX= (wiimote1. PointerX-var.startX)
var.difY= (wiimote1. PointerY-var.startY)
var.err = 15
Si wiimote.dot1vis y wiimote.dot2vis y no var. {IgnoreSensorBar}
Si var. UsedIR = false {}
[var. Hold_x, var. Hold_y] = [0, 0]
[var. Recenter_x, var. Recenter_y] = [0, 0]
var. UsedIR = true
}
var.irDot1_xy = [(512 - wiimote.dot1x) / 1024, (wiimote.dot1y - 384) / 768]
var.irDot2_xy = [(512 - wiimote.dot2x) / 1024, (wiimote.dot2y - 384) / 768]
[var.irMid_x, var.irMid_y] = (var.irDot1_xy + var.irDot2_xy) / 2
var.irMid_angle = atan2 (var.irMid_x, var.irMid_y)
var.irMid_length = [var.irMid_x, var.irMid_y]
var.irNew_angle = var.irMid_angle - var. Rodillo
var.irNew_xy = [sin(var.irNew_angle), cos(var.irNew_angle)] * |var.irMid_length|
[var.ir_x, var.ir_y] = var.irNew_xy + [.5,.5]
var.irSpeed_x = var.irSpeed_x *.8 + abs(delta(var.ir_x)) * 1000
var.irSpeed_y = var.irSpeed_y *.8 + abs(delta(var.ir_y)) * 1000
var.irSpeed_xy = [var.irSpeed_x, var.irSpeed_y]
Si (var.irSpeed_x < 40 y var.wmSpeed_x < 40) {}
Si ((var.ir_x < var.irMin_x) o (var. MinMax_x = 2 y (var.irMax_x - var.ir_x) > =.15)) y ((var.wmMax_x-var.wm_x) >.075) {}
[var.wmMin_x, var.irMin_x] = [var.wm_x, var.ir_x]
var. MinMax_x = 1
}
Si ((var.ir_x > var.irMax_x) o (var. MinMax_x = 1 y (var.ir_x - var.irMin_x) > =.15)) y ((var.wm_x-var.wmMin_x) >.075) {}
[var.wmMax_x, var.irMax_x] = [var.wm_x, var.ir_x]
var. MinMax_x = 2
}
}
Si (var.irSpeed_y < 40 y var.wmSpeed_y < 40) {}
Si ((var.ir_y < var.irMin_y) o (var. MinMax_y = 2 y (var.irMax_y - var.ir_y) > =.15)) y ((var.wmMax_y-var.wm_y) >.075) {}
[var.wmMin_y, var.irMin_y] = [var.wm_y, var.ir_y]
var. MinMax_y = 1
}
Si ((var.ir_y > var.irMax_y) o (var. MinMax_y = 1 y (var.ir_y - var.irMin_y) > =.15)) y ((var.wm_y-var.wmMin_y) >.075) {}
[var.wmMax_y, var.irMax_y] = [var.wm_y, var.ir_y]
var. MinMax_y = 2
}
}
Si var. WMIR_switch = {1}
[var. IR_adj_x, var. IR_adj_y] = [var. Old_WM_x, var. Old_WM_y] - [var.ir_x, var.ir_y]
var. WMIR_switch = 0
}
Si var. WMIR_switch = {0}
[var. Rough_x, var. Rough_y] = ([var.ir_x, var.ir_y] + [var. IR_adj_x, var. IR_adj_y] - [.5,.5]) * var. NewZoom + [.5,.5]
[var. WMIR_x, var. WMIR_y] = [var.wmNew_x, var.wmNew_y] - [var.ir_x, var.ir_y]
var. WMIR_xy = [var. WMIR_x, var. WMIR_y]
var. IR_adj_c = 1 - EnsureRange (|var. WMIR_xy|, 0,.5) / 5
[var. IR_adj_x, var. IR_adj_y] = [var. IR_adj_x, var. IR_adj_y] * var. IR_adj_c
}
[var. WMIR_cal_x, var. WMIR_cal_y] = [var.wm_x, var.wm_y] - [var.ir_x, var.ir_y]
otra cosa
[var. Rough_x, var. Rough_y] = ([var.wmNew_x, var.wmNew_y] - [var. WMIR_x, var. WMIR_y] + [var. IR_adj_x, var. IR_adj_y] - [.5,.5]) * var. NewZoom + [.5,.5]
[var. Old_WM_x, var. Old_WM_y] = ([var. Rough_x, var. Rough_y] - [.5,.5]) / var. NewZoom + [.5,.5]
var. WMIR_switch = 1
var. WMIR_xy = [0, 0]
Si var.started = true y var.wmCalON = falso entonces [var.ir_x, var.ir_y] = ([var. Smooth_x, var. Smooth_y] - [.5,.5]) / var. NewZoom + [.5,.5]
}
if(var.loopCount<10) {}
var.XS=var. StartX
var.YS=var. StartY
}
var.totalDistX=(var.xs-var.StartX) * 10
var.totalDistY=(var.ys-var.StartY) * 10
var. TDXS = 0
var. TDYS = 0
var.TX=var. TDXS-var.totalDistX
var.ty=var. TDYS-var.totalDistY
debug = "XDist:"+ var.tx+"YDist:"+ var.ty+"BDist:" + wiimote. PointerVisible
var.loopCount=var.loopCount+1
Si wiimote. PointerVisible = {0}
var.inC=var.inC+1
}
Si var.inC > {30}
var.loopUntil=.01
}
}
}
var.LR=0
Si var.tx > 1.75 {}
var.LR=1
}
Si var.tx < -1,75 {}
var.LR=-1
}
var.Ud=-1
Si var.ty > 1.6
var.Ud=0
}
Si var.ty > 2.6
var.Ud=1
}
Si {var.loopUntil!=0}
debug = "LR:"+ var.lr+"UD:" +var.ud
var.loopUntil=0
}
Si {var.inC=31}
Si var.lr=-1 y var.ud=1 {}
numpad1 prensa
esperar 1ms
numpad1 liberación
}
Si var.lr=-1 y var.ud=0 {}
numpad2 prensa
esperar 1ms
numpad2 liberación
}
Si {var.lr=-1 y var.ud=-1
presiona numpad3
esperar 1ms
numpad3 liberación
}
Si var.lr=0 y var.ud=1 {}
numpad4 prensa
esperar 1ms
numpad4 liberación
}
Si var.lr=0 y var.ud=0 {}
numpad5 prensa
esperar 1ms
numpad5 liberación
}
Si var.lr=0 y var.ud=-1 {}
numpad6 prensa
esperar 1ms
numpad6 liberación
}
Si var.lr=1 y var.ud=1 {}
numpad7 prensa
esperar 1ms
numpad7 liberación
}
Si var.lr=1 y var.ud=0 {}
numpad8 prensa
esperar 1ms
numpad8 liberación
}
Si var.lr=1 y var.ud=-1 {}
numpad9 prensa
esperar 1ms
numpad9 liberación
pulsar la tecla shift
}
}
Si {pressed(key.enter)}
var.loopUntil=0
var.inC=0
}
Aquí está una explicación rápida del programa y como usarlo:
Cuando se ejecuta primero el programa, asegúrese de que el sensor puede "ver" los LEDs infrarrojos emiten luz. Se inicia con una pantalla en el panel de depuración arriba que dice "XDist: YDist 0.00: 0.00 BDist: 1.00"
Si el doble valor 1.00 para BDist muestra 0.00 el sensor de infrarrojos no puede detectar la fuente de luz infrarroja. Después de haber detectado una fuente, se calibra el movimiento de la bola y salida teclado valores 1-9 dependiendo de la colocación 3D calculado. Cuando la fuente de luz ya no se ven por el sensor de infrarrojos, la depuración se visualiza "LR: UD: valor" donde el valor se sustituye por un número entero de -1 a 1.
Esto demuestra el posicionamiento global de la "bola" en una cuadrícula de 3 x 3 como se muestra en el diagrama.
Después de eso, es fácil controlar el software glovePIE. Cuando se ejecuta el software, espere hasta que el BDist está a 1 y luego patear la pelota más allá del sensor de infrarrojos. Esto activará un posicionamiento de depuración y luego a su vez provocar una salida del teclado numérico del 1-9 dependiendo de la posición calculada. Puede ahora integrar esto en un ambiente de juego mediante la creación de un juego que utiliza una entrada de 9 valor o usted puede mensaje me para un juego que he creado específicamente para este proyecto haciendo click aquí.