Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
TallerInE Robótico - 2020 1Sem
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
9
Issues
9
List
Boards
Labels
Service Desk
Milestones
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Guillermo Andres Airaldi Alvarez
TallerInE Robótico - 2020 1Sem
Commits
7aac88bf
Commit
7aac88bf
authored
Mar 19, 2020
by
Gaspar Diaz Listur
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ver comentarios al comienzo del archivo!
parent
54a15c80
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
262 additions
and
0 deletions
+262
-0
Centro Logístico/grua_con_comunicacion.ino.ino
Centro Logístico/grua_con_comunicacion.ino.ino
+262
-0
No files found.
Centro Logístico/grua_con_comunicacion.ino.ino
0 → 100644
View file @
7aac88bf
//////////////////////////////////////////////////////////////////////////////////////////
// SE DESCONECTARON LOS SENSORES IR DEL SEGUIDOR DE LINEA (PINES ANALOGICOS 0, 1, 2 Y 3 //
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
/////////////// NO FUNCIONA EN SERVO QUE EXPULSA LA CAJA DE LA PLATAFORMA ////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//////////////// DECIDIR QUE PINES SE USAN PARA LA COMUNICACION CON XBEE /////////////////
//////////////////////////////////////////////////////////////////////////////////////////
// Librerias
#include <SoftwareSerial.h>
#include <Servo.h>
// Definiciones
#define LLEGOCARRO 'A'
#define CAJAENVIADA 'B'
#define CAJALISTA 'C'
#define CAJARECIBIDA 'D'
#define ACK 'O'
#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
#define velSubida 220
#define velBajada 150
// Servo
Servo
myservo
;
// Definicion de funciones
void
bajar
();
void
expulsar
();
// Variables
int
vel
=
0
;
// Variable velocidad para el acelerador
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
,
ack
=
false
;
// Comunicacion
SoftwareSerial
mySerial
=
SoftwareSerial
(
9
,
10
);
// Estos pines aparecen libres en el Shield
////////////////////////////////////////////////////////////////////////////////
/////////////////////// SETUP ///////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
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
();
}
////////////////////////////////////////////////////////////////////////////////
/////////////////////// LOOP ////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
void
loop
()
{
// Acelerador con potenciometro
// vel=analogRead(A4)/4;
// Serial.println(vel);
if
(
Serial
.
available
()){
comando
=
Serial
.
read
();
interpretarComando
(
comando
);
}
while
(
ack
==
false
){
// Esperando llegada de carro
if
(
mySerial
.
available
()){
if
(
mySerial
.
read
()
==
LLEGOCARRO
){
Serial
.
println
(
"Recibi LLEGOCARRO"
);
ack
=
true
;
}
}
}
ack
=
false
;
for
(
int
i
=
0
;
i
<
10
;
i
++
){
// Confirmar aviso de llegada
Serial
.
println
(
"mandoACK"
);
mySerial
.
write
(
ACK
);
delay
(
50
);
}
// Esperar que haya caja en la plataforma
while
(
true
){
// Mirar sensor IR hasta que haya caja
}
// Establizar caja
delay
(
500
);
// Despachar carro
while
(
ack
==
false
){
// Notificar que llego la caja
mySerial
.
write
(
CAJARECIBIDA
);
Serial
.
println
(
"mandoCAJARECIBIDA"
);
delay
(
50
);
if
(
mySerial
.
available
()
>
0
){
if
(
mySerial
.
read
()
==
ACK
){
Serial
.
println
(
"recibiACK"
);
ack
=
true
;
}
}
}
ack
=
false
;
// Decidir que hacer con la caja
// Se puede usar la funcion interpretarComando(comando); para ubicar la caja en el piso deseado
}
////////////////////////////////////////////////////////////////////////////////
///////////////////// 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
,
velBajada
);
}
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
;
}
////////////////////////////////////////////////////////////////////////////////////
void
interpretarComando
(
int
comando
){
if
(
comando
==
48
){
expulsar
();
}
if
(
comando
==
49
){
ir_a_piso
(
1
,
velSubida
);
expulsar
();
bajar
();
}
if
(
comando
==
50
){
ir_a_piso
(
2
,
velSubida
);
expulsar
();
bajar
();
}
if
(
comando
==
51
){
ir_a_piso
(
3
,
velSubida
);
expulsar
();
bajar
();
}
}
////////////////////////////////////////////////////////////////////////////////////
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment