2017-03-05 4 views
1

3つの値をArduino Unoによって接続された3つのポテンショメータで送信し、シリアル通信で別のArduino Unoに送信する必要があります。受信した値は、各ノブがサーボモーターの動きを制御できるように、3つのサーボモーターに分配する必要があります。 このプログラムの問題は、受信した値が正しく分配されていないことです(たとえば、ポテンショメータ1の値をサーボモータ3などで読み取る場合など)。私は受け取ったデータをサーボモータに同期させるのを助けることができるかどうか尋ねます。前もって感謝します。ポテンショメータとシリアルコミュニケーションから受け取ったデータを2つのarduino unoを使って配信する

スケッチアルドゥイーノ:サーボモータと

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

スケッチアルドゥイーノ:

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

答えて

0

マスタコード(NO modificated):

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


} 

スレーブコード(modificated):

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

注:あなたの質問には答えられないので、このコードをここに残すべきではありません。 –

関連する問題