Skip to content

Instantly share code, notes, and snippets.

@vincentes
Created July 18, 2020 18:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vincentes/565922822427b7dc40c02bd5461db028 to your computer and use it in GitHub Desktop.
Save vincentes/565922822427b7dc40c02bd5461db028 to your computer and use it in GitHub Desktop.
#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