PiPlay (abans PiMAME)
Contingut
- 1 Introducció
- 2 Targeta de memòria
- 3 Pantalla
- 4 Configuració del so
- 5 USB Interface controller for joystick and buttons
- 6 Joystick i botons: una altra solució (millor)(Nov 2014)
- 7 Advancemame, advmenu. Configurar advmenu per utilitzar-lo amb mame4all
- 8 Recordatori tecles
- 9 Font d'alimentació, monitor, amplificador
- 10 Frontend joanillo_arcade_frontend
- 11 ROMs mame4all
- 12 Classificació en categories
- 13 Compilació de mame4all des de les fonts
- 14 mame.cfg, configuració mame4all
- 15 Incidència Super Pang (desembre 2018)
- 16 Resum de comandes per configurar pimame (piplay)
- 16.1 Configuració advmenu.rc i fitxers .cfg
- 16.2 advmenu arrenca en l'inici del sistema
- 16.3 Habilitar Ctrl+ESC per fer shutdown
- 16.4 Instal.lar la font VideoPhreak.ttf
- 16.5 canviar advmenu_background.png
- 16.6 Fer un backup de la targeta SD
- 16.7 Comprovació de la ISO obtinguda amb el punt de muntatge (TBD)
- 16.8 Habilitar/deshabilitar el video de presentació
- 17 Prototip primavera 2014
- 18 Màquines Nadal 2014
- 19 Moneder electrònic, coin acceptor. Febrer 2016
- 20 Embalatge. Caixes de cartró. Enviament paqueteria
- 21 Geometria joanillo arcade frontend
Introducció
Construir el moble i posar-ho tot junt:
Targeta de memòria
Amb 4GB en tinc prou. Important que sigui de classe 10 (la de classe 4 va lenta i es nota la diferència).
Pantalla
La Raspberry PI té dues sortides de video: RCA i HDMI. Com es comenta en l'anterior enllaç, una possibiltiat és Portable 7" TFT LCD Digital Color Screen Monitor:
més o menys 25-30 euros. L'avantatge és que és automàtic i que l'alimnentació és de 12V (i puc fer que tot el sistema no s'hagi de connectar a la xarxa elèctrica). Desavantatge és que té poca resolució i és de 7, i sistemes similars amb més de 7 és difícil o es dispara el preu.
Una altra possibilitat és utilitzar un cable conversor de HDMI a VGA, per ex: (vull comprar aquest)
Les avantatges és que puc trobar pantalles VGA antigues, amb una certa curbatura, barates i de format gran. Per tant, puc tenir un moble més gran. El principal desavantatge és que l'hauré de connectar al corrent.
Ara bé, compte amb els cables hdmi to VGA, perquè convertir el senyal digital a analògic requereix electrònica. Per tant, l'anterior cable no funciona i aquest sí que hauria de funcionar:
New 1080p HDMI to VGA Cable Converter Adapter for Laptop PC DVD HDTV PS3 UK
- http://www.penguintutor.com/news/raspberrypi/hdmi2vga
- http://www.ebay.co.uk/itm/New-1080p-HDMI-to-VGA-Cable-Converter-Adapter-for-Laptop-PC-DVD-HDTV-PS3-UK-/221306071085?ssPageName=ADME:L:OC:ES:3160
(Recordem el compte de paypal: mail de yahoo / jq********)
Efectivament, funciona.
Configuració del so
La sortida d'audio per defecte de la Raspberry és HDMI. Per tant, segueixo:
The first thing to do is run :
lsmod | grep snd_bcm2835
and check snd_bcm2835 is listed. If it isn’t then run the following command :
sudo modprobe snd_bcm2835
If the module isn’t loaded automatically when you boot then you can force it to load by using the following process :
sudo joe /etc/modules
Then add ‘snd-bcm2835′ so it looks like this :
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be # loaded at boot time, one per line. Lines beginning with "#" are # ignored. Parameters can be specified after the module name. snd-bcm2835
By default the output is set to automatically select the default audio interface (HDMI if available otherwise analog). You can force it to use a specific interface using :
amixer cset numid=3 n
Where <n> is the required interface : 0=auto, 1=analog, 2=hdmi. To force the Raspberry Pi to use the analog output :
amixer cset numid=3 1
I usually have to do this if I boot the Pi with an HDMI cable plugged in. Otherwise it defaults to the 3.5mm jack automatically.
Per tant, el que ara faltarà és executar aquesta comanda en l'inici del sistema. Ficar aquesta comanda en el .bashrc
També:
$ alsamixer
Deixar-lo al 75%.
USB Interface controller for joystick and buttons
Tinc el joystick i els butons, ara els he de connectar a la Raspberry. Necessito un adaptador USB que em converteixi els interruptors dels butons i joystick a senyals que pugui entrar per USB. Es pot comprar per eBay (http://www.ebay.co.uk/itm/281045221038), o bé fer-se'l amb un controlador ATMEGA8, com s'explica a:
El projecte sembla senzill. És un projecte d'un microcontrolador ATMega8, però compte, no confondre amb l'arduino. La programació del codi al microcontrolador es fa directament amb el hex file, o bé es proporciona el codi font. Per programar el microcotrolador es fa amb el ISP, i es necessita un adaptador de l'ordinador al ISP:
- http://www.ebay.es/sch/i.html?_trksid=p3907.m570.l1313.TR0.TRC0.Xatmel+isp&_nkw=atmel+isp&_sacat=0&_from=R40
- http://www.ebay.es/itm/Adaptador-AVR-ISP-10-a-6-pines-para-USBasp-Atmel-STK500-y-otros-programadores-/190998860949?pt=LH_DefaultDomain_186&hash=item2c786b5495
De fet l'adaptador de 10 pins a 6 pins és senzill, només cal tenir clar el mapejat dels pins: Per tant, els passos serien aconseguir el programador ISP; programar el microcontrolador; muntar el circuit (provar primer amb un botó i veure que puc escriure per pantalla; i acabar de muntar el circuit. Aleshores ja tindria el joystick connectat a la Raspberry PI...
Jo havia utilitzat per programar els arduino el xip FTDI (que tinc)... quina relació té amb el programador ISP? està ben explicat a:
Bàsicament els arduino que tinc són un ATMega amb bootloader (i els xips que tinc és possible que tinguin bootloader). El bootloader serveix per tal de què la programació sèrie (usb to sèrie) sigui més fàcil, i així treballa el client gràfic de l'arduino. Si no tenim bootloader, o sigui que tinc el xip pelat, la única possibilitat és utilitzar el ISP (o ICSP), que és un estàndar d'Atmel. A més, per programar o carregar els bootloader també s'ha de fer d'aquesta manera. Una altra avantatge de programar directament al xip sense bootloader és que disposo de més espai de memòria perquè també tinc la que ocuparia el bootloader.
L'avantatge de disposar d'un programador ICSP és que puc obtenir xips Atmel sense bootloader (potser millor de preu) i ficar-hi el bootloader que jo vulgui.
Finalment, he comprat el Detalles de Programador de microcontroladores AVR USBasp - Atmel ISP MCU programmer ATmega:
i la manera com es programa i es configura ho puc llegir aquí:
i el desenvolupament del projecte electrònic es pot llegir aquí:
Joystick i botons: una altra solució (millor)(Nov 2014)
En l'apartat anterior hem fet que el nostre joystick/butons sigui reconegut per la RPi com un dispositiu USB, i per fer-ho hem emulat dins del microcontrolador Atmel el protocol USB.
Una altra solució (en principi molt més fàcil) és utilitzar els pinis GPIO. Hauria de ser una solució fàcil i amb menys electrònica. Per ex:
Primer de tot he de comprovar que tinc els pins GPIO ben configurats amb la numeració correcta. Faig la petita prova explicada a ...
Per fer la prova he utilitzat el pinheader 7 (pin físic) del model B: (https://projects.drogon.net/raspberry-pi/wiringpi/pins/)
7 4 GPIO7 wiringPi pin:7 BCM GPIO: 4 Name: GPIO 7
Per comprovar que la connexió està ben feta segueixo Raspberry_Pi#Primer_exemple_GPIO_.28General_Purpose_Input.2FOutput.29 i faig la prova bàsica.
$ sudo modprobe uinput $ gpio mode 7 in $ gpio read 7 1 o 0
En l'exemple que ens ocupa m'he de fixar és en el BCM GPIO: 4
$ wget https://github.com/mmoller2k/pikeyd/archive/master.zip $ unzip master.zip $ cd pikeyd-master $ make
compila sense problemes i es crea l'executable pikeyd
NOTA: per la RPi2 i RPi3 s'ha de fer un canvi en el fitxer joy_RPi.c, i recompilar:
#define GPIO_PERI_BASE 0x3F000000
Usage: pikeyd [option] Options: -d run as daemon -k try to terminate running daemon -v version -h this help Jo en el que Install notes. If you're using Raspbian wheezy add the folowing to /etc/modules: uinput i2c-dev edit /etc/modprobe.d/raspi-blacklist.conf and remove or comment out #blacklist i2c-bcm2708
A mi no em cal treure i2c-bcm2708 perquè no utiltizo el protocol i2c. Tinc prou pins GPIO per controlar el joystic + 6 botons (10 entrades).
Editem el fitxer de configuració i el canvio segons les meves necessitats (veure més avall).
$ joe pikeyd.conf $ sudo cp pikeyd.conf /etc $ sudo ./pikeyd -d (necessari executar-lo com a sudo) pikeyd: Daemon starting
Millor copiar-ho a /usr/local/bin
Then you need to run it as root, with perhaps the -d switch to make it ran as a daemon. Adding the line '/usr/local/bin/pikeyd -d' to /etc/rc.local makes it run as root at boot time.
Per tant:
$ sudo cp pikeyd /usr/local/bin $ sudo joe /etc/rc.local afegim al final: (abans de exit 0) /usr/local/bin/pikeyd -d
Per fer les connexions em fixo en la imatge que es proporciona en el projecte (https://github.com/mmoller2k/pikeyd/blob/master/wiring.png), i veig que el pin normalment està a 1.
The pins require pull-up resistors to 3V3 of 10k ohm, and the switches pull down. A 1K resistor in serial with the pin for protection doesn't hurt.
Per tant, necessito 10 resistències de 10K i 10 resistències de 1K, i una matriu de 10x4=40 punts:
______ _______ GPIO >----|__1K__|--+--|__10K__|----< +3V3 | | o | |=# o | | | GND >--------------+
Fitxer pikeyd.conf
S'ha de copiar a /etc. En la meva configuració utilitzo 10 entrades: 4 per al joystick i 6 botons. Els botons estan associats als caràcters 0,1,2,3,4,5 (tal com configuro el joanillo_arcade_frontend i el MAME).
RPi model B/B+. 1a prova
Els models revB i revB+ són compatibles en els pins.
pinheader BCM GPIO 3 (left) 2 5 (right) 3 7 (up) 4 11 (down) 17 13 (0) 27 15 (1) 22 19 (2) 10 21 (3) 9 23 (4) 11 22 (5) 25
#joy.cfg #format: # [keycode from /usr/include/linux/input.h] [whitespace] [GPIO pin no] # Not limited to a single key. A GPIO press will emit all defined keys in order. KEY_LEFT 2 KEY_RIGHT 3 KEY_UP 4 KEY_DOWN 17 KEY_0 27 KEY_1 22 KEY_2 10 KEY_3 9 KEY_4 11 KEY_5 25
nota: recordar fer $ sudo modprobe uinput
nota: Important! No utiltzar els pins de TXD i RXD (GPIO14 i GPIO15). Com a mínim, el GPIO14 no funciona (suposo perquè al ser de comunicació sèrie és dedicat).
El pinout per al cas pràctic de la màquina bartop quedaria de la següent manera
3.3V *--* 5V L *--* R *--* GND U *--* *--* D *--* 0 *--* 1 *--* *--* 2 *--* 3 *--* 5 4 *--* ...
PROBLEMA. Els pins 3 i 5 que he associat a left i right (GPIO2 i GPIO3), no funcionen i són inestables. De les tres màquines que he fet el desembre, això no ho he detectat en la primera màquina sinó en la segona i tercera. Això és degut a que aquests pins estan dedicats a I2C (SDA i SCL). Igual que no s'han d'utiltizar els pinso de TXD i RXD, és millor no utilitzar aquests pins. Una possible solució si vull utilitzar aquests pins seria no fer servir pull-up resistors per a aquests pins:
If you use the I2C pins you can omit the pull-up resistors, as these pins already have them.
La solució és utilitzar altres pins, com el GPIO 8 i 7. Veure la 2a prova.
NOTA IMPORTANT. Els pins GPIO2 i GPIO2 no funcionen si està habilitat I2C. S'ha de deshabilitar I2C a raspi-config, i ja es poden utilitzar aquests pins.
NOTA. Més explicacions sobre els pins i les pull-up resistors a Raspberry_Pi#Primer_exemple_GPIO_.28General_Purpose_Input.2FOutput.29. FiXar-se que els pins GPIO es poden configurar com a entrada/sortida i aquí no ho faig. Això deu ser perquè el mateix pikeyd ja s'encarrega de configurar els pins llistats en el fitxer de confiugració com a entrades.
RPi model B/B+. 2a prova
nota: no utilitzo els pins SDA i SCL del protocol I2C.
Els models revB i revB+ són compatibles en els pins.
pinheader BCM GPIO 7 (up) 4 11 (down) 17 13 (0) 27 15 (1) 22 19 (2) 10 21 (3) 9 23 (4) 11 22 (5) 25 24 (left) 8 26 (right) 7
#joy.cfg #format: # [keycode from /usr/include/linux/input.h] [whitespace] [GPIO pin no] # Not limited to a single key. A GPIO press will emit all defined keys in order. KEY_LEFT 8 KEY_RIGHT 7 KEY_UP 4 KEY_DOWN 17 KEY_0 27 KEY_1 22 KEY_2 10 KEY_3 9 KEY_4 11 KEY_5 25
nota: recordar fer $ sudo modprobe uinput
nota: Important! No utiltzar els pins de TXD i RXD (GPIO14 i GPIO15). Com a mínim, el GPIO14 no funciona (suposo perquè al ser de comunicació sèrie és dedicat).
El pinout per al cas pràctic de la màquina bartop quedaria de la següent manera
3.3V *--* 5V *--* *--* GND U *--* *--* D *--* 0 *--* 1 *--* *--* 2 *--* 3 *--* 5 4 *--* L *--* R ...
NOTA. advancemame funciona molt bé, excepte que he tingut problemes en la configuració dels botons (altra gent li havia passat), fins el punt que he hagut d'abandonar aquest frontend i programar un frontend propi: joanillo_arcade_frontend (veure més avall).
Projecte advancemame'. És un projecte GPL, que no és el mateix que mame4all
advmenu és el frontend basat en SDL que utilitza advancemenu però també es pot utilitzar per a MAME (i mame4all). Podem descarregar el codi per estudiar-lo.
El menú de Mame4All no és prou maco... solució: utilitzar el menú de Advancemame:
I am using Mame4All, but like you, I also hate the menu for it. So i added M4A to advance menu so that I can boot up directly to that. All of the emulators I am using are in the one single menu. Here is how I did it (I have had help from others to pull this off!); Bootup to AdvMenu 1. edit /home/pi/.profile 2. remove/add advmenu from/to the bottom of the script a. default = python /home/pi/pimame_files/menu.py Add Mame4All to AdvanceMenu 1. Edit advancemenu.rc 2. Insert the following lines; emulator "mame4all” generic "/home/pi/emulators/mame4all-pi/mame" "%s" emulator_roms "mame4all" "/home/pi/emulators/mame4all-pi/roms" emulator_altss "mame4all" "/home/pi/.advance/snap" emulator_include "mame4all" emulator_attrib "mame4all" missing exclude
Com es fa? No era tan fàcil com es comenta...
$ whereis advmenu advmenu: /usr/local/bin/advmenu
editem .profile i fiquem advmenu en comptes de /home/pi/pimame_files/menu.py, d'aquesta manera aconsegueixo arrencar directament amb advmenu. Ara falta configurar-lo per tal de dir-li que l'emulador que utilitza és el de mame4all, i on són les ROMs de mame4all.
editem .advance/advmenu.rc
al final de tot fiquem:
emulator "mame4all" generic "/home/pi/emulators/mame4all-pi/mame" "%s" emulator_roms "mame4all" "/home/pi/emulators/mame4all-pi/roms" emulator_altss "mame4all" "/home/pi/.advance/snap" (podem comentar o no ''emulator "advmame" advmame "advmame" ""'' que està cap a la línia 40)
El projecte Advancemenu està fet amb SDL, igual que jo ho volia fer, i de totes maneres no aconsegueix pel que veig una transició del menú SDL al joc de forma seamless, sinó que es veu text per pantalla mentre carrega el joc...
Aquest fitxer de configuració és la mare dels ous. Aquí es guarda la informació dels jocs que classifico com a molt bons/bons/dolents, i el tipus de joc (arcade,...). Per ex, a sota de tot:
emulator_attrib "mame4all" missing exclude game "mame4all/720r3" "" "Puzzle" 0 0 "" game "mame4all/centipd2" "" "Arcade" 0 0 "" game "mame4all/centiped" "" "Arcade" 0 0 "" game "mame4all/cracksht" "Very Good" "" 0 0 "" game "mame4all/crossbow" "Very Good" "" 0 0 "" game "mame4all/ddragonw" "Very Good" "Breakout" 0 0 "" game "mame4all/galaga88" "Very Good" "" 45 0 ""
Per tant, he d'estudiar molt bé quins botons he de fer servir per poder triar en el menú per tipus de joc o grup. També és interessant el botó predefinit TAB que mostra diferents visions del menú (amb més text, o més gràfics). Per tant, s'ha d'estudiar bé la disposició mínima dels botons, cercant la simplicitat. Això és el que es discuteix en el següent apartat.
So en background
Getting AdvMenu background sound working
Sembla ser que el problema de què soni malament és de la RP i no del advancemenu.
D'entrada, per fer funcionar el so he d'editar el fitxer .advance/advmenu.rc i editar la part que posa sound_background...
Però el tema és que speaker-test ja sona fatal per reproduir un wav, així doncs, és un tema de la RP.
$ spaker-test -t sine -f 440
sona bé.
aplay també sona bé:
$ aplay /usr/share/sounds/alsa/Front_Center.wav
i speaker-test també funciona, només calen les opcions correctes:
$ aplay -Dhw:0 -t wav -w /usr/share/sounds/alsa/Front_Center.wav $ aplay -t wav -w /usr/share/sounds/alsa/Front_Center.wav
Per tant, no és un tema de la RP, sinó de què advmenu no sap reproduir el so amb analog output. Haurem de mirar el codi font i veure quina comanda llença per reproduir els fitxers wav/mp3.
Encara no ho he solucionat, però a mi el que m'interessa no és el background, sinó el screen-saver. Configuro el screen-saver de manera que arrenqui un joc aleatòriament, i com que la majoria de jocs tenen musiqueta, d'aquesta manera aconsegueixo tenir so de fons.
Recordatori tecles
Recordatori de tecles bàsiques per jugar amb mame4all:
for player 1 you can use the keys: 1 Play. 5 Insert coin. ARROW Move. CTRL First button. ALT Second button. SPACE Third button. for player 2 you can use the keys: 2 Play. 6 Insert coin. R, F, D, G Move. A First button. S Second button. Q Third button.
A mi només m'interessa el primer jugador.
Tecles i botons que necessitaré. Discussió
Els botons que necessitaré té dues parts:
- botons per al frontend, el que trio és advmenu (advancemenu)
- botons per a jugar amb mame4all
Una cosa són els botons disponibles i la seva coniguració per defecte. Una altra cosa és les noves assignacions que puc fer i les funcionalitats de les que en puc prescindir, de manera que puc obtenir una nova disposició de botons mínima.
en el fitxer .advance/advmenu.rc trobem la configuració dels botons:
event_assign help f1 event_assign group f2 event_assign type f3 event_assign exclude f4 event_assign sort f5 event_assign setgroup f9 event_assign settype f10 event_assign runclone f12 event_assign command f8 event_assign menu backquote or backslash event_assign emulator f6 event_assign rotate 0_pad event_assign lock scrlock event_assign preview space event_assign mute period_pad
group fa referència a jocs bons, normals o dolents. type fa referència al tipus de joc: arcade, fighter,...
d'aquests m'interessa:
ESC Enter F2: next group F3: next type F5: sort method arrows
són 5 botons
jugar amb les ROMs de mame4all
Per canviar les tecles dels jocs NO hem de mirar l'arxiu ~/emulators/mame4all-pi/mame.cfg.
En realitat dins la carpeta cfg/ (~/emulators/mame4all-pi/cfg) tenim el fitxer default.cfg i un cfg per a cada joc que juguem (per ex, galaga88.cfg). I és que quan estem a mame4all podem accedir amb el TAB a la configuració del Input, ja sigui configuració general (que edita default.cfg), o configuració per al joc en concret. És aquí que hem d'editar.
A mí les tecles que m'interessen són:
tecla 5: insert coin -> reassignada a tecla Enter tecla 1: 1 player -> reassignada a tecla Enter Left Ctrl: Foc1 LALT (Left Alt): Foc2 Space: Foc 3 Escape: sortir del joc Tab. Per accedir al menú del joc. Enter Si vull utilitzar el Tab, també necessito el Enter Pause: P (per aturar el joc). Puc prescindir-ne
Per tant, les tecles que necessito són Enter, Left Ctrl, LALT, Space, Escape i Tab, i així s'han de configurar en el fitxer default.cfg (però com que aquest fitxer no és de text, s'ha de fer manualment des del joc).
Ara bé, com que molts jocs no utilitzen la tercera tecla de foc, per a aquests jocs és pot configurar l'espai a la pausa del joc.
Conclusió: són 6 tecles, i puc accedir al menú del joc (TAB). No tinc opció a la pause del joc, excepte en els casos en què no hi hagi Foc3.
Plantilla dels botons
ESC TAB ENTER ====================== FIRE 1 FIRE 2 FIRE 3 FAV CAT SORT
- FAV: favorits, en comptes de group
- CAT: Category, en comptes de type
projecte joy2key_joanillo.c
Així doncs, al final el codi queda (v1.0.0):
button_actions[0] = KEY_ESC; button_actions[1] = KEY_TAB; button_actions[2] = KEY_ENTER; button_actions[3] = KEY_LEFTCTRL; button_actions[4] = KEY_LEFTALT; button_actions[5] = KEY_SPACE; button_actions[6] = KEY_7; button_actions[7] = KEY_8; axis_actions[0][0] = KEY_LEFT; axis_actions[0][1] = KEY_RIGHT; axis_actions[1][0] = KEY_UP; axis_actions[1][1] = KEY_DOWN;
codi: Fitxer:Joy2key joanillo.zip
Font d'alimentació, monitor, amplificador
L'amplificador de so que tinc marca 12V/3A. L'he provat amb la font d'alimentació i ni de bon tros gasta 3A. De totes maneres, he d'alimentar també el monitor, que serà de 12V (Cash Converter, que són més barats que els normals).
He d'alimentar tot el projecte amb un 12V regulated power supply, i crec que aquest valdrà:
AC-DC Regulated Power supply Ex-Pro® - 12V DC, 3.3A (3300mA) - 2.5mm Connector
que el preu està molt bé (10e)
Per alimentar la RP necessito un conversor de 12V a 5V: Car Power Supply DC/DC Regulator Converter 12V to 5V 3A 15W
- http://www.ebay.co.uk/itm/Car-Power-Supply-DC-DC-Regulator-Converter-12V-to-5V-3A-15W-/230873115373?
però potser amb una sola compra ho tinc tot: HDD POWER SUPPLY FOR HARD DRIVE MOLEX AC 12V+5V 2A
i només són 5 euros
La idea és calcular quan consumeix el monitor de 12V i l'amplificador de so, per veure si amb una font d'alimentació de 2A com aquesta en tinc prou. Ja ho he fet: el monitor i l'amplificador de so consumeixen 1.3-1.4 A, i per tant ja puc comprar aquest power supply anterior. Sobra 1A, i això és el que es recomana per alimentar la RP. En teoria amb 750mA n'hi ha prou, però millor 1A. O sigui que en teoria amb aquesta configuració en tinc prou. (El que marca la referència de la font d'alimentació que m'ha arribat són 2,5A i no 2A com diu l'enllaç i es veu a la foto).
nota: la RP l'alimentaré a partir dels pins GPIO (http://pi.gadgetoid.com/WiringPi-GPIO-Pinout.png?v=1). La RP, jugant al joc 1942, em consumeix 0,5A. Per tant, amb la font d'alimentació que tinc de 2,5A puc fer funcionar el monitor, l'amplificador de so (a 12V) i la RP (a 5V), tot junt. Comprovat. A més, em sobren 0,5 A que puc fer servir per alimentar una tira de LEDs per a iluminar el marquee.
Frontend joanillo_arcade_frontend
Després d'utilitzar advancemame (advancemenu) i de barallar-m'hi molt, i després de provar diferents alternatives exposades a:
Finalment m'he decidit a programar el meu propi frontend. (/home/joan/MAME/joanillo_arcade_frontend)
- Descàrrega: http://wiki.joanillo.org/index.php/Fitxer:Joanillo_arcade_frontend.zip
- Video: http://youtu.be/A03xoSMrxPM
Canvi del volum des del teclat (octubre 2016)
Partim de la versió 1.0.12.
Per canviar el volum (pujar o baixar):
$ amixer set Master playback 2dB+ $ amixer set Master playback 2dB+
Per saber el volum:
$ amixer get Master Simple mixer control 'Master',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined Playback channels: Mono Limits: Playback 0 - 127 Mono: Playback 114 [90%] [-9.75dB] [on]
En el front-end he de poder fer les dues coses: canviar el volum, i saber el volum on estic.
El codi mínim per saber el volum que tinc:
//http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c-using-posix #include<iostream> #include<fstream> #include<string> #include<cstdlib> #include<sstream> std::string ssystem (const char *command) { char tmpname [L_tmpnam]; std::tmpnam ( tmpname ); std::string scommand = command; std::string cmd = scommand + " >> " + tmpname; std::system(cmd.c_str()); std::ifstream file(tmpname, std::ios::in ); std::string result; if (file) { while (!file.eof()) result.push_back(file.get()); file.close(); } remove(tmpname); return result; } //for cygwin int main(int argc, char *argv[]) { std::string bash = "amixer get Master"; std::string in; std::string s = ssystem(bash.c_str()); std::istringstream iss(s); std::string line; std::size_t vol_found1, vol_found2; std::string str_vol; while ( std::getline(iss, line) ) { //std::cout << "LINE-> " + line + " length: " << line.length() << std::endl; vol_found1 = line.find('['); //if (vol_found1!=std::string::npos) //std::cout << "[ found at: " << vol_found1 << '\n'; vol_found2 = line.find(']'); //if (vol_found2!=std::string::npos) //std::cout << "] found at: " << vol_found2 << '\n'; if (vol_found1!=std::string::npos && vol_found2!=std::string::npos) { str_vol = line.substr(vol_found1+1,vol_found2-vol_found1-1); std::cout << "Vol: " << str_vol << '\n'; } } return 0; }
Per compilar:
$ g++ -o prova prova.cpp /tmp/cc9Lqrx1.o: In function `ssystem[abi:cxx11](char const*)': prova.cpp:(.text+0x31): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
Dóna un warning, que hauria de resooldre.
Els canvis (resumits) a implementar en el front-end són:
#include <cstdlib> -> necessari per fer ssystem en el retrieve del volum #define VOL_X 900 #define KEY_VOL_INC SDLK_8 #define KEY_VOL_DEC SDLK_7 línia 215 void canvi_vol (int); Abans del main: std::string ssystem (const char *command) { char tmpname [L_tmpnam]; std::tmpnam ( tmpname ); std::string scommand = command; std::string cmd = scommand + " >> " + tmpname; std::system(cmd.c_str()); std::ifstream file(tmpname, std::ios::in ); std::string result; if (file) { while (!file.eof()) result.push_back(file.get()); file.close(); } remove(tmpname); return result; } En la definició de les superfícies i rectangles: SDL_Surface *srf_vol; SDL_Rect rect_vol; línia 1086 (utilitzo dues tecles per tal d'incrementar i decrementar el volum) case KEY_VOL_INC: //SDLK_8 if(key.state == SDL_PRESSED) { canvi_vol(1); break; } case KEY_VOL_DEC: //SDLK_7 if(key.state == SDL_PRESSED) { canvi_vol(0); break; } línia 1554 (al final de tot): void canvi_vol (int mode) { string str_canvi_vol = "amixer -q set Master playback 2dB"; if (mode==0) { str_canvi_vol += "-"; } else { str_canvi_vol += "+"; } //cout << str_canvi_vol << endl; system((str_canvi_vol).c_str()); std::string bash = "amixer get Master"; std::string in; std::string s = ssystem(bash.c_str()); std::istringstream iss(s); std::string line; std::size_t vol_found1, vol_found2; std::string str_vol; while ( std::getline(iss, line) ) { //std::cout << "LINE-> " + line + " length: " << line.length() << std::endl; vol_found1 = line.find('['); //if (vol_found1!=std::string::npos) //std::cout << "[ found at: " << vol_found1 << '\n'; vol_found2 = line.find(']'); //if (vol_found2!=std::string::npos) //std::cout << "] found at: " << vol_found2 << '\n'; if (vol_found1!=std::string::npos && vol_found2!=std::string::npos) { str_vol = "Vol: " + line.substr(vol_found1+1,vol_found2-vol_found1-1) + " "; //std::cout << str_vol << '\n'; //i ara canviem el valor srf_vol = TTF_RenderUTF8_Blended(font1, str_vol.c_str(), fgcolor_negre ); rect_vol.x = VOL_X; rect_vol.y = CAPCALERA_Y; rect_vol.w = srf_vol->w; rect_vol.h = srf_vol->h; SDL_FillRect (screen, &rect_vol, color_fons_taronja); SDL_BlitSurface(srf_vol,NULL,screen,&rect_vol); SDL_UpdateRect(screen,0,0,0,0); SDL_FreeSurface(srf_vol); } } }
Posar un temporitzador en els emuladors
El moneder es posa en el front-end, i dóna un temps per jugar amb els emuladors. Està explicat a:
ROMs mame4all
Les ROMs que valen per a 'mame4all són les de la versió 0.37b5. Mame4all uses mame 0.37b5 compatible roms and advancemame uses mame 0.106 compatible roms. Mame4all seems to run cleaner on Raspberry pi, but has less features.
Per descarregar-se les ROMs:
- http://www.mediafire.com/?sya43jt3qc6kbhr
- http://www.mediafire.com/?gjua5vy1xzx8xbs
- http://www.mediafire.com/?ze6fxcvir911c5c
- http://www.mediafire.com/?37el3venee14lyk
i també:
Però el pacplus i cap de la sèrie de Pacman funcionava, i el pacplus l'he agafat de home.online.no/~mrroboto/pacmania/the-emulators/the-roms.htm
Classificació en categories
És una mica complicat classificar les ROMs en categories. De totes les categories proposades per advmenu, en principi em quedo:
Arcade Breakout Computer? Console? Fight Filler Flipper Gun Puzzle Racing Sport
De totes maneres, no em cal ajustar-me a les categories de advmenu, sinó que amb el fitxer de configuració jo puc tenir les meves categories.
Cerco una mica d'informació sobre video games genres:
- http://www.thocp.net/software/games/reference/genres.htm
- http://vsrecommendedgames.wikia.com/wiki/A_List_and_Guide_to_Game_Genres
- Shooter: asteroids, galaga (però Galaga entraria també dins de Flight)
- First-Person-Shooter (or FPS):
- Adventure: Adventure is in it's purest form a game that takes you on a journey with emphasis on locales and excitement and usually encourage freedom of exploration.
- Platform:Games within this genre are usually identified by navigating environments that require timing and jumping in order to reach a desitination while avoiding and/or disposing of enemies. Involves moving a character in a 2D or 3D environment to overcome impeding obstacles with physical movement, such as running and jumping
- Puzzle: Tetris, Pacman
- Sports:
- Fighting
- Racing
- Flight
- Pinball
Altres:
- Role-Playing Games (RPGs):
- Casino
No fico Arcade com a tipus
- Beat'em Up: entraria dins de Fighting
- Shoot'em Up: 1943 seria un d'aquests, que representa anar disparant tot el que trobes.
Per tant, en principi aquestes són les categories que ficaré:
Shooter First-Person-Shooter Adventure Platform Puzzle Sports Fighting Racing Flight Pinball
Compilació de mame4all des de les fonts
Jo en principi utilitzava el binari mame ja preparat per a la RPi, però també funciona la compilació des de les fonts. Està explicat aquí:
Ho he hagut de compilar quan he hagut de tocar el codi font en el projecte d'una màquina Arcade amb comptador descendent de temps.
mame.cfg, configuració mame4all
Aquí tenim diferents opcions de configuració, com per exemple rotar el monitor. (si volem rotar el monitor no ho hem de fer aquí, doncs no afectaria al frontend, sinó al fitxer /boot/config.txt).
Si ens els jocs de mame4all no es veu bé la part de dalt o de baix, hem de fer display_border = 24 (en comptes de 0), En el fitxer /boot/config.txt també hi ha la configuració del overscan, però afecta al front-end i d'altres emuladors, però no pas al mame4all.
Incidència Super Pang (desembre 2018)
El Josep del Maestrat em comenta que el Super Pang va molt ràpid. El problema és en el fitxer nvram/spang.nv, que aquí és on es guarda info del joc (segurament el high score també es guarda aquí). La solució és esborrar aquí aquest fitxer. Avís per si torna a passar en aquesta rom o en una altra.
Resum de comandes per configurar pimame (piplay)
En el portàtil:
sudo imagewriter nmap -sP 192.168.1.1-255 ssh pi@192.168.1.38
Expandim el filesystem, i fer overclock a 900MHz
sudo raspi-config
Reiniciar, si no no hi cabran les ROMs.
Paquets a instal.lar:
sudo apt-get install joe sudo apt-get install libsdl-image1.2-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev sudo apt-get install libsdl-gfx1.2-dev (necessari per fer el zoom a ''joanillo_arcade_frontend'')
- configurar el so: mirar més amunt: PiPlay_(abans_PiMAME)#Configuraci.C3.B3_del_so
Que no arrenqui el 'lighttpd (servidor web) en l'inici del sistema:
$ sudo update-rc.d -f lighttpd remove
activar el dispositiu uinput:
sudo modprobe uinput
joy2key_joanillo: copiem l'arxiu del portàtil a la RP, i compilem en la RP (compilem perquè així ens assegurem de què no ens falta cap llibreria)
$ cd projectes/joy2key_joanillo/ $ scp joy2key_joanillo-1.0.0.c pi@192.168.1.38:/home/pi/
i compilo directament en la RP:
gcc -DHAVE_CONFIG_H -I. -g -O2 -MD -MP -MF -c -o joy2key_joanillo joy2key_joanillo-1.0.0.c
nota: no cal crear l'arxiu /etc/udev/rules.d/10-local.rules perquè podem executar joy2key_joanillo com a sudo sense problemes.
Ficar les ROMs a la RP:
En el portàtil scp corregits_pimame.zip pi@192.168.1.38:/home/pi/emulators/mame4all-pi/roms a la RP: ~/emulators/mame4all-pi/roms unzip corregits_pimame.zip mv corregits_pimame/* . rm -R corregits_pimame/
Modificació del fitxer ./profile (l'usuari pi pertany al grup sudo, i puc fer sudo sense que em demani el password). Així m'evito tots els problemes que he tingut amb udev
... #sudo xboxdrv --silent --config /home/pi/pimame_files/xboxdrv_mapping.cfg --dbu #/home/pi/pimame_files/getip.sh #python /home/pi/pimame_files/menu.py sudo /home/pi/joy2key_joanillo & sleep 1 sudo advmenu --cfg /home/pi/.advance/advmenu.rc
Per fer una còpia de seguretat dels fitxers de configuració: (compte no confondre's!!!)
cd /media/93288e64-b04b-4dd9-a45d-0c5925178821/home/joan/ scp pi@192.168.1.34:/home/pi/.advance/advmenu.rc MAME/pimame_advmenu scp pi@192.168.1.34:/home/pi/emulators/mame4all-pi/cfg/* MAME/pimame_cfg
Un cop aquests fitxers ja siguin els correctes i definitius, serà fàcil restaurar la configuració en noves màquines.
Per restaurar els fitxers de configuració:
cd /media/93288e64-b04b-4dd9-a45d-0c5925178821/home/joan/ scp MAME/pimame_advmenu/advmenu.rc pi@192.168.1.34:/home/pi/.advance scp MAME/pimame_cfg/* pi@192.168.1.34:/home/pi//emulators/mame4all-pi/cfg/
joe .profile al final de tot, comentar el menu predefinit i ficar el de advancemenu: sudo advmenu --cfg /home/pi/.advance/advmenu.rc
El perquè sudo està discutit tot seguit, només és pel fet d'habilitar el shutdown.
Habilitar Ctrl+ESC per fer shutdown
No ha sigut fàcil de configurar, perquè shutdown requereix ser root (o executar com a sudo, però el que no es permet és que s'executi com un usuari normal).
El primer de tot és que advmenu s'ha d'executar com a sudo: (i dir-li el fitxer de configuració vàlid)
joe .profile sudo advmenu --cfg /home/pi/.advance/advmenu.rc
En el fitxer de configuració l'opció ha de ser
misc_exit shutdown
En teoria l'opció hauria de ser all, que inclou normal (ESC surt de advmenu) i shutdown (apaga el sistema). Però el tema és de què no funciona, i si vull apagar he de ficar l'opció shutdown. Per tant, ara, quan faci Ctrl+ESC, s'executarà shutdown amb permisos de sudo, i funciona correctament.
Instal.lar la font VideoPhreak.ttf
scp VideoPhreak.ttf pi@192.168.1.34:/home/pi ssh pi@192.168.1.34
En la RP
sudo su mkdir /usr/share/fonts/truetype/500fonts mv /home/pi/VideoPhreak.ttf /usr/share/fonts/truetype/500fonts exit sudo fc-cache -fv
En el fitxer ~/.advance/advmenu.rc es fa referència a aquesta font:
#ui_font auto ui_font /usr/share/fonts/truetype/500fonts/VideoPhreak.ttf
cd pimame_files cp advmenu_background.png advmenu_background.png.old
scp MAME/art_work/fons_pantalla/advmenu_background.png pi@192.168.1.34:/home/pi/pimame_files/advmenu_background.png
Per tal de què el color quedi bé és important anular la transparència:
#ui_translucency 0.6 ui_translucency 0
Fer un backup de la targeta SD
Després de configurar una targeta SD, per no repetir tot el procés anterior, el millor és fer una còpia de la targeta SD a un fitxer imatge, per tal de què sigui fàcil de reinstal.lar. Cercar al Google How do I create a backup image of an SD card, i concretament provar el primer enllaç que em surt:
Per saber on està la targeta SD:
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465,8G 0 disk ├─sda1 8:1 0 461,9G 0 part / ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 3,9G 0 part [SWAP] sdb 8:16 0 465,8G 0 disk ├─sdb1 8:17 0 461,9G 0 part ├─sdb2 8:18 0 1K 0 part └─sdb5 8:21 0 3,9G 0 part sr0 11:0 1 1024M 0 rom mmcblk0 179:0 0 3,7G 0 disk ├─mmcblk0p1 179:1 0 56M 0 part /media/boot └─mmcblk0p2 179:2 0 3,7G 0 part /media/548da502-ebde-45c0-9ab2-de5e2431ee0
Creating a disk image will preserve not only files but also the filesystem structure and when you decide to flash your new SD card, you will be able to just plug it in and it will work. Linux
On Linux, you can use the standard dd tool:
$ dd if=/dev/sdx of=/path/to/image bs=1M
Where /dev/sdx is your SD card. Per tant, el que funciona és:
$ sudo dd if=/dev/mmcblk0 of=/home/joan/MAME/imatge_sd_piplay/imatge_piplay_140714.img bs=1M
El tema és que dd no dóna cap informació de la sortida, i per targetes SD de 8GB o 16GB triga bastant. Per veure el progrés hi ha vàries solucions (google). Per ex:
You can monitor the progress of dd without halting it by using the kill command. To see the progress of dd once it's running, open another terminal and enter:
$ sudo kill -USR1 $(pgrep ^dd)
This will display dd progress in the dd terminal window without halting the process. If you would like to get regular updates of the dd progress, then enter:
$ watch -n5 'sudo kill -USR1 $(pgrep ^dd)'
watch will probe the dd process every -n seconds (-n5 = 5 seconds) and report without halting it.
Per escriure la imatge a la targeta SD s'utilitza imagewriter com ho fem habitualment.
Comprovació de la ISO obtinguda amb el punt de muntatge (TBD)
M'he trobat que quan gravo una targeta SD amb imagewriter tinc fitxers corromputs (imatges que no es carreguen, roms que no es carreguen). No sé si l'error ve de la primera fase de crear el fitxer iso, o de la segona part de passar la iso a una targeta SD. Per tant, necessito saber si els dos processos s'han fet correctament. I això és el que explica l'enllaç, i hi ha un script per automatitzar-lo.
Posem la targeta SD i es munta el sistema d'arxius:
$ md5sum /dev/mmcblk0 e4ed8842677001be97e5a9907436cbe0 /dev/mmcblk0
però aquesta no és la manera correcta de procedir.
$ ls -la imatge_piplay_151105.img -rw-r--r-- 1 root root 7969177600 nov 9 15:44 imatge_piplay_151105.img
Són 7969177600 bytes, i hem de comptar 7969177600 bytes:
sudo dd if=/dev/mmcblk0 bs=2048 count=7969177600 | md5sum 3891200+0 registres llegits 3891200+0 registres escrits 7969177600 octets (8,0 GB) copiats, 456,986 s, 17,4 MB/s 8a94dabc8d3280ff94dba5b6698f0943 -
I ara mirem el md5sum de la imatge que tinc:
$ sudo md5sum imatge_piplay_151105.img d02f3f7c0e01cf80764ba1bd9000bb19 imatge_piplay_151105.img
Haurien de coincidir els dos valors, i no coincideixen, la qual cosa vol dir que la imatge que tinc no és correcta.
Torno a generar la imatge, i ara sí que funciona:
$ sudo md5sum imatge_piplay_151105b.img 8a94dabc8d3280ff94dba5b6698f0943 imatge_piplay_151105b.img
Habilitar/deshabilitar el video de presentació
Prototip primavera 2014
- video: http://youtu.be/dEThqxunKBw
Problemes del cable HDMI to VGA (1a màquina)
Em passa el mateix que a:
Funciona si primer connecto la Rasperry al corrent, i tot seguit enxufo el cable. És un problema de la font d'alimentació.
Així doncs, mirant el fitxer /boot/config.txt, descomento les línies, de manera que pot millorar la sortida a VGA: (aquestes línies estaven comentades en el fitxer original)
# uncomment if hdmi display is not detected and composite is being output hdmi_force_hotplug=1 # uncomment to force a specific HDMI mode (this will force VGA) hdmi_group=1 #hdmi_mode=1 # uncomment to increase signal to HDMI, if you have interference, blanking, or # no display config_hdmi_boost=4
NOTA: és important que hdmi_mode=1 estigui comentat
NOTA: al final deixo aquestes línies comentades, com estava originalment. A vegades funciona, a vegades no. Fins i tot utilitzant un altre monitor que està alimentat directament a la corrent. La conclusió a la que arribo és que la font d'alimentació que tinc no deu donar la talla.
NOTA. Al final funciona sense problemes.
Els diferents modes de video si utilitzo cable HDMI-VGA:
Array de LEDs
ELECT_40:_LED_strip,_tira_de_LEDs#Configuraci.C3.B3_LEDS_m.C3.A0quina_Arcade
Displays a la RPi (diferents solucions)
Compte amb els cables HDMI-VGA que he fet servir. Com es comenta en l'enllaç haurien de ser d'alimentació externa, doncs no es pot esperar que extregui el corrent que necessita del senyal HDMI.
Aprenent dels errors
- el metacril.lat massa prim tendeix a trencar-se. Per tallar metacril.lat o vidre, sempre posar cinta adhesiva per evitar esquerdes.
- En el vinil del marquee no cal tallar arran amb el cutter. Si sobre un tros, pot servir per tapar imperfeccions.
- Sempres fer els forats que s'hagin d'amagar amb un vis suficient, de manera que es pugui amagar bé.
- Utilitzar silicona blanca per tapar els forats, va bé.
- Per posar els vinils, fer servir la tècnica de l'aigua i el sabó, i una bona rasqueta metàl.lica i flexible. Eliminar abans les impureses amb paper de vidre. Netejar bé el vinil.
- No utilitzar DM en les guies, fer-les amb fusta bona. Si hem de clavar forats en el DM, que el forat travessi transversalment les microcapes.
- No estalviar en tornilleria. Tenir tornilleria de diferents mides, la més petita també.
- Alhora d'utilitzar la fresadora per fer els perfils, suposo que es pot utilitzar baixes revolucions.
- No estalviar en els LEDS de l'array del marquee. He utilitzat 210 ohm per cada tira de 3 LEDs, però els càlculs em deien 150 ohm (més iluminació).
- Entre l'array de LEDs i el marquee, pintar de blanc (o fins i tot paper d'alumini) per tal de guanyar lluminositat.
- Els artwork que sigui com a mínim de 200 dpi.
- Corregir l'angle del monitor, de manera que la visió sigui allò més òptima.
- La pantalla i el metacril.lat/vidre protector hauria de ser de les últimes coses que fico, sobretot després de pintar.
- Compte amb la pintura en els forats dels altaveus.
- Bola del joystick: que no es desenganxi.
- Millorar el botó del volum.
- Vinil dels mandos: treure TAB i posar PAUSE
- Vinil dels mandos: Afegir sota de Player1: START
- Vinil dels mandos: Treure SORT
- Vinil dels mandos: Que quedi clar el shutdown amb unes fletxetes
Pressupost
- Raspberry Pi
- targeta SD (ha de ser classe 10)
- Font d'alimentació
- Monitor
- Cable HDMI to VGA (o altres solucions)
- Amplificador de so
- Joystick i botons
- Interfície USB de joystick i botons
- adhesius / vinil. A Solgraf són 35e/m2. A la pràctica, són 20e per màquina. Al carrer Sant Lluís/Torrent de les Flors, el mínim són 40cmx50cm, 12e + iva, per davant o per darrere. A www.pixartprinting.es serien uns 7,5e el m2.
- LEDs
- altres: fustes, metacril.lat, tornilleria, pintura, cable, fungibles, interruptor.
Màquines Nadal 2014
Compro aquestes fonts d'alimentació duals 12V-5V. Els 5V per la RPi, i els 12V pels leds. Les pantalles de què disposaré poden ser de 220V o de 12V, i els altaveus en principi són de PC (220V).
Pagament directe per Paypal: 6 unitats, 43e (7.2 e/ unitat)
- joystick + 6 botons: 24e. http://www.ebay.es/itm/KIT-ARCADE-JOYSTICK-BOTONES-COMPLETO-/171048746895?pt=LH_DefaultDomain_186&hash=item27d34cbf8f
- 100 LED BLANCO 5mm 20000 MCD CRISTAL ALTO BRILLO: 4,84e. http://www.ebay.es/itm/100-LED-BLANCO-5mm-20000-MCD-CRISTAL-ALTO-BRILLO-white-blanc-weis-weib-5-mm-/201167321857?ssPageName=ADME:L:OC:ES:3160
important. En els nous models de la RPi (B+ i A+) han millorat el so, per tant no s'espera que hi hagi els problemes de soroll del primer prototipus.
Protocol de fabricació
- Tallar les fustes amb la plantilla. Tinc fustes de contraxapat de 1cm que va molt bé.
- Construeixo i ensamblo la fusta on van els mandos i la fusta on va el control del volum, units per un angle de 70 graus aprox. Fresadora, llima elèctrica, cola, dos escaires petits que els hi faig l'angle de 70 graus, i tornillos ben petits però forts.
- Tinc els monitors. Tallo les fustes a 40 cm d'ample i buido la part de la pantalla. Freso la part de dins on anirà la pantalla. Tallo un vidre, i monto l'estructura per tal de què la pantalla quedi ben subjecta. Veure foto. Es munta i es torna, doncs per pintar ha d'estar desmuntat. (la part de muntar l'estructura i tallar el vidre es pot deixar pel final de tot. El vidre no cal que estigui ajustat del tot. Amb què ocupi una mica més que el monitor n'hi ha prou).
- Munto la fusta de la pantalla sobre els dos laterals, que clavo amb tres tornillos avellanats des dels laterals.
- Un cop muntada la pantalla, ara ja es poden clavar els suports de fusta per als mandos, volum, altaveus, superior, posterior i terra (fins ara no havíem muntat els suports).
- Tallo la fusta superior. Munto la fusta. Atornillo des de sota, no cal avellanar.
- Tallo i munto la fusta inferior. Un cop muntades les fustes superior i inferior ja tinc una estructura rígida que s'aguanta, i puc procedir a la fusta dels mandos i altaveus, que necessiten un ajustament més fi.
- Ajusto la fusta de mandos i volum (que vaig tallar una mica més alta i fonda: 41cm en comptes de 40cm). La fusta té una mica de perfil per tal de què s'ajusti perfecte a la fusta de la pantalla.
- Tallo i ajusto la fusta d'altaveus. La fusta té una mica de perfil per tal de què s'ajusti perfecte a la fusta de la pantalla. Puc fer els forats per als altaveus. Munto la fusta.
- Tallo el metacril.lat de la marquesina. Una mica de perfil per tal de què s'ajusti perfectament. El metacril.lat té els cantos amagats. En principi no cal fer forats a la marquesina, pot anar enganxada.
- Tallo el metacril.lat dels mandos. Una mica de perfil per tal de què s'ajusti perfectament.
- Tallo i munto la fusta posterior. (això es pot fer al final de tot)
- Tallo i ajusto la fusta dels LEDs. Seria convenient de què la fusta fos blanca (o es pot pintar). (Ho puc fer més cap al final).
- Ja puc anar pels vinils (els vinils ja estan ben ajustats a les fustes). Enganxo els vinils als mandos i a la marquesina. Retallo el sobrant.
- Amb l'ajuda d'un sargent, munto el metacril.lat i la fusta dels mandos, i ja puc fer els forats del joystick i botons. Per fer els forats al metacril.lat, important ficar cinta aïllant. Millor si el metacril.lat té una certa consistència. Faig els forats dels tornillos al metacril.lat avellanats. Torno a desmuntar. Per fer els forats dels botons, que estigui ben centrat el punt. Primer atravesso amb una broca fina de ferro.
- Tapar forats i arreglear impureses amb pasta. (procés per millorar, buscar una bona masilla per fusta).
- Ja puc pintar tota la fusta. (selladora i pintura).
- Munto el joystick i els botons, amb els cables, fins al connector de la RPi. Munto el control de volum. Puc deixar el mòdul preparat per muntar.
- Abans de continuar muntant la pantalla, altaveus, etc, seria bo comprovar que no hi ha problemes i que tot funciona correctament. Ens hem d'assegurar que el monitor i el cable HDMI-VGA funcionen correctament. Ajustar la resolució de la pantalla. Ajustar la geometria del front-end. Assegurar que el so i els altaveus funcionen correctament. Que la font d'alimentació no dóna problemes.
- Munto els LEDs.
- Muntatge final. Es munten els altaveus, la pantalla sencera. Per fer-ho hauré de desmuntar la fusta de sobre i la de sota. Amb comoditat puc muntar la pantalla i els altaveus, i també és el moment de ficar la RPi, font d'alimentació i amplificador de so. Munto el mando. Es munta la marquesina.
- Fusta de connexió: una fusta sòlida i una esquadra sòlida per muntar el connector i l'interruptor de 220V. (Això ho havia pogut fer abans). Fer un forat a la fusta posterior que s'ajusti a la fusta de connexió.
- Connexions finals, comprovació i tancar la fusta posterior.
A millorar
- pasta per les irregularitats de la fusta.
- llimar amb una llima elèctrica de punta per accedir a racons.
- Accés als tornillos de la tapa superior.
Problema RPi i monitor al mateix temps
Amb un sol interruptor, s'alimenta al mateix temps la RPi i el monitor. Això ja em va donar molts problemes en la primera màquina, pensant que era una font d'alimentació no prou potenta.
Però aquest és un problema que no és meu:
NOTE: NOOBS 1.3 should eliminate the problem that previous versions of NOOBS/Raspbian had in that the monitor would not display anything if the PI and monitor were switched on at the same time. In versions of NOOBS prior to 1.3 it is important to power up the monitor first and then apply power to the Raspberry PI to ensures that the PI detects the monitor. A setting in a file can be changed to allow the PI and monitor to boot at the same time. This setting is now the default in NOOBS 1.3.
Aquí no diu la solució. En prinicipi la solució, com es comenta a:
és posar
- hdmi_force_hotplug=1 (això ja ho feia)
- hdmi_drive=2 sets the Raspbmc to normal HDMI mode (Sound will be sent if supported and enabled). Without this line, the Raspbmc would switch to DVI (with no audio) mode by default.
NOTA. No ha funcionat. Finalment la solució en la màquina 2 ha estat posar un doble interruptor. Primer engego la RPi, i després d'uns segons, engego el monitor.
NOTA. L'opció hdmi_safe=1 és traidora, és la que fa que es pengi el video i no acaba d'arrencar la màquina.
Moneder electrònic, coin acceptor. Febrer 2016
provaré amb aquest moneder:
que es pot trobar més barato a la Xina. És el model S-818. Costa una mica de trobar informació, però bàsicament està explicat aquí:
Té les funcions bàsiques que ha de tenir: filtre físic per diàmetre, i filtre electrònic per solenoide. Per saber quina és la moneda correcta, primer s'ha de programar ensenyant-li la moneda.
Embalatge. Caixes de cartró. Enviament paqueteria
Les mides de la caixa d'una bartop 2P són:
56 ample 44 fondo 66 alt
i per tant, les mides del cartró que necessito són (suposem que la pestanya és de 10cm):
56*2+44*2+10 = 210 44+44+66+2*10= 174
Pesa 19Kg. A Envialia (C/Còrsega entre Bailén i Girona), els costos d'enviar-ho a la província de Castelló són 39,51e (tres dies), i 66,46e (servei 24h, abans de les 19h de l'endemà). Preus de maç 2016
Geometria joanillo arcade frontend
Per a pantalles de 19 i entrada DVI digital:
23 20 180 800 40 40 900 120 390 30 800 420 33 30 20
creat per Joan Quintana Compte, gener 2014, juny 2014, novembre 2015, febrer 2016