#define trigPin 2
#define echoPin 4
#include <Servo.h>
Servo myservo;
int pos = 0;
float duration, distance;
void setup() {
// put your setup code here, to run once:
myservo.attach(7);
pinMode (trigPin,OUTPUT);//seta o trigger como output
pinMode(echoPin,INPUT);//seta o echo como input
Serial.begin(9600);// inicia o monitor serial a 9600 bits por segundo
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // agora, ja dentro do void loop nos setamos o trig pra 0 so para ter certeza que ele esta low
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); // seto o trig pra high por 10 microsegundos que manda uma onda sonica de 8 ciclos que reflete no objeto e é recebida pelo echo
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);// definimos a duraçao, entao pelo tempo que o echo recebe
distance = (duration*.343)/2; //setamos o valor da distancia,agora o pq é assim?nn faço ideia Edit: pela equaçao velocidade= distancia * tempo podemos descobrir a distancia sabendo o tempo de trajeto(ja definido na programaçao) e pela velocidade do som que em centimetros por microsegundo da tipo.343 e dividimos por 2 pois o som tem que ir e voltar
Serial.print("Distance: ");
Serial.println(distance/10-1,0);/// printa o valor em cm(ele vem em mm) e tira 1(pq o sensor do wokwi tem uma imprecisao e alem disso tira todas as casas decimais pra facilidade de leitura)
delay(100);
if (distance<200){// a condiçao do "desvio"
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'
delay(20); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
}