207 lines
5.1 KiB
Markdown
207 lines
5.1 KiB
Markdown
# Pico Explorer Base <!-- omit in toc -->
|
|
|
|
Pico Explorer Base straps a whole host of physical computing goodies to your Pico - a vibrant 1.14" (240x240) IPS LCD screen, four switches, a piezo buzzer/speaker and a DRV8833 motor driver, as well as handy accessible general purpose inputs and outputs and a built in breadboard.
|
|
|
|
We've included helper functions to handle every aspect of drawing to the screen and interfacing with the buttons, piezo and motor driver. [See the library reference](#reference) for details.
|
|
|
|
- [Example Program](#example-program)
|
|
- [Reference](#reference)
|
|
- [PicoGraphics](#picographics)
|
|
- [Constants](#constants)
|
|
- [Buttons](#buttons)
|
|
- [ADC Channels](#adc-channels)
|
|
- [GPIO](#gpio)
|
|
- [Motors](#motors)
|
|
- [Functions](#functions)
|
|
- [Motors](#motors-1)
|
|
- [Analog](#analog)
|
|
- [Buzzer](#buzzer)
|
|
- [Buttons](#buttons-1)
|
|
- [ST7789](#st7789)
|
|
|
|
|
|
## Example Program
|
|
|
|
The following example shows how to set up all of Pico Explorers functions:
|
|
|
|
```c++
|
|
#include "pico_explorer.hpp"
|
|
#include "drivers/st7789/st7789.hpp"
|
|
#include "libraries/pico_graphics/pico_graphics.hpp"
|
|
#include "button.hpp"
|
|
#include "motor.hpp"
|
|
#include "analog.hpp"
|
|
|
|
using namespace pimoroni;
|
|
|
|
// Display driver
|
|
ST7789 st7789(PicoExplorer::WIDTH, PicoExplorer::HEIGHT, ROTATE_0, false, get_spi_pins(BG_SPI_FRONT));
|
|
|
|
// Graphics library - in RGB332 mode you get 256 colours and optional dithering for ~56K RAM.
|
|
PicoGraphics_PenRGB332 graphics(st7789.width, st7789.height, nullptr);
|
|
|
|
// Buttons
|
|
Button button_a(PicoExplorer::A);
|
|
Button button_b(PicoExplorer::B);
|
|
Button button_x(PicoExplorer::X);
|
|
Button button_y(PicoExplorer::Y);
|
|
|
|
// Motors
|
|
Motor motor1(PicoExplorer::MOTOR1_PINS);
|
|
Motor motor2(PicoExplorer::MOTOR2_PINS);
|
|
|
|
// Analog
|
|
Analog adc0(PicoExplorer::ADC0_PIN);
|
|
Analog adc1(PicoExplorer::ADC1_PIN);
|
|
Analog adc2(PicoExplorer::ADC2_PIN);
|
|
|
|
|
|
int main() {
|
|
motor1.init();
|
|
motor2.init();
|
|
|
|
while(true) {
|
|
// update screen
|
|
st7789.update(&graphics);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Reference
|
|
|
|
### PicoGraphics
|
|
|
|
Pico Explorer uses our Pico Graphics library to draw graphics and text. For more information [read the Pico Graphics function reference.](../pico_graphics/README.md#function-reference).
|
|
|
|
Please note that the backlight on Pico Explorer is not dimmable (we needed the pins to hook up other functions) so the `set_backlight` function is not available for this board.
|
|
|
|
### Constants
|
|
|
|
#### Buttons
|
|
|
|
The four buttons, A, B, X and Y have corresponding constants set to their respective GPIO pins.
|
|
|
|
```c++
|
|
PicoExplorer::A = 12;
|
|
PicoExplorer::B = 13;
|
|
PicoExplorer::X = 14;
|
|
PicoExplorer::Y = 15;
|
|
```
|
|
|
|
#### ADC Channels
|
|
|
|
The three ADC channels are defined as `ADC0_PIN`, `ADC1_PIN` and `ADC2_PIN`, and should be used with an instance of the `Analog` class:
|
|
|
|
```c++
|
|
PicoExplorer::ADC0_PIN = 26;
|
|
PicoExplorer::ADC1_PIN = 27;
|
|
PicoExplorer::ADC2_PIN = 28;
|
|
```
|
|
|
|
#### GPIO
|
|
|
|
The 8 general purpose IO pins on the lower Pico Explorer are GP0 through GP7, we've created constants for you to identify them easily.
|
|
|
|
```c++
|
|
PicoExplorer::GP0 = 0;
|
|
PicoExplorer::GP1 = 1;
|
|
PicoExplorer::GP2 = 2;
|
|
PicoExplorer::GP3 = 3;
|
|
PicoExplorer::GP4 = 4;
|
|
PicoExplorer::GP5 = 5;
|
|
PicoExplorer::GP6 = 6;
|
|
PicoExplorer::GP7 = 7;
|
|
```
|
|
|
|
You should use Pico SDK's `gpio_get` to read a pin, eg:
|
|
|
|
```c++
|
|
bool pin_state = gpio_get(pico_explorer.GP0);
|
|
```
|
|
|
|
#### Motors
|
|
|
|
The two motor channels are defined as pin pairs, and should be used with an instance of the `Motor` class:
|
|
|
|
```c++
|
|
PicoExplorer::MOTOR1_PINS = {9, 8};
|
|
PicoExplorer::MOTOR2_PINS = {11, 10};
|
|
```
|
|
|
|
### Functions
|
|
|
|
#### Motors
|
|
|
|
Pico Explorer uses our `Motor` library to drive motors. Motors are driven by PWM via an onboard DRV8833. Constants are provided for both motors, so setup is as easy as:
|
|
|
|
```c++
|
|
#include "motor.hpp"
|
|
|
|
using namespace motor;
|
|
|
|
Motor motor1(PicoExplorer::MOTOR1_PINS);
|
|
Motor motor2(PicoExplorer::MOTOR2_PINS);
|
|
```
|
|
|
|
You should also init your motors to set up the required GPIO/PWM on their pins:
|
|
|
|
```c++
|
|
motor1.init();
|
|
motor2.init();
|
|
```
|
|
|
|
Speed should be given as a float between `-1.0` and `1.0`, eg:
|
|
|
|
```c++
|
|
motor1.speed(1.0) // Full-speed forward
|
|
motor1.speed(-1.0) // Full-speed backward
|
|
```
|
|
|
|
And to stop the motor:
|
|
|
|
```c++
|
|
motor1.stop()
|
|
```
|
|
|
|
#### Analog
|
|
|
|
```c++
|
|
float get_adc(uint8_t channel);
|
|
```
|
|
|
|
Pico Explorer's ADC channels are connected to Pico's ADC-capable pins 26, 27 and 28 which correspond to channels 0, 1 and 2 respectively.
|
|
|
|
Constants are supplied for these in the PicoExplorer library, so you can create an Analog instance for each:
|
|
|
|
```c++
|
|
#include "analog.hpp"
|
|
Analog adc0(PicoExplorer::ADC0_PIN);
|
|
Analog adc1(PicoExplorer::ADC1_PIN);
|
|
Analog adc2(PicoExplorer::ADC2_PIN);
|
|
```
|
|
|
|
And read a voltage with:
|
|
|
|
```c++
|
|
adc0.read_voltage();
|
|
```
|
|
|
|
#### Buzzer
|
|
|
|
Note: You must bridge the pin you use over to the `AUDIO` pin on the Pico Explorer header in order to drive the onboard Piezo.
|
|
|
|
TODO document buzzer
|
|
|
|
#### Buttons
|
|
|
|
```c++
|
|
#include "button.hpp"
|
|
Button button_a(PicoExplorer::A);
|
|
Button button_b(PicoExplorer::B);
|
|
Button button_x(PicoExplorer::X);
|
|
Button button_y(PicoExplorer::Y);
|
|
```
|
|
|
|
### ST7789
|
|
|
|
Pico Explorer uses the ST7789 display driver to handle the LCD. For more information [read the ST7789 README.](../../drivers/st7789/README.md). |