1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_digital_io_rp2040: 2*61c4878aSAndroid Build Coastguard Worker 3*61c4878aSAndroid Build Coastguard Worker-------------------- 4*61c4878aSAndroid Build Coastguard Workerpw_digital_io_rp2040 5*61c4878aSAndroid Build Coastguard Worker-------------------- 6*61c4878aSAndroid Build Coastguard Worker``pw_digital_io_rp2040`` implements the :ref:`module-pw_digital_io` interface using 7*61c4878aSAndroid Build Coastguard Workerthe `Raspberry Pi Pico SDK <https://github.com/raspberrypi/pico-sdk/>`_. 8*61c4878aSAndroid Build Coastguard Worker 9*61c4878aSAndroid Build Coastguard WorkerSetup 10*61c4878aSAndroid Build Coastguard Worker===== 11*61c4878aSAndroid Build Coastguard WorkerUse of this module requires setting up the Pico SDK for use with Pigweed. Follow 12*61c4878aSAndroid Build Coastguard Workerthe steps in :ref:`target-rp2040` to get setup. 13*61c4878aSAndroid Build Coastguard Worker 14*61c4878aSAndroid Build Coastguard WorkerExamples 15*61c4878aSAndroid Build Coastguard Worker======== 16*61c4878aSAndroid Build Coastguard WorkerUse ``pw::digital_io::Rp2040DigitalIn`` and 17*61c4878aSAndroid Build Coastguard Worker``pw::digital_io::Rp2040DigitalInOut`` classes to control GPIO pins. 18*61c4878aSAndroid Build Coastguard Worker 19*61c4878aSAndroid Build Coastguard WorkerExample code to use GPIO pins: 20*61c4878aSAndroid Build Coastguard Worker 21*61c4878aSAndroid Build Coastguard Worker.. code-block:: cpp 22*61c4878aSAndroid Build Coastguard Worker 23*61c4878aSAndroid Build Coastguard Worker #include "pw_digital_io/polarity.h" 24*61c4878aSAndroid Build Coastguard Worker #include "pw_digital_io_rp2040/digital_io.h" 25*61c4878aSAndroid Build Coastguard Worker 26*61c4878aSAndroid Build Coastguard Worker using pw::digital_io::Polarity; 27*61c4878aSAndroid Build Coastguard Worker using pw::digital_io::Rp2040Config; 28*61c4878aSAndroid Build Coastguard Worker using pw::digital_io::Rp2040DigitalIn; 29*61c4878aSAndroid Build Coastguard Worker using pw::digital_io::Rp2040DigitalInOut; 30*61c4878aSAndroid Build Coastguard Worker using pw::digital_io::State; 31*61c4878aSAndroid Build Coastguard Worker 32*61c4878aSAndroid Build Coastguard Worker constexpr Rp2040Config output_pin_config{ 33*61c4878aSAndroid Build Coastguard Worker .pin = 15, 34*61c4878aSAndroid Build Coastguard Worker .polarity = Polarity::kActiveLow, 35*61c4878aSAndroid Build Coastguard Worker }; 36*61c4878aSAndroid Build Coastguard Worker constexpr Rp2040Config input_pin_config{ 37*61c4878aSAndroid Build Coastguard Worker .pin = 16, 38*61c4878aSAndroid Build Coastguard Worker .polarity = Polarity::kActiveHigh, 39*61c4878aSAndroid Build Coastguard Worker }; 40*61c4878aSAndroid Build Coastguard Worker constexpr Rp2040Config button_connected_to_ground_config{ 41*61c4878aSAndroid Build Coastguard Worker .pin = 12, 42*61c4878aSAndroid Build Coastguard Worker .polarity = Polarity::kActiveLow, 43*61c4878aSAndroid Build Coastguard Worker .enable_pull_up = true, 44*61c4878aSAndroid Build Coastguard Worker }; 45*61c4878aSAndroid Build Coastguard Worker 46*61c4878aSAndroid Build Coastguard Worker // Config output pin: 47*61c4878aSAndroid Build Coastguard Worker Rp2040DigitalInOut out(output_pin_config); 48*61c4878aSAndroid Build Coastguard Worker out.Enable(); 49*61c4878aSAndroid Build Coastguard Worker 50*61c4878aSAndroid Build Coastguard Worker // Set the output pin active. 51*61c4878aSAndroid Build Coastguard Worker // This pulls pin to ground since the polarity is kActiveLow. 52*61c4878aSAndroid Build Coastguard Worker out.SetState(State::kActive); 53*61c4878aSAndroid Build Coastguard Worker 54*61c4878aSAndroid Build Coastguard Worker // Config input pins: 55*61c4878aSAndroid Build Coastguard Worker Rp2040DigitalIn in(input_pin_config); 56*61c4878aSAndroid Build Coastguard Worker in.Enable(); 57*61c4878aSAndroid Build Coastguard Worker 58*61c4878aSAndroid Build Coastguard Worker Rp2040DigitalIn button(button_connected_to_ground_config); 59*61c4878aSAndroid Build Coastguard Worker button.Enable(); 60*61c4878aSAndroid Build Coastguard Worker 61*61c4878aSAndroid Build Coastguard Worker // Get the pin state. Since the polarity is kActiveHigh this will return 62*61c4878aSAndroid Build Coastguard Worker // State::kActive if the pin is high or and State::kInactive if the pin is 63*61c4878aSAndroid Build Coastguard Worker // low (grounded). 64*61c4878aSAndroid Build Coastguard Worker State pin_state = in.GetState(); 65*61c4878aSAndroid Build Coastguard Worker 66*61c4878aSAndroid Build Coastguard Worker auto button_result = button.GetState(); 67*61c4878aSAndroid Build Coastguard Worker if (button_result.ok()) { 68*61c4878aSAndroid Build Coastguard Worker if (button_result.value() == State::kActive) { 69*61c4878aSAndroid Build Coastguard Worker PW_LOG_INFO("Button is pressed."); 70*61c4878aSAndroid Build Coastguard Worker } 71*61c4878aSAndroid Build Coastguard Worker if (button_result.value() == State::kInactive) { 72*61c4878aSAndroid Build Coastguard Worker PW_LOG_INFO("Button is released."); 73*61c4878aSAndroid Build Coastguard Worker } 74*61c4878aSAndroid Build Coastguard Worker } 75