286 lines
4.6 KiB
Plaintext
286 lines
4.6 KiB
Plaintext
#include <Wire.h>
|
|
#include <SoftwareServo.h>
|
|
|
|
SoftwareServo servo1; //
|
|
SoftwareServo servo2; //
|
|
SoftwareServo servo3; //Carril
|
|
|
|
//Pines L298N
|
|
#define input2 13
|
|
#define input1 12
|
|
#define enable 11
|
|
|
|
//Finales de carrera
|
|
#define s1 17 //delante
|
|
#define s2 16 //detras
|
|
#define s3 15
|
|
#define s4 14
|
|
|
|
//Dispositivos
|
|
#define mp3 8
|
|
#define ventilador 10
|
|
#define lampara 9
|
|
#define pir 6
|
|
#define stop3 36
|
|
|
|
int Command_ok=0;
|
|
|
|
unsigned long time=0;
|
|
|
|
void setup()
|
|
{
|
|
pinMode(mp3, OUTPUT);
|
|
pinMode(ventilador, OUTPUT);
|
|
pinMode(input1, OUTPUT);
|
|
pinMode(input2, OUTPUT);
|
|
|
|
pinMode(pir, INPUT);
|
|
pinMode(s1, INPUT);
|
|
pinMode(s2, INPUT);
|
|
pinMode(s3, INPUT);
|
|
pinMode(s4, INPUT);
|
|
|
|
servo1.attach(3);
|
|
servo2.attach(5);
|
|
servo3.attach(4);
|
|
servo1.setMinimumPulse(700);
|
|
servo1.setMaximumPulse(2000);
|
|
servo2.setMinimumPulse(700);
|
|
servo2.setMaximumPulse(2000);
|
|
servo3.setMinimumPulse(700);
|
|
servo3.setMaximumPulse(2000);
|
|
|
|
analogWrite(lampara, 0);
|
|
digitalWrite(s1, HIGH);
|
|
digitalWrite(s2, HIGH);
|
|
digitalWrite(s3, HIGH);
|
|
digitalWrite(s4, HIGH);
|
|
digitalWrite(mp3,LOW);
|
|
digitalWrite(ventilador,LOW);
|
|
|
|
|
|
servo1.write(33); //stop
|
|
servo2.write(90); //reposo
|
|
servo3.write(stop3); //stop
|
|
delay(15);
|
|
ini();
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
|
|
if (digitalRead(pir))
|
|
{
|
|
//Secuencia 1
|
|
digitalWrite(ventilador,HIGH);
|
|
servo_ver(60);
|
|
avanza();
|
|
giro();
|
|
mp3_on();
|
|
on_lamp_dif();
|
|
off_lamp();
|
|
giro();
|
|
delay(1000);
|
|
on_lamp();
|
|
delay(5000);
|
|
off_lamp_dif();
|
|
giro();
|
|
delay(1000);
|
|
on_lamp_dif();
|
|
delay(5000);
|
|
off_lamp();
|
|
giro();
|
|
delay(1000);
|
|
on_lamp();
|
|
delay(3000);
|
|
servo_ver(40);
|
|
delay(2000);
|
|
servo_ver(90);
|
|
retrocede();
|
|
avanza();
|
|
off_lamp();
|
|
servo_ver(60);
|
|
giro();
|
|
delay(1000);
|
|
on_lamp();
|
|
delay(5000);
|
|
off_lamp_dif();
|
|
giro();
|
|
delay(1000);
|
|
parpadeo_led(9);
|
|
retrocede();
|
|
avanza();
|
|
delay(1000);
|
|
off_lamp();
|
|
giro();
|
|
on_lamp_dif();
|
|
delay(4000);
|
|
off_lamp_dif();
|
|
|
|
//Secuencia 2
|
|
giro();
|
|
delay(1000);
|
|
on_lamp_dif();
|
|
delay(4000);
|
|
off_lamp();
|
|
giro();
|
|
delay(1000);
|
|
on_lamp();
|
|
delay(3000);
|
|
servo_ver(40);
|
|
delay(3000);
|
|
servo_ver(90);
|
|
retrocede();
|
|
avanza();
|
|
off_lamp();
|
|
servo_ver(60);
|
|
giro();
|
|
parpadeo_led(15);
|
|
off_lamp();
|
|
giro();
|
|
delay(1000);
|
|
on_lamp();
|
|
delay(5000);
|
|
retrocede_dif();
|
|
ini();
|
|
delay(10000);
|
|
}
|
|
else
|
|
{
|
|
ini();
|
|
}
|
|
}
|
|
|
|
void off_lamp()
|
|
{
|
|
analogWrite(lampara,0);
|
|
}
|
|
|
|
void on_lamp()
|
|
{
|
|
analogWrite(lampara,255);
|
|
}
|
|
|
|
void parpadeo_led(int fin)
|
|
{
|
|
for (int i = 0; i <= fin; i++)
|
|
{
|
|
delay(300);
|
|
analogWrite(lampara,128);
|
|
delay(300);
|
|
analogWrite(lampara,255);
|
|
}
|
|
}
|
|
|
|
void mp3_on()
|
|
{
|
|
digitalWrite(mp3,HIGH);
|
|
}
|
|
|
|
void mp3_off()
|
|
{
|
|
digitalWrite(mp3,LOW);
|
|
}
|
|
|
|
void retrocede()
|
|
{
|
|
servo3.write(180);
|
|
while (digitalRead(s2))
|
|
{
|
|
SoftwareServo::refresh();
|
|
}
|
|
servo3.write(stop3);
|
|
}
|
|
|
|
void retrocede_dif()
|
|
{
|
|
servo3.write(180);
|
|
int e=255;
|
|
while (digitalRead(s2))
|
|
{
|
|
if (e>=8)
|
|
{
|
|
e=e-8;
|
|
analogWrite(lampara,e);
|
|
}
|
|
SoftwareServo::refresh();
|
|
delay(50);
|
|
}
|
|
servo3.write(stop3);
|
|
analogWrite(lampara,0);
|
|
}
|
|
|
|
void avanza()
|
|
{
|
|
servo3.write(0);
|
|
while (digitalRead(s1))
|
|
{
|
|
SoftwareServo::refresh();
|
|
}
|
|
servo3.write(stop3);
|
|
}
|
|
|
|
void giro()
|
|
{
|
|
unsigned long time_servo=0;
|
|
time_servo=millis();
|
|
servo1.write(20);
|
|
while ((millis()-time_servo)<=300)
|
|
{
|
|
SoftwareServo::refresh();
|
|
}
|
|
|
|
while (digitalRead(s4))
|
|
{
|
|
servo1.write(20);
|
|
SoftwareServo::refresh();
|
|
}
|
|
servo1.write(33);
|
|
}
|
|
|
|
void servo_ver(int angulo)
|
|
{
|
|
unsigned long time_servo2=0;
|
|
time_servo2=millis();
|
|
servo2.write(angulo);
|
|
while ((millis()-time_servo2)<=1000)
|
|
{
|
|
SoftwareServo::refresh();
|
|
}
|
|
}
|
|
|
|
void on_lamp_dif()
|
|
{
|
|
for (int i = 5; i <= 255; i=i+5)
|
|
{
|
|
analogWrite(lampara,i);
|
|
if (i<50) delay(200);
|
|
else if (i<140) delay(100);
|
|
else if (i<180) delay(50);
|
|
else if (i<200) delay(25);
|
|
else delay(10);
|
|
}
|
|
}
|
|
|
|
void off_lamp_dif()
|
|
{
|
|
for (int i = 255; i >= 0; i=i-5)
|
|
{
|
|
analogWrite(lampara,i);
|
|
if (i<50) delay(200);
|
|
else if (i<140) delay(100);
|
|
else if (i<180) delay(50);
|
|
else if (i<200) delay(25);
|
|
else delay(10);
|
|
}
|
|
}
|
|
|
|
void ini()
|
|
{
|
|
servo2.write(90);
|
|
retrocede();
|
|
mp3_off();
|
|
analogWrite(ventilador,0);
|
|
analogWrite(lampara,0);
|
|
}
|