Jump to content

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


Recommended Posts

Posted (edited)

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! :-)

 

Thanks!
Chris

Edited by FantomXR

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...