Парсинг текста

schick2011
Offline
Зарегистрирован: 29.07.2017

Добрый день.

Создал приложение для управления подсветкой.

У подсветки есть несколько каналов, которые могут принимать значение от 0 до 255.

Приложение на телефоне отправляет по Bluetooth текст в виде "цвет_значение". Например "R_255" или "G_140"

Как разделить принятую информацию на две переменные "цвет" и "значение" Например "R" и "255" или "G" и"140"

После анализа программа должна установить для определенного канала нужное значение. Как это сделать я разберусь сам. Мне не понятно только то, как разделить принятый текст на две переменные.

schick2011
Offline
Зарегистрирован: 29.07.2017

Вот что придумал. Анализируем принятую информацию посимвольно.

String str1;
char r = 'R';


void setup()

{
  Serial.begin(9600);
  Serial.println("String analyzer is a module, that will analyze text recieved via Bluetooth or a PC.");
  Serial.println("Input text like 'COLORNAME_COLORVALUE' ");
}

void loop()
{
  if (Serial.available())
  {
    String str1 = Serial.readString();
    Serial.print(str1);

    if ( str1[0] == r)
    {
      Serial.print("Color RED");
    }



  }


}

Символы 3,4,5 объединяются в String color.

    n3 = str1[2];
    n4 = str1[3];
    n5 = str1[4];

    color = (n3 + n4 + n5);

Как теперь превратить String color в Int?

  int intcolor = color.toInt();

 

schick2011
Offline
Зарегистрирован: 29.07.2017

Задал вопрос, сам же и ответил.

strarbit
Offline
Зарегистрирован: 12.06.2016

Символы 3,4,5 объединяются в String color.

Не объединяются, а заменяются
смотрите на Serial.parseInt();

Nosferatu
Offline
Зарегистрирован: 04.11.2012
  if (Serial.available() > 0) {
    int r;
    if (Serial.read() == 'R')
      r = Serial.parseInt();
    Serial.print(r);
  }

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Nosferatu пишет:

  if (Serial.available() > 0) {
    int r;
    if (Serial.read() == 'R')
      r = Serial.parseInt();
    Serial.print(r);
  }

 

а если в сериале уже лежит "R_255 G_140 B_122" ?

Nosferatu
Offline
Зарегистрирован: 04.11.2012

xDriver пишет:

а если в сериале уже лежит "R_255 G_140 B_122" ?

Обработать всё также.

  if (Serial.available() > 0) {
    byte incomingByte = Serial.read();
    if (incomingByte == 'R') {
      Serial.print("R = ");
      Serial.println(Serial.parseInt());
    }
    if (incomingByte == 'G') {
      Serial.print("G = ");
      Serial.println(Serial.parseInt());
    }
    if (incomingByte == 'B') {
      Serial.print("B = ");
      Serial.println(Serial.parseInt());
    }
  }