LCD cursor positioning in Arduino - Time & Space Complexity
When we move the cursor on an LCD screen using Arduino, the time it takes depends on how the code sets the position.
We want to know how the time to position the cursor changes as the screen size or position changes.
Analyze the time complexity of the following code snippet.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // 16 columns, 2 rows
}
void loop() {
lcd.setCursor(5, 1); // Move cursor to column 5, row 1
lcd.print("Hello");
delay(1000);
}
This code moves the cursor to a specific position on a 16x2 LCD and prints text.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The call to
lcd.setCursor(column, row)which sends commands to the LCD controller. - How many times: Once per loop cycle, so it repeats every time
loop()runs.
The time to set the cursor depends on the position but usually is constant because the LCD controller moves the cursor directly.
| Input Size (position) | Approx. Operations |
|---|---|
| Column 5, Row 1 | Constant number of commands sent |
| Column 10, Row 0 | Same constant number of commands sent |
| Column 0, Row 1 | Same constant number of commands sent |
Pattern observation: The time does not grow with the cursor position; it stays about the same.
Time Complexity: O(1)
This means moving the cursor takes the same amount of time no matter where you place it on the screen.
[X] Wrong: "Moving the cursor farther on the screen takes more time because it has to move step by step."
[OK] Correct: The LCD controller receives a direct command to jump to the position, so it does not move stepwise but instantly.
Understanding how hardware commands work and their time cost helps you write efficient code and explain your reasoning clearly in interviews.
"What if we had to move the cursor by sending individual step commands instead of a direct position command? How would the time complexity change?"
Practice
lcd.setCursor(0, 1) do on a 16x2 LCD?Solution
Step 1: Understand lcd.setCursor parameters
The first number is the column (starting at 0), the second is the row (starting at 0).Step 2: Apply to given command
lcd.setCursor(0, 1) moves the cursor to column 0 (first column) and row 1 (second row).Final Answer:
Moves the cursor to the first column of the second row -> Option CQuick Check:
Columns and rows start at zero = first column, second row [OK]
- Thinking rows start at 1 instead of 0
- Confusing column and row order
- Assuming setCursor prints text
Solution
Step 1: Recall zero-based indexing
Columns and rows start at 0, so third column is 2, first row is 0.Step 2: Match parameters to correct syntax
lcd.setCursor(2, 0) sets cursor to third column, first row.Final Answer:
lcd.setCursor(2, 0); -> Option DQuick Check:
Third column = 2, first row = 0 [OK]
- Using 1-based indexing for columns or rows
- Swapping column and row values
- Missing semicolon at end
lcd.setCursor(5, 0);
lcd.print("Hi");
lcd.setCursor(0, 1);
lcd.print("Bye");Solution
Step 1: Analyze first setCursor and print
lcd.setCursor(5, 0) moves cursor to column 5, row 0. Printing "Hi" starts at column 5 on first row.Step 2: Analyze second setCursor and print
lcd.setCursor(0, 1) moves cursor to first column, second row. Printing "Bye" starts there.Final Answer:
First row: ' Hi' (5 spaces then Hi), second row: 'Bye' starting at first column -> Option BQuick Check:
Cursor moves control print position [OK]
- Assuming print always starts at first column
- Confusing row and column numbers
- Ignoring spaces before printed text
lcd.setCursor(16, 0);
lcd.print("Hello");Solution
Step 1: Check column index range
Columns start at 0, so valid columns are 0 to 15 for a 16-column LCD. 16 is out of range.Step 2: Verify other parts
Row 0 is valid (rows start at 0). lcd.print() can print strings. lcd.begin() is needed but not shown here, but question focuses on cursor.Final Answer:
Column index 16 is out of range for a 16-column LCD -> Option AQuick Check:
Column max index = 15 for 16 columns [OK]
- Using 1-based indexing for columns
- Assuming lcd.print can't print strings
- Ignoring lcd.begin() requirement
lcd.setCursor() command correctly positions the cursor before printing?Solution
Step 1: Calculate center position for 4 letters on 20 columns
Center column is 20 / 2 = 10. For 4 letters, start at 10 - (4 / 2) = 8.Step 2: Set cursor to column 8 on second row
Row 1 is second row (rows start at 0). So lcd.setCursor(8, 1) is correct.Final Answer:
lcd.setCursor(8, 1); -> Option AQuick Check:
Center start = half width minus half word length [OK]
- Using 1-based indexing for rows or columns
- Starting cursor too far left or right
- Confusing row and column numbers
Ready to prove it?
Pass the test and this pattern moves unknown
