Передача нескольких данных Bluetooth

Twilkeris
Offline
Зарегистрирован: 05.02.2016

Добрый день, уважаемые форумчане!

Передаю из Android-приложения команду в формате String, в Arduino приём осуществляю таким образом: 

void loop() {
  if(mySerial.available()>0)       // Если имеются в порту данные
  {
     incomingByte = mySerial.read();    // считывание данных
     if(incomingByte!=-1)              // если данные не равны -1
     {
        if(incomingByte == 48){ //Получили "0"
          movement.to_up(50);
        }else if(incomingByte == 49){
          movement.to_down(50);
        }
}

}

Аргументом метода to_up() и to_down() является целое число, которое указывает расстояние в миллиметрах, на которое должно произойти передвижение. В данном примере это расстояние задаётся внутри скетча Arduino. Приходящая из Android команда указывает только на выбор одного из двух методов.

Теперь возникла необходимость кроме выбора метода из Android ещё выбирать и расстояние. Подскажите пожалуйста, каким образом можно осуществить это?

Если мы будем из Android передавать строку, например "060", где первый символ - выбор метода, оставшиеся - необходимое расстояние, то будем получать такой набор данных: 48 54 48. Каким образом его можно сохранить в памяти устройства и обработать? 

 

P.S. Полный код скетча Arduino и кода для Android не стал приводить, чтобы не раздувать пост. 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Ну если прям через строки...

String fromSerial = "060";
byte cmd = fromSerial.substring(0,1).toInt();
byte dst = fromSerial.substring(1).toInt();

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нафига писать через Альпы

incomingByte == 48){ //Получили "0"

почему так прямо и не написать

incomingByte == '0'){ //Получили "0"

?

P.S. Полный ответ на вопрос не стал приводить, чтобы не раздувать пост. 

Twilkeris
Offline
Зарегистрирован: 05.02.2016

Спасибо за помощь!

Команда состоит из неограниченного набора символов, окончанием команды служит знак '#'. У меня получился такой код, может быть кому-то поможет. 

  while (mySerial.available() > 0) {
    char inChar = mySerial.read();
    if (inChar != '#') {
      inString += inChar; 
    }else{
      mySerial.print("String: ");
      mySerial.println(inString);
      command = inString;
      inString = "";
    }
  }

Далее я обработал command, используя методы charAt(), substring(), toInt().

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Поправил комментарий:

ЕвгенийП пишет:

incomingByte == 48){ //Получили "0"

почему так прямо и не написать

incomingByte == '0'){ //Получили 48

Twilkeris
Offline
Зарегистрирован: 05.02.2016

ЕвгенийПandriano, спасибо! Я понимаю смысл этой записи. Просто когда писал код, тесты проводил с помощью приложения bluetooth terminal, в котором пришедшая строка выводилась в виде массива кодов символов. Делал максимально в лоб, чтобы не допустить ошибки из-за невнимательности. :)