Buenas de nuevo:
-Con ayuda de miembros de este foro, he/hemos, desarrollado un programa para el manejo de un coche con Arduino. La idea que tengo ahora es que con un sensor HC-RS04, el coche pare al detectar, que tiene algún obstáculo en su camino, NO QUE LO ESQUIVE, como la mayoría de los tutoriales que encuentro.
La idea es:
tengo un botón, que me enciende una led, que me dá permiso, para que yo, con el joystick, pueda mover el coche a donde se me plazca. Pero que cuando el sensor me detecte algo en su camino, se pare hasta que no tenga nada delante.
Adjunto el programa, con parámetros del HC-RS04 para que alguno me pueda ayudar o orientar.
Muchas gracias.
const byte MarchaCa = 2; // marcha de carretilla
const byte Paro = 3; // paro de carretilla
const byte LEDOpera = 8; // objetivo para que funcione esta led encendida
const byte enA = 9; // definir las variables de los motores
const byte in1 = 7;
const byte in2 = 6;
const byte enB = 10;
const byte in3 = 5;
const byte in4 = 4;
const byte Trig =12;
const byte Echo =11;
const byte LEDParoSen = 13;
const byte valor;
long distancia;
long tiempo;
int motorASpeed = 0; // variables motor
int motorBSpeed = 0;
const byte joyVert = A0; // joystick vertical
const byte joyHori = A1; // joystick horizontal
int joyposVert = 0; // lectura del joystick vertical
int joyposHori = 0; // lectura del joystik en horizontal
bool flag = false;
void setup (){
pinMode (MarchaCa,INPUT);
pinMode (LEDOpera,OUTPUT);
digitalWrite (LEDOpera,LOW);
pinMode (enA,OUTPUT);//definimos como salidas las variables de
pinMode (in1,OUTPUT);
pinMode (in2,OUTPUT);
pinMode (enB,OUTPUT);//los motores A y B
pinMode (in3,OUTPUT);
pinMode (in4,OUTPUT);
digitalWrite (enA,LOW);//para el motorA al principio
digitalWrite (in1,HIGH);
digitalWrite (in2,LOW);
digitalWrite (enB,LOW);//para el motorB al principio
digitalWrite (in3,HIGH);
digitalWrite (in4,LOW);
Serial.begin(9600); //para las varialbes del sensor, pero no se muy bien
pinMode(11,OUTPUT);
pinMode(12,INPUT);
pinMode(13,OUTPUT);
}
void loop(){
if (digitalRead(MarchaCa)==LOW) { // marcha del programa
flag = true;
delay (1000); // espera antes de enceder led
digitalWrite(LEDOpera,HIGH); // encedido de la led
}
if (digitalRead (Paro)==LOW) { //paro del led
digitalWrite (LEDOpera,LOW);
flag = false;
}
if (flag)
control_Joystick();
}
void control_Joystick() {
joyposVert = analogRead (joyVert);//estado del joystick
joyposHori = analogRead (joyHori);//estado del joystick
{
digitalWrite(11,LOW);//MIRAR QUE PUEDE FALLAR
delayMicroseconds(2);
digitalWrite(11,HIGH);
delayMicroseconds(10);
digitalWrite(11,LOW);
//
tiempo = pulseIn(10,HIGH);
distancia =(tiempo/2)/29;
if (distancia >=500 || distancia <=0){
}
else{
Serial.print(distancia);
Serial.println("cm");
digitalWrite(13,LOW);
if (distancia <=10 && distancia >=1){
digitalWrite(13,HIGH);
Serial.print("Alarma...");
}
}
}
if ((joyposVert < 550)and (valor=="1"&&distancia>=20)){ //en reposo en joyposVer
digitalWrite (in1,LOW);
digitalWrite (in2,LOW);
digitalWrite (in3,LOW);
digitalWrite (in4,LOW);
}
if (joyposVert <= 55) { //giro izquierda
digitalWrite (in1,LOW);
digitalWrite (in2,LOW);
digitalWrite (in3,LOW);
digitalWrite (in4,HIGH);
}
if (joyposVert >= 550) { //giro derecha
digitalWrite (in1,LOW);
digitalWrite (in2,HIGH);
digitalWrite (in3,LOW);
digitalWrite (in4,LOW);
}
if (joyposHori < 50) { //a delante
digitalWrite (in1,LOW);
digitalWrite (in2,HIGH);
digitalWrite (in3,LOW);
digitalWrite (in4,HIGH);
}
if (joyposHori >= 560) { //atrás
digitalWrite (in1,HIGH);
digitalWrite (in2,LOW);
digitalWrite (in3,HIGH);
digitalWrite (in4,LOW);
}
}