1

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

用电位器绘制 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();
    }
}
4

1 回答 1

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();
}
}
于 2017-03-06T21:21:06.300 回答