' ****************************************** ' * * ' * test and evaluation code * ' * Prof.dr.Godfried-Willem Raes * ' * belongs to the slagwerk compilation * ' ****************************************** ' robots for Ballet Mechanique by George Antheil ' 06.01.2015: first coding. ' 08.01.2014: Propeller 1 ready for testing. ' 07.03.2015: Propeller 2 board ready for testing. ' 27.03.2015: Propeller 2 ready and Prop 3 ready for testing. ' 30.03.2015: Bello test code added. ' 02.04.2015: Bello lites test added. ' 07.04.2015: All firmware for Bello upgraded. ' new velo lookups and periodity lookups. ' 14.05.2015: Prop1 hardware changed. ' 03.06.2015: Changes in : new bells added, firmware changed. ' odd behaviour on test board... ' 19.07.2015: all firmware checked. Should be fine now. %Propeller1 = 32 ' note 40 %Propeller1_Speed = 33 %Propeller1_lites = 34 %Propeller2 = 35 ' note 38 %Propeller2_Speed = 36 %Propeller2_lites = 37 %Propeller3 = 38 ' note 36 %Propeller3_Speed = 39 %Propeller3_lites = 40 %Balmec_Siren = 41 %Balmec_Bells = 42 %Bello_lites = 43 %bello_repeats =44 %bello_Board1 = 45 %bello_Board2 = 46 %bello_Board3 = 47 DECLARE FUNCTION Init_Balmec () AS LONG DECLARE SUB Propeller1 () DECLARE SUB Propeller1_Speed () DECLARE SUB Propeller1_Speed_Stop () DECLARE SUB Propeller1_Lites () DECLARE SUB Propeller1_Lites_Stop () DECLARE SUB Propeller2 () DECLARE SUB Propeller2_Speed () DECLARE SUB Propeller2_Speed_Stop () DECLARE SUB Propeller2_Lites () DECLARE SUB Propeller2_Lites_Stop () DECLARE SUB Propeller3 () DECLARE SUB Propeller3_Speed () DECLARE SUB Propeller3_Speed_Stop () DECLARE SUB Propeller3_Lites () DECLARE SUB Propeller3_Lites_Stop () DECLARE SUB Balmec_Siren () DECLARE SUB Balmec_Bells () DECLARE SUB Balmec_Bells_Stop () DECLARE SUB Bello_repeats() DECLARE SUB Balme_controlroom() DECLARE SUB Bello_lites () DECLARE SUB bello_board1 () DECLARE SUB bello_board2 () DECLARE SUB bello_board3 () GLOBAL hwCtrlBalmec AS DWORD FUNCTION Init_Balmec () AS LONG LOCAL retval AS LONG LOCAL m AS ASCIIZ * 20 LOCAL i AS LONG m = " test code" Sendmessage gh.Cockpit, %WM_SETTEXT,0, VARPTR(m) ' cockpit titel ' hardware tests: Task(%Propeller1).naam = "SmallProp" Task(%Propeller1).cptr = CODEPTR(Propeller1) Task(%Propeller1).freq = 1 Task(%Propeller1).flags = %False TaskEX(%Propeller1).stopcptr = CODEPTR(Propeller1_Speed_Stop) Task(%Propeller1_Speed).naam = "RPM_1" Task(%Propeller1_Speed).cptr = CODEPTR(Propeller1_Speed) Task(%Propeller1_Speed).freq = 1 Task(%Propeller1_Speed).flags = %False TaskEX(%Propeller1_Speed).stopcptr = CODEPTR(Propeller1_Speed_Stop) Task(%Propeller1_lites).naam = "Lites1" Task(%Propeller1_lites).cptr = CODEPTR(Propeller1_lites) Task(%Propeller1_lites).freq = 4 Task(%Propeller1_lites).flags = %False TaskEX(%Propeller1_lites).stopcptr = CODEPTR(Propeller1_Lites_Stop) Task(%Propeller2).naam = "Prop_2" Task(%Propeller2).cptr = CODEPTR(Propeller2) Task(%Propeller2).freq = 1 Task(%Propeller2).flags = %False TaskEX(%Propeller2).stopcptr = CODEPTR(Propeller2_Speed_Stop) Task(%Propeller2_Speed).naam = "RPM_2" Task(%Propeller2_Speed).cptr = CODEPTR(Propeller2_Speed) Task(%Propeller2_Speed).freq = 1 Task(%Propeller2_Speed).flags = %False TaskEX(%Propeller2_Speed).stopcptr = CODEPTR(Propeller2_Speed_Stop) Task(%Propeller2_lites).naam = "Lites2" Task(%Propeller2_lites).cptr = CODEPTR(Propeller2_lites) Task(%Propeller2_lites).freq = 4 Task(%Propeller2_lites).flags = %False TaskEX(%Propeller2_lites).stopcptr = CODEPTR(Propeller2_Lites_Stop) Task(%Propeller3).naam = "Prop_3" Task(%Propeller3).cptr = CODEPTR(Propeller3) Task(%Propeller3).freq = 1 Task(%Propeller3).flags = %False TaskEX(%Propeller3).stopcptr = CODEPTR(Propeller3_Speed_Stop) Task(%Propeller3_Speed).naam = "RPM_3" Task(%Propeller3_Speed).cptr = CODEPTR(Propeller3_Speed) Task(%Propeller3_Speed).freq = 1 Task(%Propeller3_Speed).flags = %False TaskEX(%Propeller3_Speed).stopcptr = CODEPTR(Propeller3_Speed_Stop) Task(%Propeller3_lites).naam = "Lites3" Task(%Propeller3_lites).cptr = CODEPTR(Propeller3_lites) Task(%Propeller3_lites).freq = 4 Task(%Propeller3_lites).flags = %False TaskEX(%Propeller3_lites).stopcptr = CODEPTR(Propeller3_Lites_Stop) ' tests for : Task(%Balmec_Bells).cptr = CODEPTR(Balmec_Bells) Task(%Balmec_Bells).naam = "Bells" Task(%Balmec_Bells).freq = 1 Task(%Balmec_Bells).flags = %False TaskEX(%Balmec_Bells).stopcptr = CODEPTR(Balmec_Bells_Stop) Task(%Bello_lites).cptr = CODEPTR(Bello_lites) Task(%Bello_lites).naam = "BelLite" Task(%Bello_lites).freq = 10 Task(%Bello_lites).flags = %False TaskEX(%Bello_lites).stopcptr = CODEPTR(Balmec_Bells_Stop) Task(%Bello_repeats).cptr = CODEPTR(Bello_Repeats) Task(%Bello_repeats).naam = "Repeats" Task(%Bello_repeats).freq = 50 ButnSW(7).tag0 = "BalmecCtrl tog" ButnSW(7).tag1 = "BalmecCtrl tog" ButnSW(7).cptr = CODEPTR(Balmec_Controlroom) ButnSW(8).tag0 = "CC30" ButnSW(8).tag1 = "CC30 tog" ButnSW(8).cptr = CODEPTR(Balmec_Cc30) Task(%Bello_board1).cptr = CODEPTR(Bello_board1) Task(%Bello_board1).naam = "Puls1" Task(%Bello_board1).freq = 1 Task(%Bello_board1).flags = %False Task(%Bello_board2).cptr = CODEPTR(Bello_board2) Task(%Bello_board2).naam = "Puls2" Task(%Bello_board2).freq = 1 Task(%Bello_board2).flags = %False Task(%Bello_board3).cptr = CODEPTR(Bello_board3) Task(%Bello_board3).naam = "Puls3" Task(%Bello_board3).freq = 1 Task(%Bello_board3).flags = %False MM_Balmec_On ' send ctrl 66 FUNCTION = %True END FUNCTION SUB Propeller1 () ' test propeller 1 - small propeller ' on/off test with speed control STATIC cnt AS INTEGER LOCAL velo, brake AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Propeller1).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Speed" TaskParamLabels(2) = "Brake" IF ISFALSE Task(%Propeller1).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller1,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller1).SliderNumbers(0) Task(%Propeller1).freq = 1 Slider(slnr).value = Task(%propeller1).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 1 ' low speed on init. SendMessage Slider(slnr+2).h, %TBM_SETPOS,%True, 0 ' no braking on init END IF ' MM_Balmec_On RESET cnt Task(%Propeller1).tog = %True END IF IF ISFALSE cnt MOD 2 THEN velo = Slider(slnr+1).value mPlay Balmec.channel, 40, velo ELSE brake = Slider(slnr+2).value Release Balmec.channel, 40, brake 'mPlay Balmec.channel, 40, %False END IF INCR cnt Task(%Propeller1).freq = 0.05 +((Slider(slnr).value) / 64!) END SUB SUB Propeller2 () ' test propeller 2 - large wood propeller ' on/off test with speed control STATIC cnt AS INTEGER LOCAL velo AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Propeller2).tog THEN DIM TaskParamLabels(0 TO 1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Speed" IF ISFALSE Task(%Propeller2).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller2,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller2).SliderNumbers(0) Task(%Propeller2).freq = 1 Slider(slnr).value = Task(%propeller2).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 1 ' low speed on init. END IF ' MM_Balmec_On RESET cnt Task(%Propeller2).tog = %True END IF IF ISFALSE cnt MOD 2 THEN velo = Slider(slnr+1).value mPlay Balmec.channel, 38, velo ELSE mPlay Balmec.channel, 38, %False END IF INCR cnt Task(%Propeller2).freq = 0.05 +((Slider(slnr).value) / 64!) END SUB SUB Propeller3 () ' test propeller 3 - large metal propeller ' on/off test with speed control STATIC cnt AS INTEGER LOCAL velo, brake AS INTEGER STATIC slnr AS DWORD IF ISFALSE Task(%Propeller3).tog THEN DIM TaskParamLabels(0 TO 2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamLabels(1) = "Speed" TaskParamLabels(2) = "Brake" IF ISFALSE Task(%Propeller3).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller3,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller3).SliderNumbers(0) Task(%Propeller3).freq = 1 Slider(slnr).value = Task(%propeller3).freq SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, 1 ' low speed on init. SendMessage Slider(slnr+2).h, %TBM_SETPOS, %True, 0 ' no braking on init END IF MM_Balmec_On RESET cnt Task(%Propeller3).tog = %True END IF IF ISFALSE cnt MOD 2 THEN velo = Slider(slnr+1).value mPlay Balmec.channel, 36, velo ELSE brake = Slider(slnr+2).value Release Balmec.channel, 36, brake ' added 14.05.2015 END IF INCR cnt Task(%Propeller3).freq = 0.05 +((Slider(slnr).value) / 64!) END SUB SUB Propeller1_Speed () ' kontinu test STATIC slnr, rpm AS LONG IF ISFALSE Task(%Propeller1_Speed).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Speed" IF ISFALSE Task(%Propeller1_Speed).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller1_Speed,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller1_Speed).SliderNumbers(0) Slider(slnr).value = 0 rpm = %False SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, rpm END IF Task(%Propeller1_Speed).freq = 20 Task(%Propeller1).tog = %True END IF IF Slider(slnr).value <> rpm THEN mPlay Balmec.channel, 40, Slider(slnr).value rpm = Slider(slnr).value END IF END SUB SUB Propeller1_Speed_Stop () NoteOff Balmec.channel, 40 END SUB SUB Propeller1_lites () ' to test autoflashing. 'STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC vel1, vel2 AS DWORD IF ISFALSE Task(%Propeller1_Lites).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo1" TaskParamlabels(1) = "Tempo2" IF ISFALSE Task(%Propeller1_lites).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller1_lites,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller1_lites).SliderNumbers(0) Task(%Propeller1_lites).freq = 4 Slider(slnr).value = 100 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 100 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF 'cnt = %False Task(%Propeller1_lites).tog = %True END IF IF vel1 <> Slider(slnr).value THEN mPlay Balmec.channel, 120, Slider(slnr).value vel1 = Slider(slnr).value END IF IF vel2 <> Slider(slnr+1).value THEN mPlay Balmec.channel, 121, Slider(slnr+1).value vel2 = Slider(slnr+1).value END IF END SUB SUB Propeller1_lites_Stop () NoteOff Balmec.channel, 120 NoteOff Balmec.channel, 121 END SUB SUB Propeller2_Speed () ' kontinu test STATIC slnr, rpm AS LONG IF ISFALSE Task(%Propeller2_Speed).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Speed" IF ISFALSE Task(%Propeller2_Speed).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller2_Speed,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller2_Speed).SliderNumbers(0) Slider(slnr).value = 0 rpm = %False SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, rpm END IF Task(%Propeller2_Speed).freq = 20 Task(%Propeller2).tog = %True END IF IF Slider(slnr).value <> rpm THEN mPlay Balmec.channel, 38, Slider(slnr).value rpm = Slider(slnr).value END IF END SUB SUB Propeller2_Speed_Stop () NoteOff Balmec.channel, 38 END SUB SUB Propeller2_lites () ' to test autoflashing. STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC vel1, vel2 AS DWORD IF ISFALSE Task(%Propeller2_Lites).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo1" TaskParamlabels(1) = "Tempo2" IF ISFALSE Task(%Propeller2_lites).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller2_lites,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller2_lites).SliderNumbers(0) Task(%Propeller2_lites).freq = 4 Slider(slnr).value = 100 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 100 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF cnt = %False Task(%Propeller2_lites).tog = %True END IF IF vel1 <> Slider(slnr).value THEN mPlay Balmec.channel, 122, Slider(slnr).value vel1 = Slider(slnr).value END IF IF vel2 <> Slider(slnr+1).value THEN mPlay Balmec.channel, 123, Slider(slnr+1).value vel2 = Slider(slnr+1).value END IF END SUB SUB Propeller2_lites_Stop () NoteOff Balmec.channel, 122 NoteOff Balmec.channel, 123 END SUB SUB Propeller3_Speed () ' kontinu test ' grote metalen propeller, 1.5kW motor. STATIC slnr, rpm AS LONG IF ISFALSE Task(%Propeller3_Speed).tog THEN DIM TaskParamLabels(0) AS ASCIIZ * 8 TaskParamLabels(0) = "Speed" IF ISFALSE Task(%Propeller3_Speed).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller3_Speed,1,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller3_Speed).SliderNumbers(0) Slider(slnr).value = 0 rpm = %False SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, rpm END IF Task(%Propeller3_Speed).freq = 20 Task(%Propeller3).tog = %True END IF IF Slider(slnr).value <> rpm THEN mPlay Balmec.channel, 36, Slider(slnr).value rpm = Slider(slnr).value END IF END SUB SUB Propeller3_Speed_Stop () NoteOff Balmec.channel, 36 END SUB SUB Propeller3_lites () ' to test autoflashing. STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC vel1, vel2 AS DWORD IF ISFALSE Task(%Propeller3_Lites).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo1" TaskParamlabels(1) = "Tempo2" IF ISFALSE Task(%Propeller3_lites).hParam THEN slnr = %False MakeTaskParameterDialog %Propeller3_lites,2,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Propeller3_lites).SliderNumbers(0) Task(%Propeller3_lites).freq = 4 Slider(slnr).value = 100 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 100 SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF cnt = %False Task(%Propeller3_lites).tog = %True END IF IF vel1 <> Slider(slnr).value THEN mPlay Balmec.channel, 124, Slider(slnr).value vel1 = Slider(slnr).value END IF IF vel2 <> Slider(slnr+1).value THEN mPlay Balmec.channel, 125, Slider(slnr+1).value vel2 = Slider(slnr+1).value END IF END SUB SUB Propeller3_lites_Stop () NoteOff Balmec.channel, 124 NoteOff Balmec.channel, 125 END SUB SUB Balmec_Bells () ' this is mapped on the midi note range 51-96 ' rewritten for the bell machine ' as yet, the note range is discontinuous: ' 51, [55], 57 (69), 60, 64, 67, 85, 87, 88, 89 ' 03.06.2015: Updated for changes in firmware. STATIC cnt AS DWORD STATIC slnr, udnr AS DWORD STATIC noot, velo, rep AS BYTE DIM reps(127) AS STATIC BYTE IF ISFALSE Task(%Balmec_Bells).tog THEN DIM TaskParamLabels(4) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" TaskParamlabels(2) = "RepRat" TaskParamLabels(3) = "Note" TaskParamLabels(4) = "66" IF ISFALSE Task(%Balmec_Bells).hParam THEN slnr = %False MakeTaskParameterDialog %Balmec_Bells,3,Slider(),2,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Balmec_Bells).SliderNumbers(0) Slider(slnr).value = 8 Task(%Balmec_Bells).freq = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 0 ' velo's SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value RESET velo Slider(slnr+2).value = 0 ' repetition rate SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value END IF IF ISFALSE udnr THEN UDctrl(TaskEX(%Balmec_Bells).UpdownNumbers(0)).cptr = CODEPTR(Bello_Note_UD1) ' note UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(0)).value = 51 UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(0)).minval = 51 UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(0)).maxval = 96 udnr = TaskEX(%Balmec_Bells).UpDownNumbers(0) UDctrl(TaskEX(%Balmec_Bells).UpdownNumbers(1)).cptr = CODEPTR(Bello_CC66_UD2) ' on/off UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(1)).value = 0 UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(1)).minval = 0 UDctrl(TaskEX(%Balmec_Bells).UpDownNumbers(1)).maxval = 1 END IF cnt = %False noot = 51 IF ISFALSE Balmec.ctrl(66) THEN Controller Balmec.channel, 66, 64 Balmec.ctrl(66) = 64 END IF Task(%Balmec_Bells).tog = %True END IF IF slider(slnr+2).value <> reps(noot) THEN reps(noot) = Slider(slnr+2).value KeyPress Balmec.channel, noot, reps(noot) END IF IF ISFALSE cnt THEN mPlay Balmec.channel, noot, Slider(slnr+1).value ' note ON cnt = %True ELSE NoteOff Balmec.channel, noot noot = UDCtrl(udnr).value cnt = %False END IF Task(%Balmec_Bells).freq = MAX((Slider(slnr).value) / 8!, 0.125) END SUB SUB Bello_Note_UD1 () ' controls the note to be played. LOCAL noot AS BYTE STATIC oldnoot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Balmec_Bells).UpDownNumbers(0) noot = UDCtrl(udnr).value SetDlgItemText Task(%Balmec_Bells).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB SUB Bello_CC66_UD2 () ' controller 66 LOCAL udnr, value AS DWORD udnr = TaskEX(%Balmec_Bells).UpDownNumbers(1) value = UDCtrl(udnr).value Controller Balmec.channel, 66, value Balmec.ctrl(66) = value SetDlgItemText Task(%Balmec_Bells).hparam, %GMT_TEXT0_ID + 17, "66" & STR$(value) END SUB SUB Balmec_Bells_Stop () ' should also stop the lites Controller Balmec.channel, 123, %False END SUB SUB Bello_Repeats () ' only sends keypressure to selected note.. no note on.. ' had bug: wrong task constants. (KL) ' 03.06.2015: corrected gwr. STATIC cnt AS DWORD STATIC slnr, udnr AS DWORD STATIC noot, rep AS BYTE IF ISFALSE Task(%Bello_Repeats).tog THEN DIM TaskParamLabels(1) AS ASCIIZ * 8 TaskParamLabels(0) = "KeyPres" TaskParamlabels(1) = "Note" IF ISFALSE Task(%Bello_Repeats).hParam THEN slnr = %False MakeTaskParameterDialog %Bello_Repeats,1,Slider(),1,UDctrl(),TaskParamLabels() END IF IF ISFALSE slnr THEN slnr = TaskEX(%Bello_Repeats).SliderNumbers(0) Slider(slnr).value = 8 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value 'bug: 'Slider(slnr+1).value = 51 'SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value END IF IF ISFALSE udnr THEN udnr = TaskEX(%Bello_Repeats).UpDownNumbers(0) UDctrl(udnr).cptr = CODEPTR(Bello_Rep_Note) ' note UDCtrl(udnr).value = 51 UDctrl(udnr).maxval = 96 UDctrl(udnr).minval = 51 END IF cnt = %False noot = 51 IF ISFALSE Balmec.ctrl(66) THEN Controller Balmec.channel, 66, 64 Balmec.ctrl(66) = 64 END IF Task(%Bello_Repeats).tog = %True END IF ' following would send it all the time... 'noot = UDCtrl(udnr).value 'rep = Slider(slnr).value 'KeyPress Balmec.channel, noot, rep ' so we changed it to: (gwr, 03.06.2015) IF (UDCtrl(udnr).value <> noot) OR (Slider(slnr).value <> rep) THEN noot = UDCtrl(udnr).value rep = Slider(slnr).value KeyPress Balmec.channel, noot, rep END IF END SUB SUB Bello_rep_Note () ' controls the note to be played. LOCAL noot AS BYTE STATIC oldnoot AS BYTE LOCAL udnr AS DWORD udnr = TaskEX(%Bello_Repeats).UpDownNumbers(0) noot = MAX(51, MIN(96, UDCtrl(udnr).value)) UDCtrl(udnr).value = noot SetDlgItemText Task(%Bello_Repeats).hparam, %GMT_TEXT0_ID + 16, "N=" & STR$(noot) END SUB SUB Bello_lites () ' to test pwm '06.04.2015: bottom light added. '14.05.2015: Bottom lite now mapped on note 119 STATIC cnt AS DWORD STATIC slnr AS DWORD STATIC vel1, vel2,vel3 AS DWORD IF ISFALSE Task(%Bello_Lites).tog THEN DIM TaskParamLabels(2) AS ASCIIZ * 8 TaskParamLabels(0) = "Lite1" TaskParamlabels(1) = "Lite2" TaskParamlabels(2) = "Lite3" IF ISFALSE Task(%Bello_lites).hParam THEN slnr = %False MakeTaskParameterDialog %Bello_lites,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bello_lites).SliderNumbers(0) Task(%Bello_lites).freq = 10 Slider(slnr).value = %False SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = %False SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).value = %False SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value END IF cnt = %False Task(%Bello_lites).tog = %True END IF IF vel1 <> Slider(slnr).value THEN mPlay Balmec.channel, 126, Slider(slnr).value vel1 = Slider(slnr).value END IF IF vel2 <> Slider(slnr+1).value THEN mPlay Balmec.channel, 127, Slider(slnr+1).value vel2 = Slider(slnr+1).value END IF IF vel3 <> Slider(slnr+2).value THEN mPlay Balmec.channel, 119, Slider(slnr+2).value vel3 = Slider(slnr+2).value END IF END SUB SUB balmec_controlroom LOCAL i AS LONG LOCAL x AS LONG IF ISFALSE hwCtrlbalmec THEN DIALOG NEW 0, "balmec Control",1,1 ,600, 60, %WS_CAPTION OR %WS_POPUP OR %WS_SYSMENU TO hwCtrlbalmec x = 5 FOR i = 51 TO 96 ' enkel bellen! balmec.lowtes TO balmec.HighTes SELECT CASE (i MOD 12) CASE 0 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "C", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 1 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "C#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 2 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "D", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 3 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "D#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 4 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "E", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 CASE 5 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "F", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 6 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "F#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 7 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "G", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 8 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "G#", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 9 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "A", x, 24, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 10 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "Bb", x, 12, 18, 12, %BS_PUSHLIKE x = x + 10 CASE 11 CONTROL ADD CHECKBOX, hwCtrlbalmec, i, "B", x, 24, 18, 12, %BS_PUSHLIKE x = x + 20 END SELECT NEXT CONTROL ADD LABEL, hwCtrlbalmec, 500, "Velo:", 5, 45, 30, 12 CONTROL ADD "msctls_trackbar32", hwCtrlbalmec, 501, _ "velo", 36, 45, 135, 12, %WS_CHILD OR %WS_VISIBLE OR _ %TBS_HORZ OR %TBS_BOTTOM CONTROL SEND hwCtrlbalmec, 500, %TBM_SETRANGE, %TRUE, MAKDWD(1,127) CONTROL SEND hwCtrlbalmec, 500, %TBM_SETPAGESIZE, 0, 5 CONTROL ADD LABEL, hwCtrlbalmec, 503, "?", 174, 45, 30, 12 CONTROL ADD BUTTON, hwCtrlbalmec, 600, "All Off", 206, 45, 30, 12 DIALOG SHOW MODELESS hwCtrlbalmec CALL CB_balmec_Controlroom ELSE DIALOG END hwCtrlbalmec hwCtrlbalmec = 0 END IF END SUB SUB balmec_cc30 STATIC hwcc30 AS DWORD IF ISFALSE hwcc30 THEN DIALOG NEW 0, "balmec Control",1,1 ,60, 30, %WS_CAPTION OR %WS_POPUP OR %WS_SYSMENU TO hwcc30 CONTROL ADD TEXTBOX, hwcc30, 1, "0", 1, 1, 58, 12, %ES_NUMBER CONTROL ADD BUTTON, hwcc30, 2, "&send", 1, 15, 58, 12 DIALOG SHOW MODELESS hwcc30 CALL cb_balmec_cc30 ELSE DIALOG END hwcc30 RESET hwcc30 END IF END SUB CALLBACK FUNCTION cb_balmec_cc30 LOCAL b$ LOCAL v AS BYTE IF CBCTL <> 2 THEN EXIT FUNCTION IF CBMSG <> %WM_COMMAND THEN EXIT FUNCTION IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION CONTROL GET TEXT CBHNDL, 1 TO b$ v = VAL(b$) IF v < 0 THEN v = 0 CONTROL SET TEXT CBHNDL, 1, "0" ELSEIF v > 127 THEN v = 127 CONTROL SET TEXT CBHNDL, 1, "127" END IF Controller Balmec.channel, 30, v CONTROL SET TEXT gh.cockpit, %GMT_MSG1, "CC30 " + STR$(v) END FUNCTION CALLBACK FUNCTION CB_balmec_Controlroom STATIC velo AS BYTE STATIC oldvelo AS BYTE LOCAL i AS LONG, j AS LONG LOCAL note AS BYTE SELECT CASE CBMSG CASE %WM_COMMAND SELECT CASE CBCTL CASE 51 TO 96 ' énkel bellen! balmec.Lowtes TO balmec.hightes 'checkboxes CONTROL GET CHECK CBHNDL, CBCTL TO i note = CBCTL mPlay balmec.channel, note, CHOOSE(1 + i, 0, velo) CASE 600 FOR i = balmec.lowtes TO balmec.hightes CONTROL SET CHECK CBHNDL, i, 0 DIALOG DOEVENTS NEXT Controller balmec.channel, 123, %False CONTROL HANDLE CBHNDL, 501 TO i SendMessage i, %TBM_SETPOS, %true, 0 MM_balmec_Off %MM_Motor CONTROL SET TEXT CBHNDL, 503, "0" END SELECT CASE %WM_HSCROLL, %WM_VSCROLL 'note: id doesn't correspond at all with the one given at creation IF (LOWRD(CBWPARAM) = %TB_THUMBPOSITION) OR (LOWRD(CBWPARAM) = %TB_THUMBTRACK) THEN velo = HIWRD(CBWPARAM) ELSE velo = SendMessage (CBLPARAM, %TBM_GETPOS,%Null, %Null) END IF CONTROL SET TEXT CBHNDL, 503, STR$(velo) 'vraag van gwr: bij iedere velo update worden de noten opnieuw gezonden IF velo <> oldvelo THEN oldvelo = velo FOR note = 51 TO 96 CONTROL GET CHECK CBHNDL, note TO i IF i THEN mPlay balmec.channel, note, velo NEXT END IF IF ISFALSE velo THEN FOR note = 51 TO 96 mPlay balmec.channel, note, 0 NEXT END IF CASE %WM_CLOSE, %WM_QUIT hwCtrlbalmec = 0 FOR i = 51 TO 96 'balmec.lowtes TO balmec.hightes DIALOG DOEVENTS NEXT Controller balmec.channel, 123, %False END SELECT END FUNCTION SUB Bello_Board1 () ' hardware test for board 1 STATIC cnt AS DWORD STATIC slnr, udnr AS DWORD STATIC noot AS BYTE DIM Notes(11) AS STATIC BYTE IF ISFALSE Task(%Bello_Board1).tog THEN DIM TaskParamLabels(2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" TaskParamlabels(2) = "RepRat" IF ISFALSE Task(%Bello_board1).hParam THEN slnr = %False MakeTaskParameterDialog %Bello_Board1,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bello_Board1).SliderNumbers(0) Slider(slnr).value = 8 Task(%Bello_Board1).freq = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 0 ' velo's SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).value = 0 ' repetition rate SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value END IF Notes(0) = 51 Notes(1) = 52 ' nc Notes(2) = 57 Notes(3) = 60 Notes(4) = 65 Notes(5) = 67 Notes(6) = 68 Notes(7) = 72 Notes(8) = 85 Notes(9) = 87 Notes(10) = 88 Notes(11) = 89 cnt = %False noot = Notes(0) - 1 IF ISFALSE Balmec.ctrl(66) THEN Controller Balmec.channel, 66, 64 Balmec.ctrl(66) = 64 END IF Task(%Bello_Board1).tog = %True END IF NoteOff Balmec.channel, noot INCR cnt cnt = cnt MOD 12 noot = Notes(cnt) KeyPress Balmec.channel,noot, Slider(slnr+2).value mPlay Balmec.channel, noot, Slider(slnr+1).value Task(%Bello_Board1).freq = MAX((Slider(slnr).value) / 8!, 0.125) END SUB SUB Bello_Board2 () ' hardware test for board 2 STATIC cnt AS DWORD STATIC slnr, udnr AS DWORD STATIC noot AS BYTE DIM Notes(11) AS STATIC BYTE IF ISFALSE Task(%Bello_Board2).tog THEN DIM TaskParamLabels(2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" TaskParamlabels(2) = "RepRat" IF ISFALSE Task(%Bello_board2).hParam THEN slnr = %False MakeTaskParameterDialog %Bello_Board2,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bello_Board2).SliderNumbers(0) Slider(slnr).value = 8 Task(%Bello_Board2).freq = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 0 ' velo's SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).value = 0 ' repetition rate SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value END IF Notes(0) = 70 Notes(1) = 71 Notes(2) = 58 Notes(3) = 73 Notes(4) = 74 Notes(5) = 75 Notes(6) = 76 Notes(7) = 77 Notes(8) = 78 Notes(9) = 79 Notes(10) = 80 Notes(11) = 81 cnt = %False noot = Notes(0) - 1 IF ISFALSE Balmec.ctrl(66) THEN Controller Balmec.channel, 66, 64 Balmec.ctrl(66) = 64 END IF Task(%Bello_Board2).tog = %True END IF NoteOff Balmec.channel, noot INCR cnt cnt = cnt MOD 12 noot = Notes(cnt) KeyPress Balmec.channel,noot, Slider(slnr+2).value mPlay Balmec.channel, noot, Slider(slnr+1).value Task(%Bello_Board2).freq = MAX((Slider(slnr).value) / 8!, 0.125) END SUB SUB Bello_Board3 () ' hardware test for board 3 STATIC cnt AS DWORD STATIC slnr, udnr AS DWORD STATIC noot AS BYTE DIM Notes(11) AS STATIC BYTE IF ISFALSE Task(%Bello_Board3).tog THEN DIM TaskParamLabels(2) AS ASCIIZ * 8 TaskParamLabels(0) = "Tempo" TaskParamlabels(1) = "Velo" TaskParamlabels(2) = "RepRat" IF ISFALSE Task(%Bello_board3).hParam THEN slnr = %False MakeTaskParameterDialog %Bello_Board3,3,Slider(),0,UDctrl(),TaskParamLabels() END IF IF slnr = %False THEN slnr = TaskEX(%Bello_Board3).SliderNumbers(0) Slider(slnr).value = 8 Task(%Bello_Board3).freq = 1 SendMessage Slider(Slnr).h, %TBM_SETPOS,%True, Slider(Slnr).value Slider(slnr+1).value = 0 ' velo's SendMessage Slider(Slnr+1).h, %TBM_SETPOS,%True, Slider(Slnr+1).value Slider(slnr+2).value = 0 ' repetition rate SendMessage Slider(Slnr+2).h, %TBM_SETPOS,%True, Slider(Slnr+2).value END IF Notes(0) = 82 Notes(1) = 83 Notes(2) = 84 Notes(3) = 86 Notes(4) = 90 Notes(5) = 91 Notes(6) = 92 Notes(7) = 93 Notes(8) = 119 Notes(9) = 94 Notes(10) = 95 Notes(11) = 96 cnt = %False noot = Notes(0) - 1 IF ISFALSE Balmec.ctrl(66) THEN Controller Balmec.channel, 66, 64 Balmec.ctrl(66) = 64 END IF Task(%Bello_Board3).tog = %True END IF NoteOff Balmec.channel, noot INCR cnt cnt = cnt MOD 12 noot = Notes(cnt) IF noot <> 119 THEN KeyPress Balmec.channel,noot, Slider(slnr+2).value END IF mPlay Balmec.channel, noot, Slider(slnr+1).value Task(%Bello_Board3).freq = MAX((Slider(slnr).value) / 8!, 0.125) END SUB 'EOF