Commit 54a15c80 authored by Gaspar Diaz Listur's avatar Gaspar Diaz Listur

Upload New File

parent ec003ebc
// Librerias
#include <SoftwareSerial.h>
#include <Servo.h>
// Definiciones
#define MOTOR_EU 12 //upwards
#define MOTOR_ED 13 //downwards
#define MOTOR_EP 11 //pulse
#define PB 3 //microswitch PB
#define negra 1
#define blanca 0
// Servo
Servo myservo;
// Definicion de funciones
void bajar();
void expulsar();
// Variables
int PosicionY = 0; // variable POSICION
int A = 2; //variable de interrupcion a pin digital 2
int comando=0;
int busy;
int pisop;
int repisa[4];
unsigned long ultimaInterrupcion = 0;
boolean Actual,Ultima;
int vel=0;
void setup() {
Serial.begin(9600);
// Motor MODES
pinMode(MOTOR_EU,OUTPUT);
pinMode(MOTOR_ED,OUTPUT);
pinMode(MOTOR_EP,OUTPUT);
// Servo
myservo.attach(9);
// Interrupciones
Actual=digitalRead(A), Ultima=Actual; //estado inicial del encoder
attachInterrupt(digitalPinToInterrupt(A),altitud,CHANGE);
// Estantes vacios
repisa[0] = 0;
repisa[1] = 0;
repisa[2] = 0;
repisa[3] = 0;
// START
delay(100);
bajar();
}
void loop() {
vel=analogRead(A4)/4;
Serial.println(vel);
if(Serial.available()){
comando=Serial.read();
}
if(comando==49){
ir_a_piso(1, vel);
Serial.println("llegue");
expulsar();
bajar();
}
if(comando==50){
ir_a_piso(2, vel);
expulsar();
bajar();
}
if(comando==51){
ir_a_piso(3, vel);
expulsar();
bajar();
}
}
////////////////////////////////////////////////////////////////////////////////
///////////////////// FUNCIONES //////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void altitud()
{
//cada 5 millisegundos pregunta si el boton cambio de estado, de ser asi actualiza la posicion
unsigned long tiempoInterrupcion = millis(); // variable almacena valor de func. millis
if (tiempoInterrupcion - ultimaInterrupcion > 5)
{ // rutina antirebote desestima
PosicionY++ ; // incrementa POSICION en 1
ultimaInterrupcion = tiempoInterrupcion;
}
}
////////////////////////////////////////////////////////////////////////////////////
void bajar(){ // Funcion para que baje
Serial.println("Bajando");
while (digitalRead(PB)==!LOW){
digitalWrite(MOTOR_EU,LOW);
digitalWrite(MOTOR_ED,HIGH);
analogWrite(MOTOR_EP,150);
}
digitalWrite(MOTOR_ED,LOW);
Serial.println("Planta Baja");
PosicionY=0;
}
////////////////////////////////////////////////////////////////////////////////////
void expulsar(){
Serial.println("Expulsando");
for (int p=60;p>0;p--){
myservo.write(p);
delay(25);
}
delay(1000);
myservo.write(60);
busy=0;
Serial.println("Expulsado");
}
////////////////////////////////////////////////////////////////////////////////////
void Subir(int Coord_Piso, int vel){ //Funcion a la que le mandas el numero de "pasos" y va hasta ahi ;)
Serial.println("Subiendo");
while(PosicionY<Coord_Piso)
{
digitalWrite(MOTOR_EU,HIGH);
digitalWrite(MOTOR_ED,LOW);
analogWrite(MOTOR_EP,vel);
}
digitalWrite(MOTOR_EU,LOW);
digitalWrite(MOTOR_ED,LOW);
analogWrite(MOTOR_EP,vel);
Serial.print("En PISO:");
Serial.println(pisop);
}
////////////////////////////////////////////////////////////////////////////////////
void ir_a_piso(int piso, int vel){
switch(piso){
case 0:
bajar();
break;
case 1:
pisop=1;
Subir(21, vel); //Piso 1
break;
case 2:
pisop=2;
Subir(41, vel); //Piso 2
break;
case 3:
pisop=3;
Subir(61, vel); //Piso 3
break;
}
}
////////////////////////////////////////////////////////////////////////////////////
void guardar_caja(int color, int vel){
int piso;
switch (color){
case 'blanca':
piso= 1;
break;
case 'negra':
piso=3;
break;
}
if(repisa[piso]==1){ //si el lugar esta ocupado
piso = 2; //Voy al lugar alternativo
}
ir_a_piso(piso, vel);
expulsar();
repisa[piso]=1;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment