73 lines
1.7 KiB
Arduino
73 lines
1.7 KiB
Arduino
|
#include <Servo.h>
|
||
|
#define echoPin 7 // Echo Pin
|
||
|
#define trigPin 8 // Trigger Pin
|
||
|
#define LEDPin 13 // LED pin
|
||
|
boolean algo; // true si hay algo en rango
|
||
|
int i, j;
|
||
|
int maximumRange = 50; // Distancia maxima
|
||
|
int minimumRange = 10; // Distancia minima
|
||
|
long duration, distance; // Duración utílizada para calcular la distancia
|
||
|
Servo myservo; // instancia objero Servo
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin (9600);
|
||
|
myservo.attach(9); // pin asociado al objeto Servo
|
||
|
pinMode(trigPin, OUTPUT);
|
||
|
pinMode(echoPin, INPUT);
|
||
|
pinMode(LEDPin, OUTPUT);
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
sensar();
|
||
|
accion();
|
||
|
if(!algo) {
|
||
|
while(i<171) {
|
||
|
for (i=j; i<=170; i++) { // giro sentido antihorario
|
||
|
myservo.write(i); // mueve el servo a la posición indicada
|
||
|
sensar();
|
||
|
accion();
|
||
|
j = i;
|
||
|
if(algo) break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
while(i>10) {
|
||
|
if(!algo) {
|
||
|
for (j=i; j>=10; j--) { // giro sentido horario
|
||
|
myservo.write(j); // mueve el servo a la posición indicada
|
||
|
sensar();
|
||
|
accion();
|
||
|
i=j;
|
||
|
if(algo) break;
|
||
|
}
|
||
|
}
|
||
|
sensar();
|
||
|
accion();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void accion() {
|
||
|
if (distance >= maximumRange || distance <= minimumRange){
|
||
|
Serial.println("Nada por aquí");
|
||
|
digitalWrite(LEDPin, LOW);
|
||
|
algo = false;
|
||
|
} else {
|
||
|
algo = true;
|
||
|
Serial.print("Objeto a: ");
|
||
|
Serial.print(distance);
|
||
|
Serial.println(" cm.");
|
||
|
digitalWrite(LEDPin, HIGH);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void sensar() {
|
||
|
digitalWrite(trigPin, LOW);
|
||
|
delayMicroseconds(2);
|
||
|
digitalWrite(trigPin, HIGH);
|
||
|
delayMicroseconds(10);
|
||
|
digitalWrite(trigPin, LOW);
|
||
|
duration = pulseIn(echoPin, HIGH); // demora del eco, para cálculo de distancia
|
||
|
distance = duration/58.2;
|
||
|
}
|
||
|
|