2017-03-05 4 views
1

Ich muss senden 3 Werte von 3 Potentiometer, verbunden durch einen Arduino Uno, und senden sie an einen anderen Arduino Uno mit einer seriellen Kommunikation. Die empfangenen Werte müssen in 3 Servomotoren verteilt werden, so dass jeder Knopf die Servomotorbewegung steuern kann. Das Problem mit diesem Programm ist, dass die empfangenen Werte nicht korrekt verteilt sind (zum Beispiel der Fall, dass der Wert des Potentiometers 1 vom Servomotor 3 oder anderen Fällen gelesen werden soll). Ich frage, ob ich helfen könnte, empfangene Daten mit der Verteilung von ihnen zu den Servomotoren zu synchronisieren. Danke im Voraus.verteilen Daten empfangen von einer seriellen Kommunikation mit 2 Arduino uno

Skizze arduino mit Potentiometern:

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

Skizze arduino mit Servomotoren:

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

Antwort

0

Mastercode (kein Modifizierte):

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


} 

Slave-Code (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

Hinweis: Sie sollten diesen Code hier nicht belassen, da er Ihre Frage nicht beantwortet .. –