PiPlay (abans PiMAME)

De wikijoan
Salta a la navegació Salta a la cerca

Contingut

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

(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:

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:

Connexions.jpg
               ______       _______
    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
...

Advancemame, advmenu. Configurar advmenu per utilitzar-lo amb mame4all

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:

  1. botons per al frontend, el que trio és advmenu (advancemenu)
  2. 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.

Botons advancemenu

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

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)

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:

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:

  • 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'')

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

Configuració advmenu.rc i fitxers .cfg

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/

advmenu arrenca en l'inici del sistema

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

canviar advmenu_background.png

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

Bartop pere.JPG

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)

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ó

  1. Tallar les fustes amb la plantilla. Tinc fustes de contraxapat de 1cm que va molt bé.
  2. 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.
  3. 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).
  4. Munto la fusta de la pantalla sobre els dos laterals, que clavo amb tres tornillos avellanats des dels laterals.
  5. 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).
  6. Tallo la fusta superior. Munto la fusta. Atornillo des de sota, no cal avellanar.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. Tallo el metacril.lat dels mandos. Una mica de perfil per tal de què s'ajusti perfectament.
  12. Tallo i munto la fusta posterior. (això es pot fer al final de tot)
  13. 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).
  14. 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.
  15. 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.
  16. Tapar forats i arreglear impureses amb pasta. (procés per millorar, buscar una bona masilla per fusta).
  17. Ja puc pintar tota la fusta. (selladora i pintura).
  18. 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.
  19. 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.
  20. Munto els LEDs.
  21. 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.
  22. 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ó.
  23. 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

Caixa carto.jpg

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