2016-11-01 5 views
0

Я строю робот, который работает с двигателями 4DC, и у меня небольшие проблемы при подключении к нему Bluetooth. Когда я запускаю тестовый код для этих двигателей без bluetooth, двигатели работают с полной силой, никаких проблем. Вот код теста только для двигателей:Arduino + AdaFruit Engine Shield 2.3 + проблема с мощностью Bluetooth?

#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); 
} 

Когда я прикрепить Bluetooth и запустить этот код двигателей работает с таким низким крутящим моментом, который едва может двигаться роботом.

#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

Я подсоединил все правильно, когда приходит к BlueTooth канала, но я не понимаю, почему, когда я инициирую вперед или Обратная команда с моего телефона или компьютера через Bluetooth я не получаю полную скорость двигателей постоянного тока. почти кажется, что я не получаю достаточную власть для них.

Любая идея, что я делаю неправильно?

+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); 
    } 

Так что приложение я имею потоковое данные каждый 50мс над Bluetooth. Таким образом, между этими моментами Bluetooth выполняет код выше. Поэтому мне нужно добавить утверждение о том, что если состояние Bluetooth «S» больше, скажем, чем 1s, чем выполнить этот код выше. Состояние «S» означает, что никакая кнопка на приложении не нажата, и это означает остановить робота. Можете ли вы мне помочь написать эту строку кода, которая скажет, если состояние S больше 1, чем выполнить это заявление else if?

Спасибо, Slav