#1 2023-04-22 00:20:53

farskoy
Учасник
Зареєстрований: 2023-04-22
Повідомлень: 1

Допоможіть з кодом

Маю код для midi footswitcha на 2 кнопки, він має працювати так, якщо я натискаю першу кнопку він має перемикати на пресеь вперед, якщо натискаю другу кнопку має перемикати пресет назад. А він працює так якщо я натисну першу кнопку в мене вмикається перший пресет, якщо я натискаю другу кнопку в мене увімкається 57 пресет. Як мені виправити цю проблему?  Пресети мають перемикатися в програмі amplitube 4

Код

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int switch1Pin = 3; // Пин первой кнопки
int switch2Pin = 2; // Пин второй кнопки

int switch1State = 0; // Состояние первой кнопки
int switch2State = 0; // Состояние второй кнопки

bool switch1Pressed = false; // Флаг нажатия первой кнопки
bool switch2Pressed = false; // Флаг нажатия второй кнопки

void setup() {
  pinMode(switch1Pin, INPUT_PULLUP); // Настройка пина первой кнопки как входа с подтяжкой
  pinMode(switch2Pin, INPUT_PULLUP); // Настройка пина второй кнопки как входа с подтяжкой

  MIDI.begin(); // Инициализация объекта MIDI
}

void loop() {
  delay(10); // добавляем небольшую задержку

  switch1State = digitalRead(switch1Pin); // Чтение состояния первой кнопки
  switch2State = digitalRead(switch2Pin); // Чтение состояния второй кнопки
 
  if (switch1State == LOW && !switch1Pressed) { // Если нажата первая кнопка и флаг нажатия не установлен
    MIDI.sendControlChange(0, 1, 1); // Отправить команду "Control Change Preset Next" на MIDI-канал 1
    switch1Pressed = true; // Установить флаг нажатия
  } else if (switch1State == HIGH && switch1Pressed) { // Если первая кнопка отжата и флаг нажатия установлен
    switch1Pressed = false; // Сбросить флаг нажатия
  }

  if (switch2State == LOW && !switch2Pressed) { // Если нажата вторая кнопка и флаг нажатия не установлен
    MIDI.sendControlChange(0, 2, 1); // Отправить команду "Preset Back" на MIDI-канал 2
    switch2Pressed = true; // Установить флаг нажатия
  } else if (switch2State == HIGH && switch2Pressed) { // Если вторая кнопка отжата и флаг нажатия установлен
    MIDI.sendControlChange(0, 2, 0); // Отправить команду "Preset Back" на MIDI-канал 2 с нулевым значением для отмены
    switch2Pressed = false;

  if (switch1State == HIGH && switch1Pressed) { // Если первая кнопка отжата и флаг нажатия установлен
    switch1Pressed = false; // Сбросить флаг нажатия
  }
}
  if (switch2State == HIGH && switch2Pressed) { // Если вторая кнопка отжата и флаг нажатия установлен
    MIDI.sendControlChange(0, 2, 0); // Отправить команду "Preset Back" на MIDI-канал 2 с нулевым значением для отмены
    switch2Pressed = false; // Сбросить флаг нажатия
  }
}

Неактивний

#2 2023-04-29 00:02:52

luminofor
Учасник
Зареєстрований: 2020-01-28
Повідомлень: 52

Re: Допоможіть з кодом

Привіт. Дуже сильно не поглиблювався у ваш код.
Бачу помилку

if (switch2State == LOW && !switch2Pressed) { // Если нажата вторая кнопка и флаг нажатия не установлен
    MIDI.sendControlChange(0, 2, 1); // Отправить команду "Preset Back" на MIDI-канал 2
    switch2Pressed = true; // Установить флаг нажатия
  } else if (switch2State == HIGH && switch2Pressed) { // Если вторая кнопка отжата и флаг нажатия установлен
    MIDI.sendControlChange(0, 2, 0); // Отправить команду "Preset Back" на MIDI-канал 2 с нулевым значением для отмены
    switch2Pressed = false;

Не вистачає замикаючої фігурної скобки. Має бути
If (...){
....
}else if(...){
...
}

Неактивний

#3 2023-04-29 10:41:55

Кирило
Гість

Re: Допоможіть з кодом

Всім привіт! Підкажіть будь ласка, як зробити декілька лічильників паралельно, при цьому кожен лічильник має різні проміжки часу за допомогою millis().

#4 2023-04-29 13:58:19

Васятко
Гість

Re: Допоможіть з кодом

Для кожного лічильника робите свою змінну в яку записуєте початок відліку

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму