commit
decdffddb7
1 changed files with 165 additions and 0 deletions
@ -0,0 +1,165 @@ |
|||
/*
|
|||
Codigo base para robot RC, utilizando la placa Tapatio Motor Board |
|||
By: Miguel Angel Delgado López - miguel.delgado.lop@gmail.com |
|||
*/ |
|||
|
|||
//Velocidad con la que quieres que se mueva el robot
|
|||
//debe ser un valor máximo de 255 y dependerá de lo motores que uses
|
|||
int power=150; |
|||
|
|||
//Pines necesario para controlar los diver Tapatio Driver
|
|||
#define M01 6 |
|||
#define M02 5 |
|||
#define M03 10 |
|||
#define M04 9 |
|||
|
|||
//Pines para los sensores P= Principal I= Izquierdo D= Derecho
|
|||
#define sensP A0 |
|||
#define sensI A3 |
|||
#define sensD A7 |
|||
|
|||
|
|||
#define led1 13 |
|||
|
|||
int estrategia = 0; |
|||
boolean start = true; |
|||
boolean inicio = true; |
|||
int umbral = 900; |
|||
|
|||
int tiempoReversa=.5; //en segundos
|
|||
|
|||
|
|||
|
|||
|
|||
//Configuracion de los pines como salida e iniciar el Bluetooth
|
|||
void setup() { |
|||
Serial.begin(9600); |
|||
pinMode(M01,OUTPUT); |
|||
pinMode(M02,OUTPUT); |
|||
pinMode(M03,OUTPUT); |
|||
pinMode(M04,OUTPUT); |
|||
//-----------SENSORES----------------
|
|||
pinMode(sensP,INPUT); |
|||
pinMode(sensI,INPUT); |
|||
pinMode(sensD,INPUT); |
|||
|
|||
} |
|||
|
|||
//Método principal que al recibir una letra hace que se mueva el robot RC
|
|||
void loop() { |
|||
|
|||
if(!start){ |
|||
velocidad(0, 0); |
|||
int x= leerSensores(); |
|||
Serial.println(x); |
|||
}else{ |
|||
if(inicio){ |
|||
for(int x=0;x<30;x++){ |
|||
led(0); |
|||
delay(50); |
|||
led(1); |
|||
delay(50); |
|||
} |
|||
inicio=false; |
|||
}else{ |
|||
int sensores=leerSensores(); |
|||
if(sensores==0){ |
|||
velocidad(power,power); |
|||
Serial.println("adelante"); |
|||
}else{ |
|||
if(sensores==1){ |
|||
switch(estrategia){ |
|||
case 0: |
|||
//Frente por izquierda
|
|||
velocidad(power,-power); |
|||
Serial.println("Frente Izquieda"); |
|||
break; |
|||
case 1: |
|||
//Frente por la derecha
|
|||
velocidad(-power,power); |
|||
Serial.println("Frente Derecha"); |
|||
break; |
|||
case 2: |
|||
//Atras por izquierda
|
|||
velocidad(-power,-power*.3); |
|||
Serial.println("atras izquierda"); |
|||
break; |
|||
case 3: |
|||
//atras por derecha
|
|||
velocidad(-power*.3,-power); |
|||
Serial.println("atras derecha"); |
|||
break; |
|||
} |
|||
} |
|||
if(sensores==2|| sensores==3){ |
|||
//case 1://se activo sensor izquierdo
|
|||
Serial.println("izquerdo"); |
|||
velocidad(-power,-power); |
|||
delay(tiempoReversa*1000); |
|||
} |
|||
|
|||
if(sensores==4|| sensores==5){ |
|||
//case 2://Se activo sensor derecho
|
|||
Serial.println("derecho"); |
|||
velocidad(-power,-power); |
|||
delay(tiempoReversa*1000); |
|||
} |
|||
|
|||
if(sensores==6||sensores==7){ |
|||
// case 3://se activaron los 2 sensores
|
|||
//reversa
|
|||
Serial.println("ambos"); |
|||
velocidad(-power,-power); |
|||
delay(tiempoReversa*1000); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
int leerSensores(){ |
|||
int v=0; |
|||
v+=digitalRead(sensP); |
|||
v+=analogRead(sensI)<umbral?2:0; |
|||
v+=analogRead(sensD)<umbral?4:0; |
|||
return v; |
|||
} |
|||
|
|||
void led(bool l1){ |
|||
digitalWrite(led1,l1); |
|||
} |
|||
|
|||
|
|||
//Método que permite controlar la velocidad y sentido de giro a los motores
|
|||
//El valor minimo es -255 y el máximo 255, Negativo hacia atrás y positivo hacia adelante
|
|||
void velocidad(int izq, int der){ |
|||
if(izq>255){ |
|||
izq=255; |
|||
}else{ |
|||
if(izq<-255){ |
|||
izq=-255; |
|||
} |
|||
} |
|||
if(der>255){ |
|||
der=255; |
|||
}else{ |
|||
if(der<-255){ |
|||
der=-255; |
|||
} |
|||
} |
|||
if(izq>0){ |
|||
analogWrite(M01,izq); |
|||
analogWrite(M02, 0); |
|||
}else{ |
|||
analogWrite(M01, 0); |
|||
analogWrite(M02, abs(izq)); |
|||
} |
|||
if(der>0){ |
|||
analogWrite(M03,der); |
|||
analogWrite(M04, 0); |
|||
}else{ |
|||
analogWrite(M03, 0); |
|||
analogWrite(M04, abs(der)); |
|||
} |
|||
} |
Loading…
Reference in new issue