暖かくなってきたので作業を再開。

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個でいけてスッキリするかも。

問題はモータードライバなのです。