midival
midival é un controlador midi onde se usa como interface un pinball de construcción propia
 midival é un controlador midi donde se usa como interface 
 un pinball de construcción propia.
 Naceu como un traballo conxunto de Erick Arreola, Elena Baraut, Íngrid 
 Baraut e eu mesmo, a comezos do 2005.
mecánica
 O Pinball está feito de madeira e con restos dun pinball de xoguete. 
 Tamén usamos gomas para o mecanismo das palancas de disparo, gomas 
 anchas para as paredes de propulsión, tacos para os leds e muelles 
 para os pibotes. Contamos coa axuda de Josep Baraut e Teresa Orriols para 
 todo o proceso de carpintería.
 Para o deseño da interface, partimos dos nosos recordos sobre pinballs 
 cos que xogamos e fomos adaptándoos ás solucións 
 mecánicas que nos ofrecían Josep e Teresa, ás necesidades 
 dos sensores, ao circuíto e á bola e aos recursos 
 materiais dos que dispoñiamos.
electrónica
Para o circuíto, o primeiro que fixemos foi conectar 
 cada sensor por separado no BasicStamp, para testealos e ver que valores 
 daban ao ser activados pola bola. A partir de aí estruturamos 
 o circuíto tendo en conta o número de sensores e o número 
 de pins dispoñibles no Basic.
o circuíto do pinball conta con:
 + sensor de flexión para a rampa de saída.
 + sensor de posición para a ponte.
 + Piezoeléctrico para as dianas, os pibotes e as paredes de propulsión.
 + Pulsador de diana.
 + Potenciómetro.
 + Catro leds nos tacos.
 + Sensores de muelles, con leds, reciclados do pinball de xoguete.
programación
 O programa do Pinball consiste en primeiro lugar en recoller os valores 
 dos sensores a través do BasicStampII con instrucións como 
 RCTIME e BUTTON para mandalas despois a MidiPoet -programa deseñado 
 por Eugenio Tisselli, utilizado nesta ocasión como xerador de imaxes-. 
 As mensaxes midi envíanse desde o Basic coa instrución SEROUT e 
 MidiPoet recolle estes datos, transformándoos en valores que controlan as 
 imaxes (velocidade, frames, tamaño, orde de reprodución, 
 etc…). A mesma mensaxe midi é mapeada polo PureData para enviar 
 información cara un sintetizador virtual, ou calquera outro programa 
 de audio en vivo como Audiomulch.
código do Basic Stamp
"{$STAMP BS2}
 "{$PBASIC 2.5}
 btwk VAR Byte
 btwk=0
 pib3 VAR Word
 pib4 VAR Word
 pib5 VAR Word
 pib6 VAR Word
 pib7 VAR Word
 flex VAR Word
 posicion VAR Word
 potenciometro VAR Word
 baudmode CON 12
 midinoteon CON 144
 midiconchange CON 176
 midiprogchange CON 192
 inicio:
 HIGH 2 "potenciometro
 HIGH 3 "pibote3
 HIGH 4 "pibote4
 HIGH 5 "pibote5
 HIGH 6 "pibote6
 HIGH 7 "pibote7
 HIGH 14 "posicion
 HIGH 15 "flex
 HIGH 8 "leds
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 2,1,potenciometro
 IF potenciometro =1 THEN saltarpotenciometro
 SEROUT 1, baudmode, [ midinoteon, potenciometro/5, 120]
 DEBUG DEC ? potenciometro/5
 saltarpotenciometro:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 3,0,pib3
 IF pib3 =1 THEN saltarpib3
 SEROUT 1, baudmode, [ midinoteon+1, 1, 120]
 DEBUG DEC ? pib3
 saltarpib3:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 4,0,pib4
 IF pib4 =1 THEN saltarpib4
 SEROUT 1, baudmode, [ midinoteon+2, 8, 120]
 DEBUG DEC ? pib4
 saltarpib4:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 5,0,pib5
 IF pib5 =1 THEN saltarpib5
 SEROUT 1, baudmode, [ midinoteon+3, 13, 120]
 DEBUG DEC ? pib5
 saltarpib5:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 6,0,pib6
 IF pib6 =1 THEN saltarpib6
 SEROUT 1, baudmode, [ midinoteon+4, 25, 120]
 DEBUG DEC ? pib6
 saltarpib6:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 7,0,pib7
 IF pib7 =1 THEN saltarpib7
 SEROUT 1, baudmode, [ midinoteon+5, 32, 120]
 DEBUG DEC ? pib7
 saltarpib7:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 14,1,posicion
 IF posicion >780 THEN saltarposicion
 SEROUT 1, baudmode, [ midinoteon+6, posicion/6, 120]
 DEBUG DEC ? posicion
 saltarposicion:
 BUTTON 0,0,254,0,btwk,1,diana
 BUTTON 9,0,0,0,btwk,1,nobout9
 BUTTON 10,0,0,0,btwk,1,nobout10
 BUTTON 11,0,0,0,btwk,1,nobout11
 BUTTON 12,0,0,0,btwk,1,nobout12
 BUTTON 13,0,0,0,btwk,1,nobout13
 RCTIME 15,1,flex
 IF flex <3700 THEN saltarflex
 SEROUT 1, baudmode, [ midinoteon+7, flex/250, 120]
 DEBUG DEC ? flex
 saltarflex:
 GOTO inicio
 nobout9:
 SEROUT 1, baudmode, [ midinoteon+8, 50, 120]
 DEBUG "999999999999999999999999999999"
 GOTO inicio
 diana:
 SEROUT 1, baudmode, [ midinoteon+9, 1, 120]
 DEBUG "ffffffffffffffffffffffffffffffff"
 GOTO inicio
 nobout10:
 SEROUT 1, baudmode, [ midinoteon+8, 10, 120]
 DEBUG "101010101010101010101010101010"
 GOTO inicio
 nobout11:
 SEROUT 1, baudmode, [ midinoteon+8, 20, 120]
 DEBUG "111111111111111111111111111111"
 GOTO inicio
 nobout12:
 SEROUT 1, baudmode, [ midinoteon+8, 30, 120]
 DEBUG "222222222222222222222222222222"
 GOTO inicio
 nobout13:
 SEROUT 1, baudmode, [ midinoteon+8, 40, 120]
 DEBUG "3333333333333333333333333333333"
 GOTO inicio
Programa do MidiPoet














