[Sharing] NG-Code for sending prg.chg. with numeric buttons

Hey people,

 

with the help of TK a while ago and a few modifications this code allows you to send program changes in conjunction with buttons… in my case I used buttons from Marquardt type 6425 with numeric keycaps (you can get them at conrad).

 

When TK wrote this code it had the limitation that I was just able to send prg.chg. to a maximum of 127 which is the midi standard. In my case I needed more! My software listens on all channels for prg.chg.

So I added a little math to it and now it sends automatically 0-127 prg.chg. on chn.1, 0-127 on chn. 2 and 0-127 on chn.3 depending on the value you type in. If you give him f.e. 128, it sends prg.chg. 0 on chn. 2. If you enter 383, it sends prg.chg. 127 on chn.3 and so on.

 

So, here we go. This could you want to paste into an NGR.-file:

 

 

if ^section == 0

exit

endif

 

 

should the PC value be cleared?

if LED:2001 == 2

  set LED:2000 0

  set LED:2001 0

LCD "@(1:1:5)&b      "

endif

 

 

keypad buttons

 

‘1’ button

if ^section == 1

  if LED:2000 <= 38

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 1]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘2’ button

if ^section == 2

  if LED:2000 <= 38

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 2]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘3’ button

if ^section == 3

  if LED:2000 <= 38

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 3]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘4’ button

if ^section == 4

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 4]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘5’ button

if ^section == 5

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 5]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘6’ button

if ^section == 6

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 6]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘7’ button

if ^section == 7

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 7]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘8’ button

if ^section == 8

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 8]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘9’ button

if ^section == 9

  if LED:2000 <= 37

    set LED:2000 [LED:2000 * 10]

    set LED:2000 [LED:2000 + 9]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

‘0’ button

if ^section == 10

  if LED:2000 <= 38

    set LED:2000 [LED:2000 * 10]

 

    # indicate a valid number

    set LED:2001 1

  endif

  exit

endif

 

EXEC button

if ^section == 11

  # valid number?

  if LED:2001 == 1

   if LED:2000 <= 127

    send ProgramChange OUT1 1  LED:2000

 

    # next entry will reset the number

    set LED:2001 2

 

  endif

 

   if LED:2000 > 127

    if LED:2000 <= 255

     send ProgramChange OUT1 2  LED:2000

 

     # next entry will reset the number

     set LED:2001 2

 

   endif

  endif

 

   if LED:2000 > 255

    if LED:2000 <= 383

     send ProgramChange OUT1 3  LED:2000

 

     # next entry will reset the number

     set LED:2001 2

 

   endif

  endif

 

  endif

  exit

endif

 

CLEAR button

if ^section == 12

  set LED:2000 0

  set LED:2001 0

  exit

endif

 

 

Of course you need to add also a little code into a NGC.-File:

 

start script with ^section == 1..10 for digit button 1, 2, 3, 4, …, 9, 0

EVENT_BUTTON id=50  type=Meta  meta=RunSection:1   button_mode=OnOnly

EVENT_BUTTON id=62  type=Meta  meta=RunSection:2   button_mode=OnOnly

EVENT_BUTTON id=58  type=Meta  meta=RunSection:3   button_mode=OnOnly

EVENT_BUTTON id=49  type=Meta  meta=RunSection:4   button_mode=OnOnly

EVENT_BUTTON id=61  type=Meta  meta=RunSection:5   button_mode=OnOnly

EVENT_BUTTON id=57  type=Meta  meta=RunSection:6   button_mode=OnOnly

EVENT_BUTTON id=52  type=Meta  meta=RunSection:7   button_mode=OnOnly

EVENT_BUTTON id=64  type=Meta  meta=RunSection:8   button_mode=OnOnly

EVENT_BUTTON id=60  type=Meta  meta=RunSection:9   button_mode=OnOnly

EVENT_BUTTON id=63  type=Meta  meta=RunSection:10  button_mode=OnOnly

 

Sende program change

EVENT_BUTTON id=59 type=Meta  meta=RunSection:11  button_mode=OnOff fwd_id=LED:50

 

Clear

EVENT_BUTTON id=51 type=Meta  meta=RunSection:12  button_mode=OnOnly

 

this is a dummy event which stores and displays the program change value

EVENT_LED id=2000 value=0  lcd_pos=1:1:1 label=“&bPrgChange: @(1:5:5)%3d”

 

this dummy event is set when the next keypress should clear the LED:2000 value

EVENT_LED id=2001 value=0  lcd_pos=1:1:2 label=“^pcstate”

DebounceCtr 255

 

Please adjust the ids to your needs.

 

If you are working with a display, here are the correct lables:

COND_LABEL pcstate

COND =0  “”

COND =1  “”

COND =2 “@(1:1:5)&bSent”

 

 

I hope you like it! :slight_smile:

 

Thanks!
Chris