Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
String parsing from serial input
📖 Scenario: You are building a simple Arduino program that reads text data sent over the serial port. This is like receiving messages from your computer or another device. You want to take the incoming text and split it into parts to understand it better.
🎯 Goal: Learn how to read a line of text from the serial input, split it into words, and print each word separately. This helps you handle commands or data sent to your Arduino.
📋 What You'll Learn
Create a String variable called inputLine to store incoming serial data.
Create an integer variable called delimiterIndex to find spaces in the string.
Use a while loop to find each word separated by spaces in inputLine.
Print each word on a new line using Serial.println().
💡 Why This Matters
🌍 Real World
Parsing serial input is common when Arduino devices receive commands or data from sensors, computers, or other devices. Splitting input into words helps the Arduino understand and respond correctly.
💼 Career
Understanding how to parse strings from serial input is useful for embedded systems programming, IoT device development, and working with hardware communication protocols.
Progress0 / 4 steps
1
Set up serial communication and read input
Write code to start serial communication at 9600 baud and create a String variable called inputLine. Then read a line from the serial input into inputLine using Serial.readStringUntil('\n').
Arduino
Hint
Use Serial.begin(9600); in setup() and Serial.readStringUntil('\n'); in loop() to read a line.
2
Create a variable to find spaces
Add an integer variable called delimiterIndex and set it to the position of the first space character in inputLine using inputLine.indexOf(' ').
Arduino
Hint
Use int delimiterIndex = inputLine.indexOf(' '); to find the first space.
3
Extract and print each word using a loop
Use a while loop that runs while delimiterIndex is not -1. Inside the loop, extract the first word using inputLine.substring(0, delimiterIndex), print it with Serial.println(), then update inputLine to remove the printed word and space. Update delimiterIndex to the next space position in the new inputLine.
Arduino
Hint
Inside the loop, get the word before the space, print it, then remove it from inputLine. Find the next space again.
4
Print the last word after the loop
After the while loop, print the remaining inputLine using Serial.println()> to show the last word.
Arduino
Hint
Print the last word left in inputLine after the loop ends.
Practice
(1/5)
1. What does Serial.readStringUntil('\n') do in Arduino programming?
easy
A. Reads characters from serial input until a newline character is found
B. Sends a newline character over serial
C. Clears the serial buffer
D. Reads only one character from serial input
Solution
Step 1: Understand the function purpose
Serial.readStringUntil('\n') reads characters from the serial buffer until it finds the newline character '\n'.
Step 2: Compare with other options
It does not send data, clear buffer, or read only one character; it reads a full line until newline.
Final Answer:
Reads characters from serial input until a newline character is found -> Option A
Quick Check:
Read until '\n' means read full line [OK]
Hint: Remember '\n' means newline, so it reads until line ends [OK]
Common Mistakes:
Thinking it reads only one character
Confusing reading with sending data
Assuming it clears the buffer
2. Which of the following is the correct way to read a full line from serial input in Arduino?
easy
A. Serial.read()
B. Serial.available()
C. Serial.readStringUntil('\n')
D. Serial.write()
Solution
Step 1: Identify function to read full line
Serial.readStringUntil('\n') reads characters until newline, capturing a full line.
Step 2: Understand other functions
Serial.read() reads one byte, Serial.write() sends data, and Serial.available() checks bytes available.
Final Answer:
Serial.readStringUntil('\n') -> Option C
Quick Check:
Read full line = readStringUntil('\n') [OK]
Hint: Use readStringUntil('\n') to get whole line input [OK]
Common Mistakes:
Using Serial.read() to get full line
Confusing read and write functions
Using Serial.available() to read data
3. What will be the output of this Arduino code if the serial input is "TEMP:25\n"?
String input = Serial.readStringUntil('\n');
int value = input.substring(5).toInt();
Serial.println(value);
medium
A. 25
B. TEMP:25
C. 0
D. Error
Solution
Step 1: Read the input string
The input string is "TEMP:25" (newline removed by readStringUntil).
Step 2: Extract substring and convert to integer
input.substring(5) takes characters from index 5 onward, which is "25". Then toInt() converts "25" to integer 25.
Final Answer:
25 -> Option A
Quick Check:
Substring from 5 = "25", toInt() = 25 [OK]
Hint: Use substring index to isolate number, then toInt() converts [OK]
Common Mistakes:
Forgetting substring index starts at 0
Expecting full string printed
Not converting substring to int
4. Identify the error in this Arduino code snippet for parsing serial input:
String data = Serial.readStringUntil('\n');
int num = data.toInt();
if(num = 10) {
Serial.println("Number is 10");
}
medium
A. toInt() cannot convert string to int
B. Missing semicolon after Serial.println
C. Serial.readStringUntil('\n') does not read input
D. Using assignment '=' instead of comparison '==' in if condition
Solution
Step 1: Check if condition syntax
The condition if(num = 10) uses assignment '=' instead of comparison '=='. This causes a bug.
Step 2: Verify other parts
Semicolon is present, toInt() works correctly, and readStringUntil('\n') reads input properly.
Final Answer:
Using assignment '=' instead of comparison '==' in if condition -> Option D
Quick Check:
Use '==' to compare values in if [OK]
Hint: Use '==' for comparison, not '=' [OK]
Common Mistakes:
Using '=' instead of '==' in conditions
Assuming toInt() fails on valid numbers
Thinking readStringUntil doesn't read input
5. You receive serial input in the format "CMD:VALUE\n", for example "LED:1\n". How can you parse the command and value separately in Arduino?
hard
A. Use String input = Serial.readStringUntil('\n'); int val = input.substring(0,3).toInt(); String cmd = input.substring(4);
B. Use String input = Serial.readStringUntil('\n'); String cmd = input.substring(0,3); int val = input.substring(4).toInt();
C. Use String input = Serial.readString(); String cmd = input.split(':')[0]; int val = input.split(':')[1].toInt();
D. Use String input = Serial.read(); String cmd = input.substring(0,3); int val = input.substring(4).toInt();
Solution
Step 1: Read full line input
Serial.readStringUntil('\n') reads the entire line including command and value.
Step 2: Extract command and value
input.substring(0,3) extracts the first 3 characters as command (e.g., "LED"), and input.substring(4).toInt() converts the value part after ':' to integer.
Final Answer:
Use String input = Serial.readStringUntil('\n'); String cmd = input.substring(0,3); int val = input.substring(4).toInt(); -> Option B
Quick Check:
Substring command and value parsing works [OK]
Hint: Use substring with indexes to split command and value [OK]
Common Mistakes:
Using read() instead of readStringUntil
Trying to split string with split() which is not available