Pessoal, eu sou novo aqui na comunidade, e a pouco tempo adquiri alguns componentes para fazer testes com arduino. Primeiro eu adquiri a plataforma boebot e estou adaptando para arduino. Eu planejo fazer um carrinho simples, com um sensor ultrassonico na parte superior, mas esse sensor não fica parado, ele fica se movendo de 0 a 180 graus (direita e esquerda), com ajuda de um servo motor e um suporte para sensor ultrassonico. Meu primeiro problema é, como faço para ele verificar a distancia de um obstáculo e ao mesmo tempo girar para direita e esquerda. Eu coloquei os 2 para funcionar, mas apenas funciona 1 de cada vez. Gostaria que vocês me ajudassem nessa programação.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
const int pingPin = 7;
int pos = 0;
void setup() {
// initialize serial communication:
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
pingsensor();
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
pingsensor();
delay(15); // waits 15ms for the servo to reach the position
}
}
void pingsensor(){
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds)
{
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
A programação acima fica da seguinte forma, ao invés do sensor ultrassonico trabalhar normalmente em conjunto com o servo, a cada repetição do "for" ele capta a distância do obstáculo, ou seja, de 0 a 180 a cada grau ele verifica um pulso do sensor (ele fica muito lento), que na verdade eu gostaria que eles trabalhassem paralelamente. Gostaria de uma solução, porque eu estou nisso há dias.