apuntes_Arduino/motores/servo/servo_led/servo_led.ino

73 lines
1.7 KiB
Arduino
Raw Permalink Normal View History

2021-01-05 00:15:16 -03:00
#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;
}