USART связь, моторы - PullRequest
       4

USART связь, моторы

0 голосов
/ 01 июня 2018

У меня проблема с моим кодом Arduino.
Код должен работать следующим образом: первый Arduino Uno получает данные из мобильного приложения через Bluetooth.Затем эти данные отправляются на другой Arduino Uno, который должен управлять двумя двигателями постоянного тока (их направлением и скоростью) с помощью H-моста.

Ниже приведен код только для одного двигателя.
Прием Arduino получает данные, нодвигатели не работают, только диод включен / выключен в соответствующие моменты.Когда я добавил код для двигателей, все работает, отправка данных работает намного медленнее.
Знаете ли вы, что не так в коде, что он не работает должным образом?

Код для Arduino, который отправляет данные:

#include <SoftwareSerial.h>
SoftwareSerial BT1(4,2); // RX, TX
SoftwareSerial port2(8,7); // RX, TX 
char data;
void setup() {
   Serial.begin(9600);
   BT1.begin(9600);
   port2.begin(9600);
}

void loop() {
  BT1.listen();
  if (BT1.available() > 0){
    while (BT1.available() > 0) {
      data = BT1.read();
      port2.write(data);
    }
  }
}

Код для получения данных Arduino:

#include <SoftwareSerial.h>

SoftwareSerial port1(4,2);
char data = '0';

// Motor A
const int in1 = 10;
const int in2 = 9;
const int en1 = 11;

// Motor B
const int in3 = 6;
const int in4 = 5;
const int en2 = 3;

void setup() {
  Serial.begin(9600);

  port1.begin(9600);


  //Enabling pins responsible for motor B and and setting them as output
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(en2, OUTPUT);
}

void demo1() {
  /************** For motor B ****************/
  //Set direction
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);

  //Set speed from 0 to 255
  analogWrite(en2, 250);


  delay(5000);

  /************** For motor B ****************/
  //Change direction
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);


  delay(5000);
}

void stopMotor() {
  //Stopping the motor B
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void loop() {
  if (port1.available() > 0){
    Serial.println("Data from other Arduino:");
    data = port1.read();
    Serial.println(data);
    if (data == '1') {
      demo1();
    } else {
      stopMotor();
    }
  } 
}
...