Olá pessoal , comecei a lidar com arduino a mais ou menos 2 anos mas somente coisas simples , agora me deparei realmente com uma situação complicada para mim espero que possam me ajudar , eu preciso controlar 3 servos via serial e estou apanhando muito para fazer isso , o arduino comunicará com uma aplicação em C# , só que não faço ideia de como separar o comando de cada servo , será que alguém poderia me ajudar ?



o que tenho ate agora que funcionou mais ou menos mas sem nada certo foi isso

#include
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

int s1 ;
int s2 ;
int s3 ;
int s4 ;


char dado[4] ;
int aux ;
long pos ;
void setup(){
Serial.begin(9600);
pinMode(13,OUTPUT);
pinMode(10,INPUT);
servo1.attach(5);
servo2.attach(6);
servo3.attach(7);
servo4.attach(8);

}
void loop(){

digitalWrite(13,1);
if(Serial.available()){


Serial.readBytes(dado, 4);
pos = atol(dado);
}
if(pos <180 && pos>>0 ){
s1= pos ;

delay(10);
}

if(pos >185 && pos <=360&& pos!=0){
s2 =pos-180;
pos=0;
delay(10);
}
if(pos >365 && pos <=540&& pos!=0){
s3=pos-360;

delay(10);
}
if(pos >545 && pos <=720&& pos!=0){
if(pos >=540){
s4=50;
}
if(pos >=600){
s4=130;
}
delay(10);

}

servo1.write(s1);
delay(10);
servo2.write(s2);
delay(10);
servo3.write(s3);
delay(10);
servo4.write(s4);
delay(10);


delay(100);

Serial.flush();

}

Exibições: 773

Responder esta

Respostas a este tópico

Seria interessante você detalhar um pouco mais, dizer qual biblioteca está usando, e afins. Se estiver usando a biblioteca servo do arduino, é simples separá-los.

Antes do void setup(), você declara o nome dos servos que você vai utilizar Exemplo:

Servo servo_1;

Servo servo_2;

 

Já dentro do void(setup), você declara os pinos de cada servo:

servo_1.attach(5);

servo_2.attach(6);

E na hora de programar, você diz para qual servo está enviando o valor:

servo_1.write(VALOR1);

servo_2.write(VALOR2);

Eu queria por exemplo , não faço idéia de como , mas tipo receber A130 , ai ia ser o motor A para 130 graus.

Você precisa separar os servos por letras, ou podem ser números? Se for por número fica bem mais facil.

Você terá uma int de 4 números, o primeiro que indica o servo, e as outras 3 indicam a posição.


Primeiro você lerá o primeiro caractere (casa dos milhares), para isso delimita >1000<2000, depois você tira 1000, e resta o valor da posição. E assim sucessivamente. Porém, se obrigatoriamente receber uma letra, você tera que criar uma string, e depois separar número de letras (o que é um pouco mais complexo).

int numero = 0;

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

void loop();

{
if (Serial.available() > 0)
{
servo = Serial.parseInt();

if (servo >1000 && <2000)
{
int servo1=servo-1000
servo1.write(servo1);}


if (servo >2000 && <3000)
{
int servo2=servo-2000
servo1.write(servo2);}

}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço