kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Added C++ examples for IOExpander
rodzic
ef256e1173
commit
2f3c6fc878
|
@ -1,5 +1,6 @@
|
|||
add_subdirectory(breakout_dotmatrix)
|
||||
add_subdirectory(breakout_encoder)
|
||||
add_subdirectory(breakout_ioexpander)
|
||||
add_subdirectory(breakout_ltr559)
|
||||
add_subdirectory(breakout_colourlcd160x80)
|
||||
add_subdirectory(breakout_roundlcd)
|
||||
|
|
|
@ -1,12 +1,3 @@
|
|||
set(OUTPUT_NAME ioexpander_demo)
|
||||
|
||||
add_executable(
|
||||
${OUTPUT_NAME}
|
||||
demo.cpp
|
||||
)
|
||||
|
||||
# Pull in pico libraries that we need
|
||||
target_link_libraries(${OUTPUT_NAME} pico_stdlib breakout_ioexpander)
|
||||
|
||||
# create map/bin/hex file etc.
|
||||
pico_add_extra_outputs(${OUTPUT_NAME})
|
||||
add_subdirectory(adc)
|
||||
add_subdirectory(button)
|
||||
add_subdirectory(servo)
|
|
@ -0,0 +1,16 @@
|
|||
set(OUTPUT_NAME ioexpander_adc)
|
||||
|
||||
add_executable(
|
||||
${OUTPUT_NAME}
|
||||
adc.cpp
|
||||
)
|
||||
|
||||
# enable usb output, disable uart output
|
||||
pico_enable_stdio_usb(${OUTPUT_NAME} 1)
|
||||
pico_enable_stdio_uart(${OUTPUT_NAME} 0)
|
||||
|
||||
# Pull in pico libraries that we need
|
||||
target_link_libraries(${OUTPUT_NAME} pico_stdlib breakout_ioexpander)
|
||||
|
||||
# create map/bin/hex file etc.
|
||||
pico_add_extra_outputs(${OUTPUT_NAME})
|
|
@ -0,0 +1,42 @@
|
|||
#include "pico/stdlib.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "breakout_ioexpander.hpp"
|
||||
|
||||
using namespace pimoroni;
|
||||
|
||||
static const uint8_t IOE_ADC_PIN = 10;
|
||||
|
||||
BreakoutIOExpander ioe(0x18);
|
||||
bool toggle = false;
|
||||
|
||||
int main() {
|
||||
gpio_init(PICO_DEFAULT_LED_PIN);
|
||||
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
|
||||
|
||||
stdio_init_all();
|
||||
|
||||
if(ioe.init()) {
|
||||
printf("IOExpander found...\n");
|
||||
|
||||
// ioe.set_adc_vref(5.0f); //Uncomment this if running the IOExpander off a 5V supply
|
||||
ioe.set_mode(IOE_ADC_PIN, IOExpander::PIN_ADC);
|
||||
|
||||
while(true) {
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, toggle);
|
||||
toggle = !toggle;
|
||||
|
||||
float voltage = ioe.input_as_voltage(IOE_ADC_PIN);
|
||||
|
||||
printf("Voltage: %f\n", voltage);
|
||||
|
||||
sleep_ms(20);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("IOExpander not found :'(\n");
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
set(OUTPUT_NAME ioexpander_button)
|
||||
|
||||
add_executable(
|
||||
${OUTPUT_NAME}
|
||||
button.cpp
|
||||
)
|
||||
|
||||
# enable usb output, disable uart output
|
||||
pico_enable_stdio_usb(${OUTPUT_NAME} 1)
|
||||
pico_enable_stdio_uart(${OUTPUT_NAME} 0)
|
||||
|
||||
# Pull in pico libraries that we need
|
||||
target_link_libraries(${OUTPUT_NAME} pico_stdlib breakout_ioexpander)
|
||||
|
||||
# create map/bin/hex file etc.
|
||||
pico_add_extra_outputs(${OUTPUT_NAME})
|
|
@ -0,0 +1,49 @@
|
|||
#include "pico/stdlib.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "breakout_ioexpander.hpp"
|
||||
|
||||
using namespace pimoroni;
|
||||
|
||||
//Connect a button between this pin and ground
|
||||
static const uint8_t IOE_BUTTON_PIN = 14;
|
||||
|
||||
BreakoutIOExpander ioe(0x18);
|
||||
bool last_state = true;
|
||||
|
||||
int main() {
|
||||
gpio_init(PICO_DEFAULT_LED_PIN);
|
||||
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
|
||||
|
||||
stdio_init_all();
|
||||
|
||||
if(ioe.init()) {
|
||||
printf("IOExpander found...\n");
|
||||
|
||||
ioe.set_mode(IOE_BUTTON_PIN, IOExpander::PIN_IN_PULL_UP);
|
||||
|
||||
while(true) {
|
||||
bool state = ioe.input(IOE_BUTTON_PIN);
|
||||
if(state != last_state) {
|
||||
if(state) {
|
||||
printf("Button has been released\n");
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, false);
|
||||
}
|
||||
else {
|
||||
printf("Button has been pressed\n");
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, true);
|
||||
}
|
||||
|
||||
last_state = state;
|
||||
}
|
||||
|
||||
sleep_ms(20);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("IOExpander not found :'(\n");
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
#include "pico/stdlib.h"
|
||||
|
||||
#include "breakout_ioexpander.hpp"
|
||||
|
||||
using namespace pimoroni;
|
||||
|
||||
BreakoutIOExpander ioe;
|
||||
|
||||
int main() {
|
||||
gpio_init(PICO_DEFAULT_LED_PIN);
|
||||
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
|
||||
|
||||
ioe.init();
|
||||
|
||||
while(true) {
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, true);
|
||||
sleep_ms(1000);
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, false);
|
||||
sleep_ms(1000);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
set(OUTPUT_NAME ioexpander_servo)
|
||||
|
||||
add_executable(
|
||||
${OUTPUT_NAME}
|
||||
servo.cpp
|
||||
)
|
||||
|
||||
# enable usb output, disable uart output
|
||||
pico_enable_stdio_usb(${OUTPUT_NAME} 1)
|
||||
pico_enable_stdio_uart(${OUTPUT_NAME} 0)
|
||||
|
||||
# Pull in pico libraries that we need
|
||||
target_link_libraries(${OUTPUT_NAME} pico_stdlib breakout_ioexpander)
|
||||
|
||||
# create map/bin/hex file etc.
|
||||
pico_add_extra_outputs(${OUTPUT_NAME})
|
|
@ -0,0 +1,60 @@
|
|||
#include "pico/stdlib.h"
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "breakout_ioexpander.hpp"
|
||||
|
||||
using namespace pimoroni;
|
||||
|
||||
static const uint8_t IOE_SERVO_PIN = 1;
|
||||
|
||||
// Settings to produce a 50Hz output from the 24MHz clock.
|
||||
// 24,000,000 Hz / 8 = 3,000,000 Hz
|
||||
// 3,000,000 Hz / 60,000 Period = 50 Hz
|
||||
static const uint8_t DIVIDER = 8;
|
||||
static const uint16_t PERIOD = 60000;
|
||||
static constexpr float CYCLE_TIME = 5.0f;
|
||||
static constexpr float SERVO_RANGE = 1000.0f; // Between 1000 and 2000us (1-2ms)
|
||||
|
||||
BreakoutIOExpander ioe(0x18);
|
||||
bool toggle = false;
|
||||
|
||||
int main() {
|
||||
gpio_init(PICO_DEFAULT_LED_PIN);
|
||||
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
|
||||
|
||||
stdio_init_all();
|
||||
|
||||
if(ioe.init()) {
|
||||
printf("IOExpander found...\n");
|
||||
|
||||
ioe.set_pwm_period(PERIOD);
|
||||
ioe.set_pwm_control(DIVIDER);
|
||||
|
||||
ioe.set_mode(IOE_SERVO_PIN, IOExpander::PIN_PWM);
|
||||
|
||||
while(true) {
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, toggle);
|
||||
toggle = !toggle;
|
||||
|
||||
absolute_time_t at = get_absolute_time();
|
||||
float t = to_us_since_boot(at) / 1000000.0f;
|
||||
float s = sinf((t * M_PI * 2.0f) / CYCLE_TIME) / 2.0f;
|
||||
float servo_us = 1500.0f + (s * SERVO_RANGE);
|
||||
|
||||
float duty_per_microsecond = (float)PERIOD / (float)(20 * 1000); // Default is 3 LSB per microsecond
|
||||
|
||||
uint16_t duty_cycle = (uint16_t)(roundf(servo_us * duty_per_microsecond));
|
||||
printf("Cycle Time: %.2f, Pulse: %.1fus, Duty Cycle: %d\n", fmodf(t, CYCLE_TIME), servo_us, duty_cycle);
|
||||
ioe.output(IOE_SERVO_PIN, duty_cycle);
|
||||
|
||||
sleep_ms(20);
|
||||
}
|
||||
}
|
||||
else {
|
||||
printf("IOExpander not found :'(\n");
|
||||
gpio_put(PICO_DEFAULT_LED_PIN, true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Ładowanie…
Reference in New Issue