Zona Arcade. Construye, Restaura y Decora tu Máquina Arcade y Pinball.

Tutorial: Rotación automática del layout MaLa con sensor de inclinación casero por USB

« Older   Newer »
  Share  
view post Posted on 23/10/2009, 17:58     +1   -1
Avatar

Restless in Peace

Group:
Administrator
Posts:
42,883
Location:
Alcobendas (Madrid)

Status:


Tutorial: Rotación automática del layout MaLa para monitores en vertical y horizontal con sensor de inclinación casero por USB y el programa "Autohotkeys"

- Introducción

El proyecto que voy a comentar a continuación es friki, pero es que el método, aparte de friki, es propio de una mente retorcida. En cualquier caso, adelanto que el invento funciona.

El objetivo es que la rotacion manual del televisor o monitor informe al frontend MaLa (antes de que arranque) acerca de la orientación de la pantalla. Se entiende que el usuario dispone de un layout de orientación dual como “el maravilloso, único e inimitable MaLa Low Res Layout” - PUBLICIDAD. También se considera que el usuario rota la pantalla eventualmente y con el ordenador apagado.

Link de descarga original: http://www.alvarezeninternet.com/malalayout/

Link de descarga alternativa: stormrider_mala_layout.zip (6.19 MB)


- Rotación automática del layout MaLa con sensor de inclinación casero por USB y el programa “Autohotkeys”

El software

Vamos a empezar por la parte del software. Hacemos un script con “Autohotkey”, que además arrancara antes incluso de que MaLa cargue (en la llamada desde el registro de “userinit” se pone en la misma línea que “mala.exe”).

El código hace lo siguiente: comprueba si entre las unidades conectadas al ordenador alguna de ellas tiene la etiqueta de volumen “SENSOR”. Entonces modifica “mala.ini”, poniendo el valor “1” a “vertical=” y “flip=”. Si no se detecta esa unidad presente, pone “0”.

En resumen, que si tuviéramos un pendrive conectado al arrancar el equipo con volumen “SENSOR”, el frontend de juegos MaLa saldría en vertical y, en caso contrario, MaLa saldría en horizontal.


El Hardware

Ahora viene lo bueno. Conectamos el pendrive (el más malo que encontremos) a un alargador USB (¡ojo!, de los buenos, con apantallamiento). Le hacemos una “intervención quirúrgica” al alargador, seccionándolo unos centímetros cerca de el extremo hembra, y extraemos el cable rojo (alimentación). Conectamos cada extremo a otros dos trozos de cable y los soldamos a las patas de un interruptor de mercurio

image

Fijamos el interruptor con la inclinación adecuada (cuestión de probar) dentro de una cajita de componentes. Al estar la caja en postura horizontal, el circuito está abierto y el pendrive apagado. Al girar la caja, el mercurio cae por efecto de la gravedad, cierra el circuito y el pendrive se enciende.

image

Pegamos la caja encima del televisor donde no se vea mucho (yo he usado velcro adhesivo), por detrás, donde no se vea y conectamos el cable al equipo.

image


¡Voila!, tenemos un sensor de inclinación digital que hace de interruptor con un pendrive, lo cual actúa de variable para que un script que le diga al frontend si el televisor esta en postura horizontal o vertical. Ya nunca habrá que conmutar manualmente el layout, porque siempre estará en su orientación correcta, de acuerdo a como tengamos colocado el televisor al arrancar el ordenador.

Precios de componentes:
Pendrive: 8 €
Alargador de USB: 10 €
Interruptor de mercurio: 2 €
Caja de componentes: 5 €


- El script de “Autohotkeys” para rotar el frontend Mala

Link original de descarga: http://www.autohotkey.com/download/

Link alternativo de descarga: http://www.megaupload.com/?d=PUERN4H0

Nota: Si metes el pendrive el layout de Mala se gira a vertical, si sacas el pendrive y se gira a horizontal.

El script espera a que MaLa este activo y se inicia una secuencia cíclica con una espera de unos 10 segundos, donde el código comprueba si está conectado el pendrive, pero aquí eso no basta. Modificar el “ini” no servirá de nada, pues Mala no se refresca hasta salir. Hay que mandarle la pulsación de la tecla de rotar el layout (en mi caso tecla “ins”). Hacemos la condición: si esta el pendrive y en el ini esta vertical=0 quiere decir que teníamos la tele y el layout en horizontal, la apagamos y rotamos y ahora está en vertical. El script debe pues pulsar la tecla de rotación, pero no solo eso, sino modificar “mala.ini” también, ya que si no, al próximo chequeo tendríamos el layout en vertical y “mala.ini” en horizontal, así que al volver a rotar la tele en esa sesión para dejarla en horizontal, el script no rotaria el layout. Luego hace falta la condición para la situación contraria: si el pendrive no está y el ini esta en vertical = 1, significa que teníamos el layout en vertical y hemos rotado a horizontal.

La lista de horizontales se llama: "hors" y al de verticales: "verts".

CODE
#Persistent
#NoTrayIcon

Drives=DEFGHIJKLMNOPQRSTUVWXYZ
Loop, Parse, Drives
{
DriveGet, Var, Label, % A_LoopField ":"
res .= Var "`n"
}
if res contains SENSOR
{
IniWrite, 1, d:malamala.ini, GUI, vertical
IniWrite, 1, d:malamala.ini, GUI, flip
IniWrite, verts, d:malaselection.ini, mame, Gamelist
IniWrite, verts, d:malamala.ini, GameList, SelectedGameList
}
if res not contains SENSOR
{
IniWrite, 0, d:malamala.ini, GUI, vertical
IniWrite, 0, d:malamala.ini, GUI, flip
IniWrite, hors, d:malaselection.ini, mame, Gamelist
IniWrite, hors, d:malamala.ini, GameList, SelectedGameList
}

Winwaitactive MaLa ahk_class TfrmMain
IfWinExist MaLa ahk_class TfrmMain
SetTimer, Check, 20000
return

Check:
res =

IniRead, OutputVar, d:malaselection.ini, mame, Gamelist

Drives=DEFGHIJKLMNOPQRSTUVWXYZ
Loop, Parse, Drives
{
DriveGet, Var, Label, % A_LoopField ":"
res .= Var "`n"
}

if res contains SENSOR
if OutputVar=hors
{
Winkill MAME
Winwaitactive MaLa ahk_class TfrmMain
send {ins}
IniWrite, 1, d:malamala.ini, GUI, vertical
IniWrite, 1, d:malamala.ini, GUI, flip
}
if res not contains SENSOR
if OutputVar=verts
{
Winkill MAME
Winwaitactive MaLa ahk_class TfrmMain
send {ins}
IniWrite, 0, d:malamala.ini, GUI, vertical
IniWrite, 0, d:malamala.ini, GUI, flip
}



- Elaphe666 -
Maquetado de imágenes: Mikonos

Edited by Mikonos - 31/10/2009, 21:59
 
Web  Top
view post Posted on 31/10/2009, 21:59     +1   -1
Avatar

Restless in Peace

Group:
Administrator
Posts:
42,883
Location:
Alcobendas (Madrid)

Status:


Actualizado!
 
Web  Top
1 replies since 23/10/2009, 17:58   1813 views
  Share