pimoroni-pico/libraries/inventor2040w/inventor.hpp

132 lines
3.2 KiB
C++

#pragma once
#include "pico/stdlib.h"
#include "motor.hpp"
#include "encoder.hpp"
#include "servo.hpp"
#include "ws2812.hpp"
#include "pimoroni_i2c.hpp"
using namespace motor;
using namespace encoder;
using namespace servo;
using namespace plasma;
using namespace pimoroni;
namespace inventor {
// IO Pin Constants
const uint GP0 = 0;
const uint GP1 = 1;
const uint GP2 = 2;
const uint A0 = 26;
const uint A1 = 27;
const uint A2 = 28;
const uint GPIOS[] = {GP0, GP1, GP2, A0, A1, A2};
const uint ADCS[] = {A0, A1, A2};
// Index Constants
const uint MOTOR_A = 0;
const uint MOTOR_B = 1;
const uint SERVO_1 = 0;
const uint SERVO_2 = 1;
const uint SERVO_3 = 2;
const uint SERVO_4 = 3;
const uint SERVO_5 = 4;
const uint SERVO_6 = 5;
const uint LED_GP0 = 0;
const uint LED_GP1 = 1;
const uint LED_GP2 = 2;
const uint LED_A0 = 3;
const uint LED_A1 = 4;
const uint LED_A2 = 5;
const uint LED_SERVO_1 = 6;
const uint LED_SERVO_2 = 7;
const uint LED_SERVO_3 = 8;
const uint LED_SERVO_4 = 9;
const uint LED_SERVO_5 = 10;
const uint LED_SERVO_6 = 11;
// Count Constants
const uint NUM_GPIOS = 6;
const uint NUM_ADCS = 3;
const uint NUM_MOTORS = 2;
const uint NUM_SERVOS = 6;
const uint NUM_LEDS = 12;
class Inventor2040W {
//--------------------------------------------------
// Constants
//--------------------------------------------------
public:
static const uint AMP_EN_PIN = 3;
static const uint I2C_SDA_PIN = 4;
static const uint I2C_SCL_PIN = 5;
static constexpr pin_pair MOTOR_A_PINS = {6, 7};
static constexpr pin_pair MOTOR_B_PINS = {8, 9};
static constexpr pin_pair ENCODER_A_PINS = {19, 18};
static constexpr pin_pair ENCODER_B_PINS = {17, 16};
static const uint SERVO_1_PIN = 10;
static const uint SERVO_2_PIN = 11;
static const uint SERVO_3_PIN = 12;
static const uint SERVO_4_PIN = 13;
static const uint SERVO_5_PIN = 14;
static const uint SERVO_6_PIN = 15;
static const uint LED_DATA_PIN = 20;
static const uint PWM_AUDIO_PIN = 21;
static const uint USER_SW_PIN = 22;
static constexpr float AMP_CORRECTION = 4.0f;
static constexpr float DEFAULT_VOLUME = 0.2f;
static constexpr float SILENCE_FREQUENCY = 44100.0f;
static constexpr float DEFAULT_GEAR_RATIO = 50.0f;
//--------------------------------------------------
// Variables
//--------------------------------------------------
public:
Motor motors[NUM_MOTORS];
Encoder encoders[NUM_MOTORS];
Servo servos[NUM_SERVOS];
WS2812 leds;
I2C i2c;
private:
float audio_volume;
//--------------------------------------------------
// Constructors/Destructor
//--------------------------------------------------
public:
Inventor2040W(float motor_gear_ratio = DEFAULT_GEAR_RATIO);
//--------------------------------------------------
// Methods
//--------------------------------------------------
public:
bool init(bool init_motors = true, bool init_servos = true);
bool switch_pressed();
bool play_tone(float frequency);
void play_silence();
void stop_playing();
float volume() const;
void volume(float volume);
void mute_audio();
void unmute_audio();
};
}