Как павильно считать строку с com порта

gastelo
Offline
Зарегистрирован: 12.06.2014

На com порт приходит строка из 9 . Никак не могу ее правильно разбить на 3 int.

gastelo
Offline
Зарегистрирован: 12.06.2014
int smbd[3] = {0, 0, 0}; 
byte lineEnding = 0x0A; 

int bytesRead = Serial.readBytesUntil(lineEnding, (char*)smbd, 3);

проверяю допустим smbd[1], и получаю там двузначное число

Если я провеяю через монитор com порта, то симво 0x0A он добавляет автоматтически при нажатии enter?

 

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

Если я правильно понял задачу, то вот что приходит на ум первое.

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  char incomingBytes[9];
  String buffer;
  if (Serial.available())
  {
    Serial.readBytesUntil(13, incomingBytes, 9);
    //Serial.readBytes(incomingBytes, 9);
    buffer = incomingBytes;
    int one_int = buffer.substring(0, 3).toInt();
    int two_int = buffer.substring(3, 6).toInt();
    int three_int = buffer.substring(6, 9).toInt();
    Serial.println(one_int);
    Serial.println(two_int);
    Serial.println(three_int);
  }
}
auct
Offline
Зарегистрирован: 14.12.2014

Если строка содержит только числа, то можно так:

//a=s1*1000000+s2*1000+s3

unsigned long a;
int s1=0;
int s2=0;
int s3=0;

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(4);
  Serial.flush();
}

void loop(){
  if (Serial.available())
  { a = Serial.parseInt();
   //Serial.println(a);
   s1=a/1000000;
   s2=(a-s1*1000000)/1000;
   s3=a-s1*1000000-s2*1000;
   Serial.println(s1);
   Serial.println(s2);
   Serial.println(s3);
   }

}

Строку формируем в компорт a=s1*1000000+s2*1000+s3