暖かくなってきたので作業を再開。
DRV8835搭載デュアルモータードライバシールド(Pololu製)のPIN10の足を切って6につなぐ。
MEGAのUSBホストシールドを挿して、その上にモータードライバシールドを挿す。
DRV8835MotorShield.cppファイルの
DRV8835MotorShield::DRV8835MotorShield() :
_M1DIR(7), _M1PWM(9), _M2DIR(8), _M2PWM(10)
と
DRV8835MotorShield.hの
static const uint8_t _M2PWM_TIMER1_PIN = 10;
の10のところを6に書き換える。
シールドを変えてモーターを動かしたけれどunoでは動かなかった。
megaでは動くがUNOでは動かない。
タイマーピンの関係でできないのか定かではない。
BT5では通信できない。
プログラムは下記の通り
モータードライバのピンを変えたので#include <DRV8835MotorShield.h>を書き換える。
動いたプログラムは下記。
#include "DRV8835MotorShield1.h"
#include <PS3BT.h>
#include <usbhub.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
USB Usb;
BTD Btd(&Usb);
PS3BT PS3(&Btd);
int RIGHT_X,RIGHT_Y,LEFT_X,LEFT_Y;
int RIGHT_SPEED,LEFT_SPEED;
DRV8835MotorShield motors;
void setup()
{
Serial.begin(115200);
if (Usb.Init() == -1) {
Serial.print(F("OSC did not start"));
while (1); //halt
}
Serial.print(F("PS3 Bluetooth Library Started"));
}
void loop()
{
Usb.Task();
if (PS3.PS3Connected) {
LEFT_Y= PS3.getAnalogHat(LeftHatY);
RIGHT_Y=PS3.getAnalogHat(RightHatY);
LEFT_SPEED=map(LEFT_Y,0,255,-400,400);
RIGHT_SPEED=map(RIGHT_Y,0,255,-400,400);
if (abs(LEFT_SPEED)<50){
LEFT_SPEED=0;
}
if (abs(RIGHT_SPEED)<50){
RIGHT_SPEED=0;
}
motors.setM1Speed(LEFT_SPEED);
motors.setM2Speed(RIGHT_SPEED);
Serial.print(F(" RIGHT_SPEED: "));
Serial.print(RIGHT_SPEED);
Serial.print(F(" LEFT_SPEED: "));
Serial.println(LEFT_SPEED);
}
}
ジョイスティックの左右の 前後方向だけを使用
中立付近は 動かないようにした。
数値を合わせるためmap関数を使用。
ただ、ESP32ならホストシールドはいらないし小さく動作も3.3Vなので乾電池2個でいけてスッキリするかも。
問題はモータードライバなのです。