132 lines
3.2 KiB
C++
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();
|
|
};
|
|
|
|
} |