Variables are names you can create for storing, retrieving, and using values in the Arduino microcontroller’s memory. Here are three example variable declarations from the next sketch:
int a = 42; char c = 'm'; float root2 = sqrt(2.0);
The declaration int a = 42 creates a variable named a. The int part tells the Arduino software what type of variable it’s dealing with. The int type can store integer values ranging from -32,768 to 32,767. The declaration also assigns a an initial value of 42. (The initial value is optional, you could instead just declare int a, and then later assign the value 42 to a with a = 42.)
Next, char c = 'm' declares a variable named c of the type char (which is for storing characters) and then assigns it the value 'm'.
Then, float root2 = sqrt(2.0) declares a variable named root2. The variable type is float, which can hold decimal values. Here, root2 is initialized to the floating-point representation of the square root of two: sqrt(2.0).
Now that your code has stored values to memory, how can it retrieve and use them? One way is to simply pass each variable to a function’s parameter. Here are three examples, where the Serial.println(val) function displays the value of the variable inside the parentheses.
One nice thing about variable types is that Serial.println recognizes each type and displays it correctly in the serial monitor. (Also, the C++ compiler in the Arduino software requires all declared variables to have a type, so you can’t leave it out.)
// Robotics with the BOE Shield - StoreRetrieveLocal void setup() { Serial.begin(9600); int a = 42; char c = 'm'; float root2 = sqrt(2.0); Serial.println(a); Serial.println(c); Serial.println(root2); } void loop() { // Empty, no repeating code. }
ASCII stands for American Standard Code for Information Exchange.
It’s a common code system for representing computer keys and characters in displays. For example, both the Arduino and the Serial Monitor use the ASCII code 109 for the letter m. The declaration char c = 'm' makes the Arduino store the number 109 in the c variable. Serial.println(c) makes the Arduino send the number 109 to the Serial Monitor. When the Serial Monitor receives that 109, it automatically displays the letter m. View ASCII codes 0–127 [1].
There are two ways to prove that the ASCII code for 'm' really is 109. First, instead of declaring char c = 'm', you could use byte c = 'm'. Then, the println function will print the byte variable’s decimal value instead of the character it represents. Or, you could leave the char c declaration alone and instead use Serial.println(c, DEC) to display the decimal value c stores.
So, do you think the letters l, m, n, o, and p would be represented by the ASCII codes 108, 109, 110, 110, 111, and 112?
So far, we’ve declared variables inside a function block (inside the function’s curly braces), which means they are local variables. Only the function declaring a local variable can see or modify it. Also, a local variable only exists while the function that declares it is using it. After that, it gets returned to unallocated memory so that another function (like loop) could use that memory for a different local variable.
If your sketch has to give more than one function access to a variable’s value, you can use global variables. To make a variable global, just declare it outside of any function, preferably before the setup function. Then, all functions in the sketch will be able to modify or retrieve its value. The next example sketch declares global variables and assigns values to them from within a function.
This example sketch declares a, c, and root2 as global variables (instead of local). Now that they are global, both the setup and loop functions can access them.
// Robotics with the BOE Shield - StoreRetrieveGlobal int a; char c; float root2; void setup() { Serial.begin(9600); a = 42; c = 'm'; root2 = sqrt(2.0); } void loop() { Serial.println(a); Serial.println(c); Serial.println(root2); delay(1000); }
There are lots more data types than just int, char, float, and byte.
Links
[1] https://learn.parallax.com/ASCII