Every microcontroller has many pins that can be used to connect external electronic elements. In the examples shown in previous chapters, LED was used. Such LED can be connected to a chosen General Purpose Input Output (GPIO) pin and can be controlled by setting a HIGH or LOW state. Below are some details of the functions that allow the manipulation of GPIOs using the Arduino framework. In the next chapter, analogue signals will be considered.
Microcontrollers' digital inputs and outputs allow for connecting different sensors and actuators to the board. Digital signals can take two values – HIGH(1) or LOW(0). These states correspond to high voltage (usually corresponding to the power supply voltage of the microcontroller) and low voltage (around 0V). These inputs and outputs are used in applications when the signal can have only two states.
pinMode()
The function pinMode() is essential to indicate whether the specified GPIO pin will behave like an input or an output and may also control special features. This function does not return any value. Usually, the mode of a pin is set in the setup() function of a program – only once, during program initialisation.
The syntax of a function is the following:
pinMode(pin, mode);
The parameter pin is the number of the pin.
The parameter mode can have three different values – INPUT, OUTPUT, INPUT_PULLUP, depending on whether the pin will be used as an input or an output. The INPUT_PULLUP mode turns on the internal pull-up resistor between the power supply and the pin itself. It ensures that if the pin remains unconnected, the logic state will be stable and equal to HIGH. More about pull-up resistors can be found on the Arduino homepage [1].
digitalWrite()
The function digitalWrite() writes a HIGH or LOW value to the pin. This function is used for digital pins, such as turning on/off LEDs. This function also does not return any value.
The syntax of a function is the following:
digitalWrite(pin, value);
The parameter pin is the number of the pin. The parameter value can take values HIGH or LOW. If the mode of the pin is set to the OUTPUT, the HIGH sets voltage to power supply voltage and LOW to 0 V.
Using this function for pins set to have the INPUT mode is also possible. In this case, HIGH or LOW values enable or disable the internal pull-up resistor.
digitalRead()
The function digitalRead() works in the opposite direction than the function digitalWrite(). It reads the pin's value that can be either HIGH or LOW and returns it.
The syntax of a function is the following:
digitalRead(pin);
The parameter pin is the number of the pin.
On the opposite of the functions viewed before, this one has the return type, and it can take a value of HIGH or LOW.
In the code below, the button connected to pin 3 controls the LED connected to pin 4.
#define BUTTON_pin 3 #define LED_pin 4 void setup() { pinMode(LED_pin, OUTPUT); pinMode(BUTTON_pin, INPUT_PULLUP); } bool state; void loop() { state = digitalRead(BUTTON_pin); //reading digital state of the input digitalWrite(LED_pin, state); //writing state back to the output }