Ch8 Arduino Tutorialspoint
Ch8 Arduino Tutorialspoint
Decision making structures require that the programmer specify one or more conditions
to be evaluated or tested by the program. It should be along with a statement or
statements to be executed if the condition is determined to be true, and optionally, other
statements to be executed if the condition is determined to be false.
Following is the general form of a typical decision making structure found in most of the
programming languages –
Control Statements are elements in Source Code that control the flow of program
execution. They are:
If statement
If …else statement
If…else if …else statement
switch case statement
Conditional Operator ? :
33
Arduino
if statement
It takes an expression in parenthesis and a statement or block of statements. If the
expression is true then the statement or block of statements gets executed otherwise
these statements are skipped.
if (expression)
statement;
You can use the if statement without braces { } if you have one statement.
Form 2
if (expression)
{
Block of statements;
}
34
Arduino
Example
If …else statement
An if statement can be followed by an optional else statement, which executes when the
expression is false.
35
Arduino
Example
36
Arduino
An if can have zero or one else statement and it must come after any else if's.
An if can have zero to many else if statements and they must come before the
else.
Once an else if succeeds, none of the remaining else if or else statements will be
tested.
37
Arduino
Example
38
Arduino
{
A++;
}
else
c++;
}
The break keyword makes the switch statement exit, and is typically used at the end of
each case. Without a break statement, the switch statement will continue executing the
following expressions ("falling-through") until a break, or the end of the switch statement
is reached.
39
Arduino
}
}
Example
Here is a simple example with switch. Suppose we have a variable phase with only 3
different states (0, 1, or 2) and a corresponding function (event) for each of these states.
This is how we could switch the code to the appropriate routine:
switch (phase)
{
case 0: Lo(); break;
case 1: Mid(); break;
case 2: Hi(); break;
default: Message("Invalid state!");
40
Arduino
Conditional Operator ? :
The conditional operator ? : is the only ternary operator in C.
Expression1 is evaluated first. If its value is true, then expression2 is evaluated and
expression3 is ignored. If expression1 is evaluated as false, then expression3 evaluates
and expression2 is ignored. The result will be a value of either expression2 or expression3
depending upon which of them evaluates as True.
Example
/* Find max(a, b): */
max = ( a > b ) ? a : b;
/* Convert small letter to capital: */
/* (no parentheses are actually necessary) */
c = ( c >= 'a' && c <= 'z' ) ? ( c - 32 ) : c;
41
Arduino – Loops Arduino
Programming languages provide various control structures that allow for more complicated
execution paths.
while loop
do…while loop
for loop
nested loop
infinite loop
while loop
while loops will loop continuously, and infinitely, until the expression inside the
parenthesis, () becomes false. Something must change the tested variable, or the while
loop will never exit.
42
Arduino
do…while loop
The do…while loop is similar to the while loop. In the while loop, the loop-continuation
condition is tested at the beginning of the loop before performed the body of the loop. The
do…while statement tests the loop-continuation condition after performed the loop body.
Therefore, the loop body will be executed at least once.
When a do…while terminates, execution continues with the statement after the while
clause. It is not necessary to use braces in the do…while statement if there is only one
statement in the body. However, the braces are usually included to avoid confusion
between the while and do…while statements.
43
Arduino
for loop
A for loop executes statements a predetermined number of times. The control expression
for the loop is initialized, tested and manipulated entirely within the for loop parentheses.
It is easy to debug the looping behavior of the structure as it is independent of the activity
inside the loop.
Each for loop has up to three expressions, which determine its operation. The following
example shows general for loop syntax. Notice that the three expressions in the for loop
argument parentheses are separated with semicolons.
Example
for(counter=2;counter <=9;counter++)
{
//statements block will executed 10 times
}
44
Arduino
Nested Loop
C language allows you to use one loop inside another loop. The following example
illustrates the concept.
Example
for(counter=0;counter<=9;counter++)
{
//statements block will executed 10 times
for(i=0;i<=99;i++)
{
//statements block will executed 100 times
}
}
Infinite loop
It is the loop having no terminating condition, so the loop becomes infinite.
for (;;)
{
// statement block
}
45
Arduino
while(1)
{
// statement block
}
do{
Block of statements;
} while(1);
46
Arduino - Functions Arduino
Functions allow structuring the programs in segments of code to perform individual tasks.
The typical case for creating a function is when one needs to perform the same action
multiple times in a program.
Functions help the programmer stay organized. Often this helps to conceptualize
the program.
Functions codify one action in one place so that the function only has to be thought
about and debugged once.
This also reduces chances for errors in modification, if the code needs to be
changed.
Functions make the whole sketch smaller and more compact because sections of
code are reused many times.
They make it easier to reuse code in other programs by making it modular, and
using functions often makes the code more readable.
There are two required functions in an Arduino sketch or a program i.e. setup () and loop().
Other functions must be created outside the brackets of these two functions.
47
Arduino
Function Declaration
A function is declared outside any other functions, above or below the loop function.
1. The first way is just writing the part of the function called a function prototype above
the loop function, which consists of:
The following example shows the demonstration of the function declaration using the first
method.
Example
int sum_func (int x, int y) // function declaration
{
int z=0;
z= x+y ;
return z; // return the value
}
void setup ()
48
Arduino
{
Statements // group of statements
}
Void loop ()
{
int result =0 ;
result = Sum_func (5,6) ; // function call
}
2. The second part, which is called the function definition or declaration, must be declared
below the loop function, which consists of -
The following example demonstrates the declaration of function using the second method.
Example
int sum_func (int , int ) ; // function prototype
void setup ()
{
Statements // group of statements
}
Void loop ()
{
int result =0 ;
result = Sum_func (5,6) ; // function call
}
49
Arduino
The second method just declares the function above the loop function.
50
Arduino – Strings Arduino
Strings are used to store text. They can be used to display text on an LCD or in the Arduino
IDE Serial Monitor window. Strings are also useful for storing the user input. For example,
the characters that a user types on a keypad connected to the Arduino.
Arrays of characters, which are the same as the strings used in C programming.
In this chapter, we will learn Strings, objects and the use of strings in Arduino sketches.
By the end of the chapter, you will learn which type of string to use in a sketch.
A string is a special array that has one extra element at the end of the string, which always
has the value of 0 (zero). This is known as a "null terminated string".
Example
void setup()
{
char my_str[6]; // an array big enough for a 5 character string
[Link](9600);
my_str[0] = 'H'; // the string consists of 5 characters
my_str[1] = 'e';
my_str[2] = 'l';
my_str[3] = 'l';
my_str[4] = 'o';
my_str[5] = 0; // 6th array element is a null terminator
[Link](my_str);
}
void loop()
{ }
51
Arduino
The following example shows what a string is made up of; a character array with printable
characters and 0 as the last element of the array to show that this is where the string
ends. The string can be printed out to the Arduino IDE Serial Monitor window by using
[Link]() and passing the name of the string.
This same example can be written in a more convenient way as shown below:
Example
void setup()
{
char my_str[] = "Hello";
[Link](9600);
[Link](my_str);
}
void loop()
{
}
In this sketch, the compiler calculates the size of the string array and also automatically
null terminates the string with a zero. An array that is six elements long and consists of
five characters followed by a zero is created exactly the same way as in the previous
sketch.
Example
void setup()
{
char like[] = "I like coffee and cake"; // create a string
[Link](9600);
52
Arduino
Result
I like coffee and cake
I like coffee
I like coffee and tea
When the string is printed, all the characters are printed up to the new null terminating
zero. The other characters do not disappear; they still exist in the memory and the string
array is still the same size. The only difference is that any function that works with strings
will only see the string up to the first null terminator.
New characters overwrite "cak" of the word "cake" with the word "tea". This is done by
overwriting individual characters. The 'e' of "cake" is replaced with a new null terminating
character. The result is that the string is actually terminated with two null characters, the
original one at the end of the string and the new one that replaces the 'e' in "cake". This
makes no difference when the new string is printed because the function that prints the
string stops printing the string characters when it encounters the first null terminator.
53
Arduino
Functions Description
The String class, part of the core as of version 0019, allows you
to use and manipulate strings of text in more complex ways
than character arrays do. You can concatenate Strings, append
to them, search for and replace substrings, and more. It takes
more memory than a simple character array, but it is also more
String() useful.
54
Arduino
55
Arduino
Example
void setup()
{
char str[] = "This is my string"; // create a string
char out_str[40]; // output from string functions placed here
int num; // general purpose integer
[Link](9600);
56
Arduino
num = sizeof(out_str);
[Link]("Size of the array out_str[]: ");
[Link](num);
}
void loop()
{
}
Result
This is my string
String length is: 17
Size of the array: 18
This is my string
This is my string sketch.
String length is: 25
Size of the array out_str[]: 40
The string contains 17 characters, so we see 17 printed in the Serial Monitor window.
sizeof() looks like a function, but technically is an operator. It is not a part of the C string
library, but was used in the sketch to show the difference between the size of the array
and the size of the string (or string length).
57
Arduino
22 free char elements in the array. These free elements are found after the string in
memory.
The string was copied to the array so that we would have some extra space in the array
to use in the next part of the sketch, which is adding a string to the end of a string.
After concatenation, the length of the string is printed to show the new string length. The
length of the array is then printed to show that we have a 25-character long string in a 40
element long array.
Remember that the 25-character long string actually takes up 26 characters of the array
because of the null terminating zero.
Array Bounds
When working with strings and arrays, it is very important to work within the bounds of
strings or arrays. In the example sketch, an array was created, which was 40 characters
long, in order to allocate the memory that could be used to manipulate strings.
If the array was made too small and we tried to copy a string that is bigger than the array
to it, the string would be copied over the end of the array. The memory beyond the end
of the array could contain other important data used in the sketch, which would then be
overwritten by our string. If the memory beyond the end of the string is overrun, it could
crash the sketch or cause unexpected behavior.
58
Arduino – String Object Arduino
The second type of string used in Arduino programming is the String Object.
What is an Object?
An object is a construct that contains both data and functions. A String object can be
created just like a variable and assigned a value or string. The String object contains
functions (which are called "methods" in object oriented programming (OOP)) which
operate on the string data contained in the String object.
The following sketch and explanation will make it clear what an object is and how the
String object is used.
Example
void setup()
{ String my_str = "This is my string.";
[Link](9600);
// (1) print the string
[Link](my_str);
// (2) change the string to upper-case
my_str.toUpperCase();
[Link](my_str);
// (3) overwrite the string
my_str = "My new string.";
[Link](my_str);
// (4) replace a word in the string
my_str.replace("string", "Arduino sketch");
[Link](my_str);
// (5) get the length of the string
[Link]("String length is: ");
[Link](my_str.length());
}
void loop()
{ }
59
Arduino
Result
This is my string.
THIS IS MY STRING.
My new string.
My new Arduino sketch.
String length is: 22
A string object is created and assigned a value (or string) at the top of the sketch.
This creates a String object with the name my_str and gives it a value of "This is my
string.".
This can be compared to creating a variable and assigning a value to it such as an integer:
my_str.toUpperCase();
The toUpperCase() function operates on the string contained in the my_str object which
is of type String and converts the string data (or text) that the object contains to upper-
case characters. A list of the functions that the String class contains can be found in the
Arduino String reference. Technically, String is called a class and is used to create String
objects.
The assignment operator cannot be used on character array strings, but works on String
objects only.
60
Arduino
The main disadvantage of using the String object is that it uses a lot of memory and can
quickly use up the Arduinos RAM memory, which may cause Arduino to hang, crash or
behave unexpectedly. If a sketch on an Arduino is small and limits the use of objects, then
there should be no problems.
Character array strings are more difficult to use and you may need to write your own
functions to operate on these types of strings. The advantage is that you have control on
the size of the string arrays that you make, so you can keep the arrays small to save
memory.
You need to make sure that you do not write beyond the end of the array bounds with
string arrays. The String object does not have this problem and will take care of the string
bounds for you, provided there is enough memory for it to operate on. The String object
can try to write to memory that does not exist when it runs out of memory, but will never
write over the end of the string that it is operating on.
The practical uses of strings will be covered in the next part of this course when we study
how to get user input from the Serial Monitor window and save the input in a string.
61
Arduino – Time Arduino
delay () function
delayMicroseconds () function
millis () function
micros () function
delay() function
The way the delay() function works is pretty simple. It accepts a single integer (or
number) argument. This number represents the time (measured in milliseconds). The
program should wait until moving on to the next line of code when it encounters this
function. However, the problem is, the delay() function is not a good way to make your
program wait, because it is known as a “blocking” function.
Example
/* Flashing LED
* ------------
* Turns on and off a light emitting diode(LED) connected to a digital
* pin, in intervals of 2 seconds. *
*/
int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
62
Arduino
delayMicroseconds() function
The delayMicroseconds() function accepts a single integer (or number) argument. This
number represents the time and is measured in microseconds. There are a thousand
microseconds in a millisecond, and a million microseconds in a second.
Currently, the largest value that can produce an accurate delay is 16383. This may change
in future Arduino releases. For delays longer than a few thousand microseconds, you
should use the delay() function instead.
Example
/* Flashing LED
* ------------
* Turns on and off a light emitting diode(LED) connected to a digital
* pin, in intervals of 1 seconds. *
*/
int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}
void loop() {
digitalWrite(ledPin, HIGH); // sets the LED on
delayMicroseconds(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delayMicroseconds(1000); // waits for a second
}
millis() function
This function is used to return the number of milliseconds at the time, the Arduino board
begins running the current program. This number overflows i.e. goes back to zero after
approximately 50 days.
63
Arduino
Example
void setup(){
[Link](9600);
}
void loop()
{
[Link]("Time:");
time = millis();
//prints time since program started
[Link](time);
// wait a second so as not to send massive amounts of data
delay(1000);
}
micros() function
The micros() function returns the number of microseconds from the time, the Arduino
board begins running the current program. This number overflows i.e. goes back to zero
after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano),
this function has a resolution of four microseconds (i.e. the value returned is always a
multiple of four). On 8 MHz Arduino boards (e.g. the LilyPad), this function has a resolution
of eight microseconds.
This function returns number of microseconds since the program started (unsigned long)
Example
void setup(){
[Link](9600);
}
void loop(){
[Link]("Time:");
time = micros();
//prints time since program started
64
Arduino
[Link](time);
// wait a second so as not to send massive amounts of data
delay(1000);
}
65