Lab_interaccio/2010/xavi_mochila/xavi_mochila.pde

286 lines
4.6 KiB
Plaintext
Raw Normal View History

2025-02-25 21:29:42 +01:00
#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);
}