nucleo側のプログラム

Dependents:   serial_connected_mcu_nucleo serial_connected_mcu_nucleo

Fork of serial_connected_mcu by tarou yamada

serial_connected_mcu.cpp

Committer:
inst
Date:
2016-07-10
Revision:
6:a0cc9c27cedf
Parent:
4:1323ef48a984
Child:
8:b916e6f45f75

File content as of revision 6:a0cc9c27cedf:

#include "serial_connected_mcu.hpp"
#include "serial_connected_mcu_slave.hpp"
#include "mbed.h"

namespace serial_connected_mcu {
    
serial_connected_mcu* serial_connected_mcu::_instance = NULL;

const int16_t _init_write_data[SIZE_OF_WRITE_DATA] = {
    0, // ENCODER1
    0, // ENCODER2
    0, // ENCODER3
    65535 / 2, // POTENTIONMETER1
    65535 / 2, // POTENTIONMETER2
    65535 / 2  // POTENTIONMETER3
};
const PinName serial_connected_mcu::_servo_pins[SERVO_NUM] = {
    PB_6,
    PB_7,
    PB_8
};

TIM_TypeDef* serial_connected_mcu::_encoder_timers[ENCODER_NUM] = {
    TIM1,
    TIM2,
    TIM3
};

const size_t serial_connected_mcu::_encoder_pulse_per_revol = 100;

const PinName serial_connected_mcu::_analog_input_pins[ANALOG_INPUT_NUM] = {
    A3,
    A4,
    A5
};

serial_connected_mcu* serial_connected_mcu::instance() {
    if (_instance == NULL) {
        _instance = new serial_connected_mcu;
    }
    return _instance;
}

serial_connected_mcu::serial_connected_mcu() {
    for (size_t i = 0; i < serial_connected_mcu::serial_connected_mcu_slave::SIZE_OF_WRITE_DATA; ++i) {
        _slave.set(i, 0);
    }
    
    for (size_t i = 0; i < SERVO_NUM; ++i) {
        _servos[i] = new servo(_servo_pins[i]);
    }
    for (size_t i = 0; i < ENCODER_NUM; ++i) {
        _encoders[i] = new rotary_encoder_ab_phase(_encoder_timers[i], _encoder_pulse_per_revol);
    }
    for (size_t i = 0; i < SERVO_NUM; ++i) {
        _analog_inputs[i] = new AnalogIn(_analog_input_pins[i]);
    }
}

serial_connected_mcu::~serial_connected_mcu() {
    for (size_t i = 0; i < SERVO_NUM; ++i) {
        delete _servos[i];
    }
    for (size_t i = 0; i < ENCODER_NUM; ++i) {
        delete _encoders[i];
    }
    for (size_t i = 0; i < SERVO_NUM; ++i) {
        delete _analog_inputs[i];
    }
}

void serial_connected_mcu::update() {
    _slave.set(serial_connected_mcu::ENCODER1, _encoders[0]);
    _slave.set(serial_connected_mcu::ENCODER1, _encoders[0]);
    _slave.set(serial_connected_mcu::ENCODER1, _encoders[0]);
    _slave.set(serial_connected_mcu::POTENTIONMETER1, _analog_inputs[0]);
    _slave.set(serial_connected_mcu::POTENTIONMETER2, _analog_inputs[1]);
    _slave.set(serial_connected_mcu::POTENTIONMETER3, _analog_inputs[2]);
    
    _servos[0] = _slave.get(serial_connected_mcu::ESC1);
    _servos[1] = _slave.get(serial_connected_mcu::ESC2);
    _servos[2] = _slave.get(serial_connected_mcu::ESC3);
}

} /* namespace serial_connected_mcu */