Exemple #1
0
void enter_note(void)
{
    // Check if any of the note buttons have been pressed:
    uint8_t note = 0xFF;
    for (uint8_t i = 0; i < 16; i++) {
        if (button_pressed(i))
            note = btn_to_note(i);
    }

    // If none of the on-board keys were pressed, check MIDI:
    if (sequencer_midi_note != 0xFF)
        note = sequencer_midi_note;

    if (note != 0xFF) {
        sequencer_pattern.notes[current_channel][current_note].note = note;
        sequencer_pattern.notes[current_channel][current_note].length = channel_length[current_channel];
        enter_note_exit();
    }

    // Other button presses:
    else if (button_pressed(BTN_NOTE_CLEAR)) {
        sequencer_pattern.notes[current_channel][current_note].length = 0;
        enter_note_exit();
    }

    else if (button_on(BTN_OCTAVE)) {
        leds_7seg_two_digit_set(3, 4, channel_octave[current_channel]);
        ui_updown((int8_t*)&channel_octave[current_channel], 1, 7);
    }

    else if (button_pressed(BTN_OK))
        enter_note_exit();

    else {
        leds_7seg_two_digit_set(3, 4, channel_length[current_channel]);
        ui_updown((int8_t*)&channel_length[current_channel], 1, 4);
    }

}
Exemple #2
0
static void play_pattern(void)
{
    for (uint8_t i = 0; i < 16; i++)
        button_led_off(i);
    leds_7seg_two_digit_set(3, 4, sequencer_tempo_count);

    ui_updown((int8_t*)&sequencer_tempo_count, 1, 99);

    if (button_pressed(BTN_PLAY)) {
        sequencer_stop();
        state = STATE_TOPLEVEL;
    }
    else
        button_led_on(sequencer_cur_position);
}
void programmer(void)
/* Handles the front panel functions when at the top level 
   
   The whole thing is basically a large loop going through the array
   of possible button presses and combinations. 
*/
{
  static int8_t patchno = 0;

  // Display the selected patch number
  leds_7seg_two_digit_set(3, 4, patchno);

  int8_t last_patchno = patchno;
  // Handle UP and DOWN presses
  ui_updown(&patchno, PATCH_MIN, PATCH_MAX);

  if (state == STATE_SAVE) {
    patch_save(patchno);
    state = STATE_TOPLEVEL;
  }
  else if (patchno != last_patchno) 
    patch_load(patchno);
    
  if (button_pressed(BTN_SAVE)) {
    ui_getvalue_session.button1 = BTN_SAVE;
    ui_getvalue_session.button2 = 0xFF;
    ui_getvalue_session.parameter.target = &patchno;
    ui_getvalue_session.parameter.type = RANGE;
    ui_getvalue_session.parameter.min = PATCH_MIN;
    ui_getvalue_session.parameter.max = PATCH_MAX;
    mode |= MODE_GETVALUE;
    state = STATE_SAVE;
    return;
  }

  sq1.enabled ? button_led_on(BTN_SQ1) : button_led_off(BTN_SQ1);
  sq2.enabled ? button_led_on(BTN_SQ2) : button_led_off(BTN_SQ2);
  tri.enabled ? button_led_on(BTN_TRI) : button_led_off(BTN_TRI);
  noise.enabled ? button_led_on(BTN_NOISE) : button_led_off(BTN_NOISE);
  dmc.enabled ? button_led_on(BTN_DMC) : button_led_off(BTN_DMC);

  toplevel_handler(); 
}
Exemple #4
0
/* Pattern selection state */
void select_pattern(void)
{

    if (state == STATE_SAVE) {
        sequencer_pattern_save(current_pattern);
        state = STATE_TOPLEVEL;
    }

    else if (ui_updown((int8_t*)&current_pattern, 0, 99))
        sequencer_pattern_load(current_pattern);

    else if (button_pressed(BTN_SAVE)) {
        save_init(&current_pattern);
    }

    for (uint8_t b = 0; b < 5; b++) {
        if (button_pressed(b)) {
            current_channel = b;
            state = STATE_SELECT_NOTE;
        }
    }

    if (button_pressed(BTN_PLAY)) {
        sequencer_play();
        state = STATE_PLAYING;
    }

    if (button_pressed(BTN_SCALE)) {
        getvalue.button1 = BTN_SCALE;
        getvalue.button2 = 0xFF;
        getvalue.parameter.target = &sequencer_pattern.scale;
        getvalue.parameter.type = SCALE;
        getvalue.parameter.min = 0;
        getvalue.parameter.max = 2;
        getvalue.previous_mode = mode;
        mode = MODE_GETVALUE;
    }

    leds_7seg_two_digit_set(3, 4, current_pattern);
}
Exemple #5
0
void ui_getvalue_handler()
/* Handles getting a parameter value. A new getvalue-session is initiated by
   using ui_getvalue_session. This structure holds the current parameter to
   be changed, which buttons to blink, and the state. 
*/
{
  static int8_t value;
    
  // If the state just changed to GETVALUE, set the value to the parameter's value
  // and last pot value to the current. 
  if (ui_getvalue_session.state == SESSION_INACTIVE) {
    if (ui_getvalue_session.parameter.type == INVRANGE) 
      value = ui_getvalue_session.parameter.max - *ui_getvalue_session.parameter.target;
    else
      value = *ui_getvalue_session.parameter.target;
	
    button_led_blink(ui_getvalue_session.button1);
    
    if (ui_getvalue_session.button2 != 0xFF) {
      button_led_blink(ui_getvalue_session.button2 & 0x7F);

      if ((ui_getvalue_session.button2 & 0x80) != 0) {
//	button_leds[BTN_SHIFT] = 1;
//	leds_set(BTN_SHIFT, 0);
	button_led_blink(BTN_SHIFT);
      }
    }

    ui_getvalue_session.state = SESSION_ACTIVE;
  }

  // Handle up and down buttons
  ui_updown(&value, ui_getvalue_session.parameter.min, ui_getvalue_session.parameter.max);

  // When SET is pressed, store the new value in the parameter and disable LED blinking.
  // If type is VALTYPE_INVRANGE, the value is inverted. 

  if (button_pressed(BTN_SAVE)) {
    if (ui_getvalue_session.parameter.type == INVRANGE)
      *ui_getvalue_session.parameter.target = ui_getvalue_session.parameter.max - value;
    else
      *ui_getvalue_session.parameter.target = value;
	
    button_led_off(ui_getvalue_session.button1);
    
    if (ui_getvalue_session.button2 != 0xFF) {
      button_led_off(ui_getvalue_session.button2 & 0x7F);
      //if ((ui_getvalue_session.button2 & 0x80) != 0)
	//button_leds[BTN_SHIFT] = 1;
	//button_led_on
    }
    
    ui_getvalue_session.state = SESSION_INACTIVE;
	
    mode &= 0x7F;
  }	    

  if (ui_getvalue_session.parameter.min < 0) {
    if (value < 0) {
      leds_7seg_set(3, LEDS_7SEG_MINUS);
      leds_7seg_set(4, -value);
    }
    else {
      leds_7seg_clear(3);
      leds_7seg_set(4, value);
    }
  }
  else 
    leds_7seg_two_digit_set(3, 4, value);
  

}