How to compare a stringHow to get string parts from string?How to writte simple string compare?I2C_Anything String / Char Array issuesHow to append float value of into a string ?How to convert String to Double?compare uint8_t to char arrayWebSocket client for ArduinoHttpClient conditional if with readString() incoming data bufferHaving problems with I2C - Slave is receiving “b ~ ,,,”How to compare two string?String compare when using Serial
What reasons are there for a Capitalist to oppose a 100% inheritance tax?
How do I deal with an unproductive colleague in a small company?
How dangerous is XSS?
Are there any examples of a variable being normally distributed that is *not* due to the Central Limit Theorem?
Is there a hemisphere-neutral way of specifying a season?
Extract rows of a table, that include less than x NULLs
What killed these X2 caps?
What are some good books on Machine Learning and AI like Krugman, Wells and Graddy's "Essentials of Economics"
Why was the shrinking from 8″ made only to 5.25″ and not smaller (4″ or less)?
Forgetting the musical notes while performing in concert
Arrow those variables!
Unable to supress ligatures in headings which are set in Caps
Does the Idaho Potato Commission associate potato skins with healthy eating?
Avoiding the "not like other girls" trope?
GFCI outlets - can they be repaired? Are they really needed at the end of a circuit?
Can I run a new neutral wire to repair a broken circuit?
How do conventional missiles fly?
Why is it a bad idea to hire a hitman to eliminate most corrupt politicians?
Why can't we play rap on piano?
How to tell a function to use the default argument values?
What do you call someone who asks many questions?
Should I tell management that I intend to leave due to bad software development practices?
What type of content (depth/breadth) is expected for a short presentation for Asst Professor interview in the UK?
In 'Revenger,' what does 'cove' come from?
How to compare a string
How to get string parts from string?How to writte simple string compare?I2C_Anything String / Char Array issuesHow to append float value of into a string ?How to convert String to Double?compare uint8_t to char arrayWebSocket client for ArduinoHttpClient conditional if with readString() incoming data bufferHaving problems with I2C - Slave is receiving “b ~ ,,,”How to compare two string?String compare when using Serial
How to compare a string coming from serial monitor with some predefined text stored as a local variable?
If I say:
int led = 2;
String a = " abcds";
void setup()
Serial.begin(9600);
void loop()
String b = Serial.read();
Serial.println(b);
if (b != a)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
just as an example, this code will not compile because on the serial I receive bytes and I want to compare with a string.
So my question is...
how should be done?
c string
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
How to compare a string coming from serial monitor with some predefined text stored as a local variable?
If I say:
int led = 2;
String a = " abcds";
void setup()
Serial.begin(9600);
void loop()
String b = Serial.read();
Serial.println(b);
if (b != a)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
just as an example, this code will not compile because on the serial I receive bytes and I want to compare with a string.
So my question is...
how should be done?
c string
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday
add a comment |
How to compare a string coming from serial monitor with some predefined text stored as a local variable?
If I say:
int led = 2;
String a = " abcds";
void setup()
Serial.begin(9600);
void loop()
String b = Serial.read();
Serial.println(b);
if (b != a)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
just as an example, this code will not compile because on the serial I receive bytes and I want to compare with a string.
So my question is...
how should be done?
c string
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
How to compare a string coming from serial monitor with some predefined text stored as a local variable?
If I say:
int led = 2;
String a = " abcds";
void setup()
Serial.begin(9600);
void loop()
String b = Serial.read();
Serial.println(b);
if (b != a)
digitalWrite(2,LOW);
else
digitalWrite(2,HIGH);
just as an example, this code will not compile because on the serial I receive bytes and I want to compare with a string.
So my question is...
how should be done?
c string
c string
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 1 hour ago
chicks
1497
1497
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
Iulian ChirvasaIulian Chirvasa
132
132
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Iulian Chirvasa is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday
add a comment |
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday
add a comment |
4 Answers
4
active
oldest
votes
version using String (not recommended, but it makes simpler to understand the following C-string version)
#define LED 2
const char* a = "abcd";
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
String s = Serial.readStringUntil('n');
s.trim();
if (s == a)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
the version with C-string:
#define LED 2
const char* a = "abcd";
char buffer[32];
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
size_t l = Serial.readBytesUntil('n', buffer, sizeof(buffer - 1));
if (buffer[l - 1] == 'r')
l--;
buffer[l] = 0; // the terminating zero
Serial.println(buffer);
if (strcmp(buffer, a) == 0)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
As I already commented on VE7JRO's post,Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
TheStringversion works perfectly, but I can't get theC-stringversion to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size:String4364 bytes VSC-string2746 bytes.
– VE7JRO
yesterday
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
add a comment |
If you do a Google search on "Arduino String" you should find a class reference on the String class. https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
It has a function compareTo() that should do what you need.
add a comment |
C has strcmp() function that is used to compare two strings. It will return zero if two strings are equal non zero when not.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
add a comment |
Here is a test sketch that uses a char array VS the String object. Please remember to set the serial monitor to send a newline only.
char inputBuffer[16];
char compareToThisString[] = "test string";
void setup()
Serial.begin(9600);
void loop()
if(Serial.available() > 0)
Serial.readBytesUntil('n', inputBuffer, 16);
if(strcmp(compareToThisString, inputBuffer) == 0)
Serial.println("Matches");
else
Serial.println("No Match");
memset(inputBuffer, 0, sizeof(inputBuffer));
As Egar Bonet mentions in his comments, there is a (up to) one second delay before Serial.readBytesUntil() terminates. That does not apply to the sketch I've written because the function terminates as soon as it receives the n character. Serial.readBytesUntil() is blocking code, but that is a different matter which may or may not be an issue for you, depending on what you're building and how much data you are sending. To reduce the timeout period, there is a Serial.setTimeout() function which could be set to whatever you want, but it only comes into play if you don't send the n character.
I'm usingmemset()to "zero out" the input buffer after each use. Withoutmemset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Usingmemset()only cost an extra 10 bytes compile size.
– VE7JRO
yesterday
Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacingmemset()with this:inputBuffer[0] = '';doesn't work either.
– VE7JRO
yesterday
readBytesUntilreturns the count of bytes read. it is the position where the 0 should go
– Juraj
17 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("schematics", function ()
StackExchange.schematics.init();
);
, "cicuitlab");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "540"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Iulian Chirvasa is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2farduino.stackexchange.com%2fquestions%2f63106%2fhow-to-compare-a-string%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
version using String (not recommended, but it makes simpler to understand the following C-string version)
#define LED 2
const char* a = "abcd";
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
String s = Serial.readStringUntil('n');
s.trim();
if (s == a)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
the version with C-string:
#define LED 2
const char* a = "abcd";
char buffer[32];
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
size_t l = Serial.readBytesUntil('n', buffer, sizeof(buffer - 1));
if (buffer[l - 1] == 'r')
l--;
buffer[l] = 0; // the terminating zero
Serial.println(buffer);
if (strcmp(buffer, a) == 0)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
As I already commented on VE7JRO's post,Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
TheStringversion works perfectly, but I can't get theC-stringversion to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size:String4364 bytes VSC-string2746 bytes.
– VE7JRO
yesterday
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
add a comment |
version using String (not recommended, but it makes simpler to understand the following C-string version)
#define LED 2
const char* a = "abcd";
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
String s = Serial.readStringUntil('n');
s.trim();
if (s == a)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
the version with C-string:
#define LED 2
const char* a = "abcd";
char buffer[32];
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
size_t l = Serial.readBytesUntil('n', buffer, sizeof(buffer - 1));
if (buffer[l - 1] == 'r')
l--;
buffer[l] = 0; // the terminating zero
Serial.println(buffer);
if (strcmp(buffer, a) == 0)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
As I already commented on VE7JRO's post,Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
TheStringversion works perfectly, but I can't get theC-stringversion to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size:String4364 bytes VSC-string2746 bytes.
– VE7JRO
yesterday
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
add a comment |
version using String (not recommended, but it makes simpler to understand the following C-string version)
#define LED 2
const char* a = "abcd";
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
String s = Serial.readStringUntil('n');
s.trim();
if (s == a)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
the version with C-string:
#define LED 2
const char* a = "abcd";
char buffer[32];
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
size_t l = Serial.readBytesUntil('n', buffer, sizeof(buffer - 1));
if (buffer[l - 1] == 'r')
l--;
buffer[l] = 0; // the terminating zero
Serial.println(buffer);
if (strcmp(buffer, a) == 0)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
version using String (not recommended, but it makes simpler to understand the following C-string version)
#define LED 2
const char* a = "abcd";
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
String s = Serial.readStringUntil('n');
s.trim();
if (s == a)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
the version with C-string:
#define LED 2
const char* a = "abcd";
char buffer[32];
void setup()
Serial.begin(115200);
pinMode(LED, OUTPUT);
void loop()
if (Serial.available())
size_t l = Serial.readBytesUntil('n', buffer, sizeof(buffer - 1));
if (buffer[l - 1] == 'r')
l--;
buffer[l] = 0; // the terminating zero
Serial.println(buffer);
if (strcmp(buffer, a) == 0)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
edited 8 hours ago
answered yesterday
JurajJuraj
8,22521128
8,22521128
As I already commented on VE7JRO's post,Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
TheStringversion works perfectly, but I can't get theC-stringversion to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size:String4364 bytes VSC-string2746 bytes.
– VE7JRO
yesterday
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
add a comment |
As I already commented on VE7JRO's post,Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
TheStringversion works perfectly, but I can't get theC-stringversion to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size:String4364 bytes VSC-string2746 bytes.
– VE7JRO
yesterday
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
As I already commented on VE7JRO's post,
Stream::readBytesUntil() will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.– Edgar Bonet
yesterday
As I already commented on VE7JRO's post,
Stream::readBytesUntil() will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.– Edgar Bonet
yesterday
The
String version works perfectly, but I can't get the C-string version to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size: String 4364 bytes VS C-string 2746 bytes.– VE7JRO
yesterday
The
String version works perfectly, but I can't get the C-string version to work. For me, the serial monitor shows "abcd" written out to 2 lines: line 1 prints "ab", line 2 prints "cd". Perhaps it's the old version of the IDE I'm using (1.0.6.2). I like that you provided 2 example sketches so the OP can see the difference in compile size: String 4364 bytes VS C-string 2746 bytes.– VE7JRO
yesterday
1
1
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
@EdgarBonet, it will wait only if terminating character is not present. the timeout can be set to for example to 10 milliseconds with setTimeout. in many cases it is better to wait for the stream as continue with other things in loop and then return to read an overflowed buffer
– Juraj
18 hours ago
add a comment |
If you do a Google search on "Arduino String" you should find a class reference on the String class. https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
It has a function compareTo() that should do what you need.
add a comment |
If you do a Google search on "Arduino String" you should find a class reference on the String class. https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
It has a function compareTo() that should do what you need.
add a comment |
If you do a Google search on "Arduino String" you should find a class reference on the String class. https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
It has a function compareTo() that should do what you need.
If you do a Google search on "Arduino String" you should find a class reference on the String class. https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
It has a function compareTo() that should do what you need.
answered yesterday
Duncan CDuncan C
1,9701618
1,9701618
add a comment |
add a comment |
C has strcmp() function that is used to compare two strings. It will return zero if two strings are equal non zero when not.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
add a comment |
C has strcmp() function that is used to compare two strings. It will return zero if two strings are equal non zero when not.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
add a comment |
C has strcmp() function that is used to compare two strings. It will return zero if two strings are equal non zero when not.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
C has strcmp() function that is used to compare two strings. It will return zero if two strings are equal non zero when not.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
answered yesterday
VaibhavVaibhav
652
652
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Vaibhav is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
add a comment |
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
I started to suggest the same thing, and then noticed that the OP is using Arduino String objects, not C strings.
– Duncan C
yesterday
add a comment |
Here is a test sketch that uses a char array VS the String object. Please remember to set the serial monitor to send a newline only.
char inputBuffer[16];
char compareToThisString[] = "test string";
void setup()
Serial.begin(9600);
void loop()
if(Serial.available() > 0)
Serial.readBytesUntil('n', inputBuffer, 16);
if(strcmp(compareToThisString, inputBuffer) == 0)
Serial.println("Matches");
else
Serial.println("No Match");
memset(inputBuffer, 0, sizeof(inputBuffer));
As Egar Bonet mentions in his comments, there is a (up to) one second delay before Serial.readBytesUntil() terminates. That does not apply to the sketch I've written because the function terminates as soon as it receives the n character. Serial.readBytesUntil() is blocking code, but that is a different matter which may or may not be an issue for you, depending on what you're building and how much data you are sending. To reduce the timeout period, there is a Serial.setTimeout() function which could be set to whatever you want, but it only comes into play if you don't send the n character.
I'm usingmemset()to "zero out" the input buffer after each use. Withoutmemset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Usingmemset()only cost an extra 10 bytes compile size.
– VE7JRO
yesterday
Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacingmemset()with this:inputBuffer[0] = '';doesn't work either.
– VE7JRO
yesterday
readBytesUntilreturns the count of bytes read. it is the position where the 0 should go
– Juraj
17 hours ago
add a comment |
Here is a test sketch that uses a char array VS the String object. Please remember to set the serial monitor to send a newline only.
char inputBuffer[16];
char compareToThisString[] = "test string";
void setup()
Serial.begin(9600);
void loop()
if(Serial.available() > 0)
Serial.readBytesUntil('n', inputBuffer, 16);
if(strcmp(compareToThisString, inputBuffer) == 0)
Serial.println("Matches");
else
Serial.println("No Match");
memset(inputBuffer, 0, sizeof(inputBuffer));
As Egar Bonet mentions in his comments, there is a (up to) one second delay before Serial.readBytesUntil() terminates. That does not apply to the sketch I've written because the function terminates as soon as it receives the n character. Serial.readBytesUntil() is blocking code, but that is a different matter which may or may not be an issue for you, depending on what you're building and how much data you are sending. To reduce the timeout period, there is a Serial.setTimeout() function which could be set to whatever you want, but it only comes into play if you don't send the n character.
I'm usingmemset()to "zero out" the input buffer after each use. Withoutmemset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Usingmemset()only cost an extra 10 bytes compile size.
– VE7JRO
yesterday
Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacingmemset()with this:inputBuffer[0] = '';doesn't work either.
– VE7JRO
yesterday
readBytesUntilreturns the count of bytes read. it is the position where the 0 should go
– Juraj
17 hours ago
add a comment |
Here is a test sketch that uses a char array VS the String object. Please remember to set the serial monitor to send a newline only.
char inputBuffer[16];
char compareToThisString[] = "test string";
void setup()
Serial.begin(9600);
void loop()
if(Serial.available() > 0)
Serial.readBytesUntil('n', inputBuffer, 16);
if(strcmp(compareToThisString, inputBuffer) == 0)
Serial.println("Matches");
else
Serial.println("No Match");
memset(inputBuffer, 0, sizeof(inputBuffer));
As Egar Bonet mentions in his comments, there is a (up to) one second delay before Serial.readBytesUntil() terminates. That does not apply to the sketch I've written because the function terminates as soon as it receives the n character. Serial.readBytesUntil() is blocking code, but that is a different matter which may or may not be an issue for you, depending on what you're building and how much data you are sending. To reduce the timeout period, there is a Serial.setTimeout() function which could be set to whatever you want, but it only comes into play if you don't send the n character.
Here is a test sketch that uses a char array VS the String object. Please remember to set the serial monitor to send a newline only.
char inputBuffer[16];
char compareToThisString[] = "test string";
void setup()
Serial.begin(9600);
void loop()
if(Serial.available() > 0)
Serial.readBytesUntil('n', inputBuffer, 16);
if(strcmp(compareToThisString, inputBuffer) == 0)
Serial.println("Matches");
else
Serial.println("No Match");
memset(inputBuffer, 0, sizeof(inputBuffer));
As Egar Bonet mentions in his comments, there is a (up to) one second delay before Serial.readBytesUntil() terminates. That does not apply to the sketch I've written because the function terminates as soon as it receives the n character. Serial.readBytesUntil() is blocking code, but that is a different matter which may or may not be an issue for you, depending on what you're building and how much data you are sending. To reduce the timeout period, there is a Serial.setTimeout() function which could be set to whatever you want, but it only comes into play if you don't send the n character.
edited yesterday
answered yesterday
VE7JROVE7JRO
1,65151122
1,65151122
I'm usingmemset()to "zero out" the input buffer after each use. Withoutmemset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Usingmemset()only cost an extra 10 bytes compile size.
– VE7JRO
yesterday
Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacingmemset()with this:inputBuffer[0] = '';doesn't work either.
– VE7JRO
yesterday
readBytesUntilreturns the count of bytes read. it is the position where the 0 should go
– Juraj
17 hours ago
add a comment |
I'm usingmemset()to "zero out" the input buffer after each use. Withoutmemset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Usingmemset()only cost an extra 10 bytes compile size.
– VE7JRO
yesterday
Stream::readBytesUntil()will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.
– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacingmemset()with this:inputBuffer[0] = '';doesn't work either.
– VE7JRO
yesterday
readBytesUntilreturns the count of bytes read. it is the position where the 0 should go
– Juraj
17 hours ago
I'm using
memset() to "zero out" the input buffer after each use. Without memset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Using memset() only cost an extra 10 bytes compile size.– VE7JRO
yesterday
I'm using
memset() to "zero out" the input buffer after each use. Without memset(), if you type in the correct string, it matches. If you then type in just the first 4 letter of the string, it matches which is incorrect. Using memset() only cost an extra 10 bytes compile size.– VE7JRO
yesterday
Stream::readBytesUntil() will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.– Edgar Bonet
yesterday
Stream::readBytesUntil() will wait for the terminating character until it gets it or it times out, which can lead to long delays during which the sketch is unresponsive. A better solution is to read only whatever is available, and process the buffer when an LF is read. C.f. the blog post Reading Serial on the Arduino, by Majenko, for a better solution.– Edgar Bonet
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacing
memset() with this: inputBuffer[0] = ''; doesn't work either.– VE7JRO
yesterday
"read max 15 to have one zero left in the array". I just tried it, and it doesn't work :( Replacing
memset() with this: inputBuffer[0] = ''; doesn't work either.– VE7JRO
yesterday
readBytesUntil returns the count of bytes read. it is the position where the 0 should go– Juraj
17 hours ago
readBytesUntil returns the count of bytes read. it is the position where the 0 should go– Juraj
17 hours ago
add a comment |
Iulian Chirvasa is a new contributor. Be nice, and check out our Code of Conduct.
Iulian Chirvasa is a new contributor. Be nice, and check out our Code of Conduct.
Iulian Chirvasa is a new contributor. Be nice, and check out our Code of Conduct.
Iulian Chirvasa is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Arduino Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2farduino.stackexchange.com%2fquestions%2f63106%2fhow-to-compare-a-string%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
For which arduino board? Most of us try to avoid the String class for the arduino uno. As soon as a character is available, you add it to a buffer or to a String. Sometimes the data from the serial port is closed with a linefeed, then you can process the text in the buffer or in the String when a linefeed is read.
– Jot
yesterday