Как конвертировать String в Char или Byte array ?

Тема в разделе "Arduino & Shields", создана пользователем Jazzy, 13 май 2017.

  1. smile

    smile Нерд

    спасибо! видимо я не те книжки читаю...
     
  2. mcureenab

    mcureenab Гуру

    Так вы определитесь хотя бы с общей структурой сообщений.
    Сейчас не понятно, что вам от одного сообщения надо. Какие должны быть command и value1?
     
    Jazzy нравится это.
  3. Jazzy

    Jazzy Нерд

    Главное, чтобы они соответствовали значениям с передатчика. В данном случае нужно послать 144 60 PotVal.

    Command - 144

    Value1 - 60

    Value2 - плавающее

    Можете подсказать, как отправить и принять?

    Это midi сообщение.
     
    Последнее редактирование: 20 май 2017
  4. mcureenab

    mcureenab Гуру

    Вроде как то так получается. Не уверен в надежности радиоканала.

    Код (C++):
    void loop(void){
      if (radio.available()){
       radio.read(&msg, 3);
       midiOUT(msg[0], msg[1], msg[2]);
      }
    }
     
    Jazzy нравится это.
  5. Jazzy

    Jazzy Нерд

    Спасибо! Попробую, отпишу о работоспособности!)
     
  6. mcureenab

    mcureenab Гуру

    Объект Serial выглядит как COM порт на стороне компьютера.

    Для MIDI в скетче нужно специальный драйвер USB и подходящая плата Arduino. Например Arduino Leonardo.\

    https://www.arduino.cc/en/Tutorial/MidiDevice
     
    Jazzy нравится это.
  7. mcureenab

    mcureenab Гуру

    Или поищите темы, как делают MIDI, со всякими конвертерами.
     
    Jazzy нравится это.
  8. Jazzy

    Jazzy Нерд

    Так у меня работает с 5pin midi. И с перепрошивкой 16u2 чипа на меге. И по радио в string версии и напрямую.

    Только вот в новой "char" версии не хочет...
     
  9. Jazzy

    Jazzy Нерд

    Я понял! Вилосити до 127 же...)))) :D
     
    Последнее редактирование: 23 май 2017
  10. Jazzy

    Jazzy Нерд

    Так, все работает!!!! Мега респект всем участникам дискуссии!!!! Особенно mcureenab!!!!!

    По желанию, с меня beer например!!! =)
     
  11. Jazzy

    Jazzy Нерд

    Сори, еще один вопрос!)

    Как "подменить" значение msg[1] если нажата кнопка например?!!!!
    Код (C++):
    void loop(void){
      if (radio.available()){
       radio.read(&msg, 3);
       midiOUT(msg[0], msg[1], msg[2]);
      }
    }
    Чтобы на выходе изменялось значение value1 соответственно


    Код (C++):
    void midiOUT(char command, char value1, char value2) {
      Serial.write(command);
      Serial.write(value1);
      Serial.write(value2);
     
  12. mcureenab

    mcureenab Гуру

    Это в приемнике кнопка нажата?
    Присваивай нужное значение.

    Код (C++):
    void loop(void){
      if (radio.available()){
       radio.read(&msg, 3);
       msg[1] = 123; // нечто другое
       midiOUT(msg[0], msg[1], msg[2]);
      }
    }
     
    Jazzy нравится это.
  13. Jazzy

    Jazzy Нерд


    Да, в приемнике!)

    Спасибо, буду пробовать!
     
  14. mcureenab

    mcureenab Гуру

    У вас чтение радиоканала увязано с состоянием кнопки. Точнее даде с параключением кнопки. Разве так надо вам?
     
  15. Jazzy

    Jazzy Нерд

    Нет, пожалуй не нужно) и есть понимание, что не верен мой вариант.. пытался еще через else if
    Я, к сожалению, пока не суперспециалист в коде, пытаюсь собрать из того, что работает в других случаях без радио...
     
    Последнее редактирование: 5 июн 2017
  16. mcureenab

    mcureenab Гуру

    Так подозреваю, что buttonState тут вообще не нужен.
    А менять msg [1] нужно только когда кнопка нажата.

    Получается внешний if проверяет готовность данных и читает канал и внутренний if проверяет кнопку и меняет данные. За тем данные отправляются.
     
    Jazzy нравится это.
  17. Jazzy

    Jazzy Нерд

    Я дико ступил, прикрутив кнопку к передатчику....вечерело:D
    Заработало вроде!) И да, без всяких баттонстэйтов)
    Спасибо за поддержку!!!!!

     
  18. Jazzy

    Jazzy Нерд

    Сори за воскрешение темы! Появился, видимо, финальный вопрос!!)

    Подменять данные по нажатию кнопки научился, вот скетч.

    ВОПРОС:

    Как подменить данные, если пришло сообщение с определённым значением msg[1]?
    Например, если в сообщении msg[1] = 39, то меняем его значение, допустим, на 62.
    Если же в сообщении msg[1] - любое другое число кроме 39, подмены не происходит!!


    Код (C++):
    void loop(void){


    const int buttonPin = 2;        
    int buttonVal = 0;            
    //int buttonState = 0;
    pinMode(buttonPin, INPUT);
    buttonVal = digitalRead(buttonPin);

      if (radio.available()){
       radio.read(&msg, 3);

      if (buttonVal == HIGH){
       msg[1] = 60; // нечто другое
       midiOUT(msg[0], msg[1], msg[2]);
      }


      if (buttonVal == LOW){
        midiOUT(msg[0], msg[1], msg[2]);
      }
    }
    }
     
    Последнее редактирование: 25 июл 2017