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;
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por