olá pessoal, como faço pros sensores ultrassonicos acionarem diferentes movimentos de um servo motor?

Pessoal, tenho dois sensores ultrassonicos, sensor 1 e sensor 2, só queria que, quando o sensor 1 detectar algo, o servo se posicione á esquerda, e quando o sensor 2 detectar algo, ele se posicione á direita, porém meu servo se comporta de maneira inesperada, será que estou esquecendo de algo? é como se o segundo if bugasse, ele só detecta o primeiro if e gira o servo nrmalmente, mas quando coloco a mão no outro sensor ele nao detecta... será que tenho que esvaziar alguma variavel ?

#include <Servo.h>

#define SERVO 6 // Porta Digital 6 PWM

Servo s; // Variável Servo
int pos; // Posição Servo

const int emissor = 7;

const int receptor = 8;

const int emissor2= 9;

const int receptor2= 10;

void setup() {

// Configuração de pinos como entrada e saída

pinMode(emissor, OUTPUT);

pinMode(receptor, INPUT);

pinMode(emissor2, OUTPUT);

pinMode(receptor2, INPUT);

pinMode(12, OUTPUT);

pinMode(13, OUTPUT);

s.attach(SERVO);
Serial.begin(9600);
s.write(0); // Inicia motor posição zero

}

void loop()

{

// variáveis utilizadas para conversão do ping em centímetros

long duration, inches, cm;

long duration2,inches2, cm2;

// sensor 1

//desliga o emissor

digitalWrite(emissor, LOW);

delayMicroseconds(2);

// 2 microssegundos depois enivia um sinal que dura 5 microssegundos

digitalWrite(emissor, HIGH);

delayMicroseconds(5);

//desliga o emissor

digitalWrite(emissor, LOW);

// o receptor recebe o eco e envia um sinal digital HIGH - alto

duration = pulseIn(receptor, HIGH);

//converte os valor do sinal de microssegundos para centímetros, retornando a variável cm

cm = microsecondsToCentimeters(duration);

//condição de leitura da variável - comandos para motores

if (cm > 15){

digitalWrite (13, HIGH); // se a distância for maior que 15 cm acende o led

}

else{

digitalWrite(13, LOW); // se não, desliga o led
for(pos = 0; pos < 90; pos++)
{
s.write(pos);
delay(15);
}
delay(1000);
for(pos = 90; pos >= 0; pos--)
{
s.write(pos);
delay(15);
}
 }

// Sensor 2

//desliga o emissor

digitalWrite(emissor2, LOW);

delayMicroseconds(2);

// 2 microssegundos depois enivia um sinal que dura 5 microssegundos

digitalWrite(emissor2, HIGH);

delayMicroseconds(5);

//desliga o emissor

digitalWrite(emissor2, LOW);

// o receptor recebe o eco e envia um sinal digital HIGH - alto

duration2 = pulseIn(receptor2, HIGH);

// converte a distância e retorna a variável cm

cm2= microsecondsToCentimeters(duration2);

//condição de leitura da variável - comandos para motores

if (cm2 > 15){

digitalWrite (12, HIGH);// se a distância for maior que 15 cm acende o led

}

else{

digitalWrite(12, LOW);// se não, desliga o led

for(pos = 0; pos < 90; pos++)
{
s.write(pos);
delay(15);
}
delay(1000);
for(pos = 90; pos >= 0; pos--)
{
s.write(pos);
delay(15);
}
 }

}

// Variável de conversão de microssegundos para centímetros

long microsecondsToCentimeters(long microseconds)

{

// A velocidade do som é 340 m/s ou 29 microssegundos por centímetro. O ping vai e volta e, sua distância será metade do tempo de ida e volta.

return microseconds / 29 / 2;

}

Exibições: 256

Responder esta

Respostas a este tópico

Bom dia J2S,

Recomendações:
1. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
2. Remova seu sketch da área de texto do seu tópico;
3. Comente todas as linhas do seu sketch.
4. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
     com o seu sketch.

RV

não ajudou

Ok

Bom dia,

Favor seguir as regras do forum. CLIQUE AQUI

Abs.

CK

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço