2016-11-01 18 views
0

私は4DCモーターで動作するロボットをビルドしています。ブルートゥースを取り付けても問題はありません。ブルートゥースなしでこれらのモーターのテストコードを実行すると、モーターは完全な強さで動作しますが、問題はありません。ここだけのモーター用のテストコードは次のとおりです。Arduino + AdaFruitモーターシールド2.3 +ブルートゥース電源の問題?

#include <Wire.h> 
#include <Adafruit_MotorShield.h> 
#include "utility/Adafruit_PWMServoDriver.h" 

// Create the motor shield object with the default I2C address 
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

// Select which 'port' M1, M2, M3 or M4. 
Adafruit_DCMotor *M1 = AFMS.getMotor(1); 
Adafruit_DCMotor *M2 = AFMS.getMotor(2); 
Adafruit_DCMotor *M3 = AFMS.getMotor(3); 
Adafruit_DCMotor *M4 = AFMS.getMotor(4); 

void setup() { 

    AFMS.begin(); // create with the default frequency 1.6KHz 
    //AFMS.begin(1000); // OR with a different frequency, say 1KHz 
    // turn on motor 

    M1->setSpeed(255); 
    M2->setSpeed(255); 
    M3->setSpeed(255); 
    M4->setSpeed(255); 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 

    Serial.begin(9600);   // set up Serial library at 9600 bps 
} 

void loop() 
{ 
M1->run(FORWARD); 
M2->run(FORWARD); 
M3->run(FORWARD); 
M4->run(FORWARD); 
delay (5000); 

M1->run(BACKWARD); 
M2->run(BACKWARD); 
M3->run(BACKWARD); 
M4->run(BACKWARD); 
delay (5000); 
} 

私はブルートゥースを添付し、モータ以下のコードを実行かろうじてロボットを動かすことができるような低トルクで動作しているとき。ここで

#include <Wire.h> 
#include <Adafruit_MotorShield.h> 
#include "utility/Adafruit_PWMServoDriver.h" 

// Create the motor shield object with the default I2C address 
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

// Select which 'port' M1, M2, M3 or M4. 
Adafruit_DCMotor *M1 = AFMS.getMotor(1); 
Adafruit_DCMotor *M2 = AFMS.getMotor(2); 
Adafruit_DCMotor *M3 = AFMS.getMotor(3); 
Adafruit_DCMotor *M4 = AFMS.getMotor(4); 

const int BTState = 11; 
int state; 

void setup() { 

    AFMS.begin(); // create with the default frequency 1.6KHz 
    //AFMS.begin(1000); // OR with a different frequency, say 1KHz 
    // turn on motor 

    M1->setSpeed(255); 
    M2->setSpeed(255); 
    M3->setSpeed(255); 
    M4->setSpeed(255); 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 

    pinMode(BTState, INPUT); 
    Serial.begin(9600);   // set up Serial library at 9600 bps 
} 

void loop() 
{ 
    //Stop car when connection lost or bluetooth disconnected 
    if (digitalRead(BTState) == LOW) { 
    state = 'S'; 
    } 

    //Save income data to variable 'state' 
    if (Serial.available() > 0) { 
    state = Serial.read(); 
    } 

    //If state is equal with letter 'F', car will go forward! 
    if (state == 'F') { 

    M1->run(FORWARD); 
    M2->run(FORWARD); 
    M3->run(FORWARD); 
    M4->run(FORWARD); 
    } 


    //If state is equal with letter 'B', car will go backward 
    else if (state == 'B') { 

    M1->run(BACKWARD); 
    M2->run(BACKWARD); 
    M3->run(BACKWARD); 
    M4->run(BACKWARD); 
    } 

    //If state is equal with letter 'S', stop the car 
    else if (state == 'S') { 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 
    } 
} 

私のセットの写真がアップされている:

enter image description here

enter image description here

ブルートゥースに来るとき、私はすべてを正しく接続しているが、私はフォワード開始したり、なぜときに私は理解していません私の電話やコンピュータからブルートゥース経由でコマンドをバックワード私はDCモータのフルスピードを得ていません。私は彼らに十分な力を得ていないようです。

何が間違っているのですか?

+0

この質問はこちらより[arduino.se]に適しています。 –

+0

こんにちはケン、はい私はあなたのポイントを参照してくださいが、私はあまりにも運がこの質問を投稿している。 私はコードで問題を抱えていると思われます。なぜなら、誰かがここで誰かが問題を指摘してくれることを期待していたのです。 – Slavisha

答えて

0

私は問題が何であるか把握します。 それは、このコードの一部である:

//If state is equal with letter 'S', stop the car 
    else if (state == 'S') { 
    M1->run(RELEASE); 
    M2->run(RELEASE); 
    M3->run(RELEASE); 
    M4->run(RELEASE); 
    } 

ので、私は持っているアプリがデータをBluetooth経由ですべての50msのストリーミングされます。その間、Bluetoothは上記のコードを実行しています。だから私が追加する必要があるのは、ブルートゥースの状態が "S"の場合、上記のコードを実行するよりも1秒以上と言われるということです。 「S」状態は、アプリ上のボタンが押されていないことを意味し、ロボットを停止させることを意味する。 Sステートが1より大きい場合、else ifステートメントを実行するよりも、そのコード行を書くのを助けてくれますか?

おかげで、 スラブ

関連する問題