'{$STAMP BS2p} '-------------------------------------------------------------------------- ' ' ' ----------[ Title ]------------------------------------------------------ ' ' File........... Faces.bsp ' Author......... Thomas Charveriat ' E-mail......... tc262@columbia.edu ' Co-Author...... Frank Plant ' E-mail......... plantlife@compuserve.net ' Sound Design... Denis Menard ' E-mail......... denism79@hotmail.com ' WWW............ http://www.montcada5.com ' Date........... NOV 2002- Last Revision MAY 2004 ' ' ----------[ Program Description ]---------------------------------------- ' 'A torch flashed at a square panel standing vertically on the floor, 'produces the sound of human onomatopoeias which vary depending on the area ' onto which the light is projected. Nine different grimaces are depicted on ' this photographic panel. Each facial expression becomes visible by means ' of a light box mechanism, whenever the flashlight points at it. 'A corresponding onomatopoeia is then produced by a sound sampler. 'The effect is a large human chorus conducted by the action of a flashlight. ' ' ----------[ Diagram ]---------------------------------------------------- ' ' __________ ' SER TX <-| 1 40 |-- PWR ' SER RX ->| 2 39 |-- (PWR) GND ' SER ATN ->| 3 38 |-- RESET ' SER GND --| 4 37 |-- +5V ' SENSITIVITY POT. I/O 0 ->| 5 36 |-> I/O X15 MIDI ' LEDR1 I/O 1 ->| 6 35 |-- I/O X14 N/C ' LEDR2 I/O 2 ->| 7 34 |-- I/O X13 N/C ' LEDR3 I/O 3 ->| 8 33 |-- I/O X12 N/C ' LEDR4 I/O 4 ->| 9 32 |-- I/O X11 N/C ' LEDR5 I/O 5 ->| 10 31 |-- I/O X10 N/C ' LEDR6 I/O 6 ->| 11 30 |-- I/O X9 N/C ' LEDR7 I/O 7 ->| 12 29 |-> I/O X8 RELAY9 ' LEDR8 I/O 8 ->| 13 28 |-> I/O X7 RELAY8 ' LEDR9 I/O 9 ->| 14 27 |-> I/O X6 RELAY7 ' N/C I/O 10 --| 15 26 |-> I/O X5 RELAY6 ' N/C I/O 11 --| 16 25 |-> I/O X4 RELAY5 ' N/C I/O 12 --| 17 24 |-> I/O X3 RELAY4 ' N/C I/O 13 --| 18 23 |-> I/O X2 RELAY3 ' N/C I/O 14 --| 19 22 |-> I/O X1 RELAY2 ' N/C I/O 15 --| 20 21 |-> I/O X0 RELAY1 ' |__________| ' ' BS2p40-IC ' ' ' ----------[ Variables ]-------------------------------------------------- ' Sensor_Face1_result VAR Word Sensor_Face2_result VAR Word Sensor_Face3_result VAR Word Sensor_Face4_result VAR Word Sensor_Face5_result VAR Word Sensor_Face6_result VAR Word Sensor_Face7_result VAR Word Sensor_Face8_result VAR Word Sensor_Face9_result VAR Word sensitivity VAR Word face1_number_of_times VAR Nib face2_number_of_times VAR Nib face3_number_of_times VAR Nib face4_number_of_times VAR Nib face5_number_of_times VAR Nib face6_number_of_times VAR Nib face7_number_of_times VAR Nib face8_number_of_times VAR Nib face9_number_of_times VAR Nib face1_number_of_times=0 face2_number_of_times=0 face3_number_of_times=0 face4_number_of_times=0 face5_number_of_times=0 face6_number_of_times=0 face7_number_of_times=0 face8_number_of_times=0 face9_number_of_times=0 midi VAR Byte 'sensitivity=700 '700 is a good starting point - smaller number is more sensitive ' ----------[ Constants ]-------------------------------------------------- ' Light_Face1 CON 0 Light_Face2 CON 1 Light_Face3 CON 2 Light_Face4 CON 3 Light_Face5 CON 4 Light_Face6 CON 5 Light_Face7 CON 6 Light_Face8 CON 7 Light_Face9 CON 8 Sensitivity_Pot CON 0 Sensor_Face1 CON 1 Sensor_Face2 CON 2 Sensor_Face3 CON 3 Sensor_Face4 CON 4 Sensor_Face5 CON 5 Sensor_Face6 CON 6 Sensor_Face7 CON 7 Sensor_Face8 CON 8 Sensor_Face9 CON 9 ' ----------[ Initialization ]--------------------------------------------- GOTO start '****************** DEBUG "reset",CR '****************** AllLightsON: 'check if all the bulbs work AUXIO HIGH Light_Face1:HIGH Light_Face2:HIGH Light_Face3:HIGH Light_Face4:HIGH Light_Face5:HIGH Light_Face6:HIGH Light_Face7:HIGH Light_Face8:HIGH Light_Face9 PAUSE 5000 '****************** AllNotesOff: AUXIO SEROUT 15,60,0,[176,123,0] 'all notes off '****************** PAUSE 2000 'waiting for the sampler to be ready midi=64 '63=girl:"I'm processing";64=man:"I'm thinking";65=girl:"I'm masturbating";66=man:"I'm having sex";67=man:"I'm digesting" GOSUB Send_midi PAUSE 300 '****************** AllLightsOFF: '****************** AUXIO LOW Light_Face1:LOW Light_Face2:LOW Light_Face3:LOW Light_Face4:LOW Light_Face5:LOW Light_Face6:LOW Light_Face7:LOW Light_Face8:LOW Light_Face9 midi=66 '63=girl:"I'm processing";64=man:"I'm thinking";65=girl:"I'm masturbating";66=man:"I'm having sex";67=man:"I'm digesting" GOSUB Send_midi ' ----------[ Main Code ]-------------------------------------------------- '****************** start: Measure_Sensitivity: MAINIO HIGH Sensitivity_Pot PAUSE 1 RCTIME Sensitivity_Pot,1,sensitivity sensitivity=sensitivity+300 'DEBUG? sensitivity 'GOTO Measure_Sensitivity Measure_Light_Face1: MAINIO HIGH Sensor_Face1 PAUSE 1 RCTIME Sensor_Face1,1,Sensor_Face1_result 'DEBUG? Sensor_Face1_result IF Sensor_Face1_result < sensitivity THEN LightReceived_Face1 Measure_Light_Face2: MAINIO HIGH Sensor_Face2 PAUSE 1 RCTIME Sensor_Face2,1,Sensor_Face2_result 'DEBUG? Sensor_Face2_result IF Sensor_Face2_result < sensitivity THEN LightReceived_Face2 Measure_Light_Face3: MAINIO HIGH Sensor_Face3 PAUSE 1 RCTIME Sensor_Face3,1,Sensor_Face3_result 'DEBUG? Sensor_Face3_result IF Sensor_Face3_result < sensitivity THEN LightReceived_Face3 Measure_Light_Face4: MAINIO HIGH Sensor_Face4 PAUSE 1 RCTIME Sensor_Face4,1,Sensor_Face4_result 'DEBUG? Sensor_Face4_result IF Sensor_Face4_result < sensitivity THEN LightReceived_Face4 Measure_Light_Face5: MAINIO HIGH Sensor_Face5 PAUSE 1 RCTIME Sensor_Face5,1,Sensor_Face5_result 'DEBUG? Sensor_Face5_result IF Sensor_Face5_result < sensitivity THEN LightReceived_Face5 Measure_Light_Face6: MAINIO HIGH Sensor_Face6 PAUSE 1 RCTIME Sensor_Face6,1,Sensor_Face6_result 'DEBUG? Sensor_Face6_result IF Sensor_Face6_result < sensitivity THEN LightReceived_Face6 Measure_Light_Face7: MAINIO HIGH Sensor_Face7 PAUSE 1 RCTIME Sensor_Face7,1,Sensor_Face7_result 'DEBUG? Sensor_Face7_result IF Sensor_Face7_result < sensitivity THEN LightReceived_Face7 Measure_Light_Face8: MAINIO HIGH Sensor_Face8 PAUSE 1 RCTIME Sensor_Face8,1,Sensor_Face8_result 'DEBUG? Sensor_Face8_result IF Sensor_Face8_result < sensitivity THEN LightReceived_Face8 Measure_Light_Face9: MAINIO HIGH Sensor_Face9 PAUSE 1 RCTIME Sensor_Face9,1,Sensor_Face9_result 'DEBUG? Sensor_Face9_result IF Sensor_Face9_result < sensitivity THEN LightReceived_Face9 GOTO Measure_Sensitivity '*************************************************************** LightReceived_Face1: IF face1_number_of_times=3 THEN LightReceived_Face1_Reset midi=36+(face1_number_of_times*9) 'starts at 36 AUXIO HIGH Light_Face1 GOSUB Send_Midi face1_number_of_times=face1_number_of_times+1 GOTO Measure_Light_Face1 LightReceived_Face1_Reset: face1_number_of_times=0 GOTO LightReceived_Face1 LightReceived_Face2: IF face2_number_of_times=3 THEN LightReceived_Face2_Reset midi=37+(face2_number_of_times*9) AUXIO HIGH Light_Face2 GOSUB Send_Midi face2_number_of_times=face2_number_of_times+1 GOTO Measure_Light_Face2 LightReceived_Face2_Reset: face2_number_of_times=0 GOTO LightReceived_Face2 LightReceived_Face3: IF face3_number_of_times=3 THEN LightReceived_Face3_Reset midi=38+(face3_number_of_times*9) AUXIO HIGH Light_Face3 GOSUB Send_Midi face3_number_of_times=face3_number_of_times+1 GOTO Measure_Light_Face3 LightReceived_Face3_Reset: face3_number_of_times=0 GOTO LightReceived_Face3 LightReceived_Face4: IF face4_number_of_times=3 THEN LightReceived_Face4_Reset midi=39+(face4_number_of_times*9) AUXIO HIGH Light_Face4 GOSUB Send_Midi face4_number_of_times=face4_number_of_times+1 GOTO Measure_Light_Face4 LightReceived_Face4_Reset: face4_number_of_times=0 GOTO LightReceived_Face4 LightReceived_Face5: IF face5_number_of_times=3 THEN LightReceived_Face5_Reset midi=40+(face5_number_of_times*9) AUXIO HIGH Light_Face5 GOSUB Send_Midi face5_number_of_times=face5_number_of_times+1 GOTO Measure_Light_Face5 LightReceived_Face5_Reset: face5_number_of_times=0 GOTO LightReceived_Face5 LightReceived_Face6: IF face6_number_of_times=3 THEN LightReceived_Face6_Reset midi=41+(face6_number_of_times*9) AUXIO HIGH Light_Face6 GOSUB Send_Midi face6_number_of_times=face6_number_of_times+1 GOTO Measure_Light_Face6 LightReceived_Face6_Reset: face6_number_of_times=0 GOTO LightReceived_Face6 LightReceived_Face7: IF face7_number_of_times=3 THEN LightReceived_Face7_Reset midi=42+(face7_number_of_times*9) AUXIO HIGH Light_Face7 GOSUB Send_Midi face7_number_of_times=face7_number_of_times+1 GOTO Measure_Light_Face7 LightReceived_Face7_Reset: face7_number_of_times=0 GOTO LightReceived_Face7 LightReceived_Face8: IF face8_number_of_times=3 THEN LightReceived_Face8_Reset midi=43+(face8_number_of_times*9) AUXIO HIGH Light_Face8 GOSUB Send_Midi face8_number_of_times=face8_number_of_times+1 GOTO Measure_Light_Face8 LightReceived_Face8_Reset: face8_number_of_times=0 GOTO LightReceived_Face8 LightReceived_Face9: IF face9_number_of_times=3 THEN LightReceived_Face9_Reset midi=44+(face9_number_of_times*9) AUXIO HIGH Light_Face9 GOSUB Send_Midi face9_number_of_times=face9_number_of_times+1 GOTO Measure_Light_Face9 LightReceived_Face9_Reset: face9_number_of_times=0 GOTO LightReceived_Face9 '*********************************************************** Send_Midi: AUXIO 'debug ?midi SEROUT 15,60,0,[144,midi,127] PAUSE 400 LOW Light_Face1:LOW Light_Face2:LOW Light_Face3:LOW Light_Face4:LOW Light_Face5:LOW Light_Face6:LOW Light_Face7:LOW Light_Face8:LOW Light_Face9 PAUSE 200 Measure_Sensitivity2: MAINIO HIGH Sensitivity_Pot PAUSE 1 RCTIME Sensitivity_Pot,1,sensitivity sensitivity=sensitivity+300 'DEBUG? sensitivity RETURN