1

I receive strings over the serial port like so:

VLT=53.0, AMP=-30.2, AHR=-10, SOC=98, TMP=136, STS=192

I want to reduce the use of string functions with the idea of dropping all non-digits, keeping numbers dot and comma, to get this:

53.0,-30.2,-10,98,136,192

in an array and simple read [0], [1], etc.

Regular expressions would be idea, but do not exist like in PERL. Any hint would be much appreciated.

Relevant code used:

 char inByte = SerialPortOne.read(); // read byte
 strRecordIn.concat(inByte); // add byte to receive buffer
 for (int i = 0; i <= 3; i++) { // VLT, AMP, AHR, SOC
 strWord = getValue(strRecordIn, ',', i); // get data item from RecordIn array
 strWord.remove(0, 4); // remove field identifier (1st 3 char plus =)
 strRecordOut += ','; // add delimiter
 strRecordOut += strWord; // add value
 strWord = ""; // reset strWord
 }

Ideally:

 char inByte = SerialPortOne.read(); // read byte
 if (inByte = [%d.,]+) {
 strRecordIn.concat(inByte); // add byte to receive buffer
 }
asked Apr 14, 2016 at 12:06

1 Answer 1

0

If you just want to remove the letters:

#include <ctype.h>
char inByte = SerialPortOne.read(); // read byte
if (!isalpha(inByte)) { // not letter
 strRecordIn.concat(inByte); // add byte to receive buffer
}

Or you may test it for isdigit() and explicitly compare to ',' and '.':

if (isdigit(inByte) || inByte == '.' || inByte == ',') {
 strRecordIn.concat(inByte); // add byte to receive buffer
}

C.f. the documentation of <ctype.h>.

answered Apr 14, 2016 at 12:18
2
  • Brilliant! I got lots to learn in this Arduino environment. Thank you! Commented Apr 14, 2016 at 12:30
  • @MaxG: Well, in this case it's standard C, not specific to Arduino. Commented Apr 14, 2016 at 12:36

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.