nucleo側のプログラム
Dependents: serial_connected_mcu_nucleo serial_connected_mcu_nucleo
Fork of serial_connected_mcu by
serial_connected_mcu.cpp
- Committer:
- inst
- Date:
- 2016-07-10
- Revision:
- 8:b916e6f45f75
- Parent:
- 6:a0cc9c27cedf
- Child:
- 9:21f623d2ee34
File content as of revision 8:b916e6f45f75:
#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 < 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); _encoders[i]->start(); } 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(ENCODER1, _encoders[0]->get_revol_num()); _slave.set(ENCODER2, _encoders[1]->get_revol_num()); _slave.set(ENCODER3, _encoders[2]->get_revol_num()); _slave.set(POTENTIONMETER1, _analog_inputs[0]->read()); _slave.set(POTENTIONMETER2, _analog_inputs[1]->read()); _slave.set(POTENTIONMETER3, _analog_inputs[2]->read()); _servos[0]->set_position(_slave.get(ESC1)); _servos[1]->set_position(_slave.get(ESC2)); _servos[2]->set_position(_slave.get(ESC3)); } } /* namespace serial_connected_mcu */