Created
July 18, 2020 18:00
-
-
Save vincentes/565922822427b7dc40c02bd5461db028 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Servo.h> | |
int inches = 0; | |
int cmUltrasonicAlcohol = 0; | |
int cmUltrasonicPersona = 0; | |
int ultrasonicAlcohol = 7; | |
int servoMotorAlcohol = 9; | |
int ultrasonicPersona = 8; | |
int ledAlarma = 4; | |
// Declaramos la variable para controlar el servo | |
Servo servoMotor; | |
void setup() | |
{ | |
pinMode(ledAlarma, OUTPUT); | |
pinMode(ultrasonicAlcohol, INPUT); | |
pinMode(ultrasonicPersona, INPUT); | |
Serial.begin(9600); | |
servoMotor.attach(servoMotorAlcohol); | |
} | |
void loop() | |
{ | |
bool sePusoAlcohol = false; | |
bool personaEntro = false; | |
// Manejo de ultrasonic persona alcohol | |
Serial.print("Distancia persona alcohol "); | |
cmUltrasonicAlcohol = returnDistanceUltrasonic(ultrasonicAlcohol); | |
if(cmUltrasonicAlcohol <= 40){ | |
servoMotor.write(400); | |
sePusoAlcohol = true; | |
} | |
Serial.print(cmUltrasonicAlcohol); | |
Serial.println(" cm"); | |
delay(100); | |
// Manejo de ultrasonic persona entrada | |
Serial.print("Distancia persona entrada "); | |
cmUltrasonicPersona = returnDistanceUltrasonic(ultrasonicPersona); | |
if(cmUltrasonicPersona <= 150){ | |
personaEntro = true; | |
} | |
Serial.print(cmUltrasonicPersona); | |
Serial.println(" cm"); | |
delay(100); | |
// Manejo de ingreso de personas/colocación de alcohol | |
if(sePusoAlcohol == false && personaEntro == true){ | |
Serial.print(""); | |
Serial.println("Ha ingresado una persona sin cumplir el protocolo"); | |
Serial.print(""); | |
blinkLed(ledAlarma, 10, 3000); | |
} | |
delay(100); | |
} | |
unsigned long ledActivationSeconds; | |
int lastMillisBlink; | |
int millisPerBlink; | |
// Tiempo encendido | |
int millisOnTime = 200; | |
bool ledBlinking = false; | |
void blinkLed(int pin, int times, int duration) { | |
if(!ledBlinking) { | |
Serial.print(""); | |
ledActivationSeconds = millis(); | |
lastMillisBlink = ledActivationSeconds; | |
millisPerBlink = duration / times; | |
digitalWrite(pin, HIGH); | |
ledBlinking = true; | |
} else { | |
if(millis() - lastMillisBlink >= millisPerBlink) { | |
digitalWrite(pin, HIGH); | |
lastMillisBlink = millis(); | |
} | |
if(millis() - lastMillisBlink >= millisOnTime) { | |
digitalWrite(pin, LOW); | |
} | |
if(millis() - ledActivationSeconds >= duration) { | |
ledBlinking = false; | |
ledActivationSeconds = 0; | |
digitalWrite(pin, LOW); | |
} | |
} | |
} | |
/* | |
Funciones | |
*/ | |
// retornar distancia en cm | |
long returnDistanceUltrasonic(int pin){ | |
return 0.01723 * readUltrasonicDistance(pin); | |
} | |
// leer distancia de ultrasonic | |
long readUltrasonicDistance(int pin) | |
{ | |
pinMode(pin, OUTPUT); // Clear the trigger | |
digitalWrite(pin, LOW); | |
delayMicroseconds(2); | |
// Sets the pin on HIGH state for 10 micro seconds | |
digitalWrite(pin, HIGH); | |
delayMicroseconds(10); | |
digitalWrite(pin, LOW); | |
pinMode(pin, INPUT); | |
// Reads the pin, and returns the sound wave travel time in microseconds | |
return pulseIn(pin, HIGH); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment