バランスロボを操縦するためのBLEリモコンを作ってみました。
micro:bitバランスロボの記事はこちらです。
M5StickCバランスロボの記事はこちらです。
ハードウェアは こちらをご覧ください。
PWM周波数の変更のため、wiring_analog_nRF51.c 内の関数 void analogWrite( uint32_t ulPin, uint32_t ulValue ) の
NRF_TIMER1->PRESCALER = (NRF_TIMER1->PRESCALER & ~TIMER_PRESCALER_PRESCALER_Msk) | ((7 << TIMER_PRESCALER_PRESCALER_Pos) & TIMER_PRESCALER_PRESCALER_Msk);
を
NRF_TIMER1->PRESCALER = (NRF_TIMER1->PRESCALER & ~TIMER_PRESCALER_PRESCALER_Msk) | ((3 << TIMER_PRESCALER_PRESCALER_Pos) & TIMER_PRESCALER_PRESCALER_Msk);
に変更しました。
また、i2cのタイムアウトのために、Wire_nRF51.cpp 内の関数 uint8_t TwoWire::endTransmission(bool stopBit) の
_p_twi->TXD = txBuffer.read_char();
while(!_p_twi->EVENTS_TXDSENT && !_p_twi->EVENTS_ERROR) ;
を
_p_twi->TXD = txBuffer.read_char();
uint32_t usecTimeOut=micros();
while(!_p_twi->EVENTS_TXDSENT && !_p_twi->EVENTS_ERROR) {
if (micros()-usecTimeOut>3000) return 4;
}
に変更しました。
以下ソースコードです。