使用2 arduino uno分发从串行通信接收的数据

时间:2017-03-05 21:41:53

标签: arduino arduino-uno serial-communication servo

我必须发送由3个电位器提供的3个值,由Arduino Uno连接,然后通过串行通信将它们发送到另一个Arduino Uno。接收的值必须分布在3个伺服电机中,以便每个旋钮都能够控制伺服电机的运动。 该程序的问题是接收的值未正确分配(例如,伺服电机3或其他情况下要读取电位计1的值的情况)。我问我是否可以帮助将收到的数据与它们的分配同步到伺服电机。提前谢谢。

使用电位计绘制arduino:

#include <SoftwareSerial.h>
#define RX 2 //Pin tx
#define TX 3 //Pin rx
#define POTPIN A0
#define POTPIN2 A1
#define POTPIN3 A2

SoftwareSerial BTserial(RX, TX);

int lettura_pot;
int lettura_pot2;
int lettura_pot3;
byte val_servo;
byte val_servo2;
byte val_servo3;

void setup()
{
    Serial.println("Inizializzazione seriale...");
    Serial.begin(9600);
    BTserial.begin(9600);
}

void loop()
{
    BTserial.write(255); /* synch symbol */

    lettura_pot = analogRead(POTPIN);
    val_servo=map(lettura_pot,0,1023,0,180);
    BTserial.write(val_servo);
    Serial.println(val_servo);

    lettura_pot2 = analogRead(POTPIN2);
    val_servo2=map(lettura_pot2,0,1023,0,180);
    BTserial.write(val_servo2);
    Serial.println(val_servo2);

    lettura_pot3 = analogRead(POTPIN3);
    val_servo3=map(lettura_pot3,0,1023,0,180);
    BTserial.write(val_servo3);
    Serial.println(val_servo3);
}

使用伺服电机绘制arduino:

#include <SoftwareSerial.h>
#include<Servo.h>
SoftwareSerial BTserial(2, 3);
Servo myservo, myservo2, myservo3;

byte val_servo,val_servo2,val_servo3,a;

void setup() {
    Serial.begin(9600);
    BTserial.begin(9600);
    myservo.attach(9);
    myservo2.attach(10);
    myservo3.attach(11);
}

void loop() {

    if (BTserial.available() > 0) {
        if (BTserial.available() == 255) { /* synch */
            val_servo = BTserial.read();
            val_servo2 = BTserial.read();
            val_servo3 = BTserial.read();
        }
        Serial.print("SERVO1:");
        Serial.println(val_servo);
        Serial.print("SERVO2:");
        Serial.println(val_servo2);
        Serial.print("SERVO3:");
        Serial.println(val_servo3);

        myservo.write(val_servo);
        myservo2.write(val_servo2);
        myservo3.write(val_servo3);
        BTserial.flush();
    }
}

1 个答案:

答案 0 :(得分:0)

主代码(未修改):

#include <SoftwareSerial.h>
#define RX 2 //Pin tx
#define TX 3 //Pin rx
#define POTPIN A0
#define POTPIN2 A1
#define POTPIN3 A2

SoftwareSerial BTserial(RX, TX);

int lettura_pot;
int lettura_pot2;
int lettura_pot3;
byte val_servo;
byte val_servo2;
byte val_servo3;

void setup()
{
  Serial.println("Inizializzazione seriale...");
  Serial.begin(9600);
  BTserial.begin(9600);
}

void loop()
{
  BTserial.write(255);
  lettura_pot = analogRead(POTPIN);
  val_servo=map(lettura_pot,0,1023,0,180);
  BTserial.write(val_servo);
  Serial.println(val_servo);

  lettura_pot2 = analogRead(POTPIN2);
  val_servo2=map(lettura_pot2,0,1023,0,180);
  BTserial.write(val_servo2);
  Serial.println(val_servo2);

  lettura_pot3 = analogRead(POTPIN3);
  val_servo3=map(lettura_pot3,0,1023,0,180);
  BTserial.write(val_servo3);
  Serial.println(val_servo3);


 }

奴隶码(已修改):

#include <SoftwareSerial.h>
#include<Servo.h>
SoftwareSerial BTserial(2, 3);
Servo myservo, myservo2, myservo3;

byte val_servo,val_servo2,val_servo3,a;

 void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  BTserial.begin(9600);
  myservo.attach(9);
  myservo2.attach(10);
  myservo3.attach(11);
 }

 void loop() {
  // Read serial input:
   if (BTserial.available() > 0) {
   byte synch_symbol = BTserial.read();

    if (synch_symbol == 255) {
    while (BTserial.available() < 3) { }; /* wait for values */
    val_servo = BTserial.read();
    val_servo2 = BTserial.read();
    val_servo3 = BTserial.read();

    /* do something with values */
}

  Serial.print("SERVO1:");
  Serial.println(val_servo);
  Serial.print("SERVO2:");
  Serial.println(val_servo2);
  Serial.print("SERVO3:");
  Serial.println(val_servo3);

  myservo.write(val_servo);
  myservo2.write(val_servo2);
  myservo3.write(val_servo3);
  BTserial.flush();
}
}