Buenas tardes a tod@s:
- Me pongo en contacto con ustedes, porque desarrollando un proyecto casero, de un coche dirigido por un joystick. Con la ayuda de vosotros, me enseñasteis a poner un pulsador de marcha/paro del coche, cosa que me ayudo mucho.
Ahora, vuelvo a necesitar vuestra ayuda, porque por medio de un sensor HC-SR04 leo/mapeo los obstáculos que tengo alrededor del coche pero no sé que dato poner en el programa para que cuando la distancia sea inferior a X, encienda una Led y en el puerto serial print/escriba "Alarma".
Dejo el programa para que me asesoréis al respecto.
const byte MarchaCa = 11; // marcha de car
const byte Paro = 12; // paro de car
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;
#include <NewPing.h>// esto es para el sensor hc-sr04
#define TRIGGER_PIN 3
#define ECHO_PIN 2
#define MAX_DISTANCE 500
NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE );
const byte LEDParoSen = 13;
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,LOW);
digitalWrite (in2,LOW);
digitalWrite (enB,LOW);//para el motorB al principio
digitalWrite (in3,LOW);
digitalWrite (in4,LOW);
Serial.begin(115200); //para las varialbes del sensor, pero no se muy bien
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
{
delay(100);//tiempo de espero que podría sobrar pero que creo que es mejor para la lectura del sensor
unsigned int uS = sonar.ping(); //Enviar ping, obtener tiempo de ping en microsegundos (uS).
Serial.print ("Ping: ");
Serial.print (uS / US_ROUNDTRIP_CM); //Convierta el tiempo de ping a la distancia en cm y el resultado de impresión (0 = fuera del rango de distancia establecido)
Serial.println ("cm");
}
if (digitalRead ("Ping: ",<10)); //AQUI tendo que definir algo de lo anterior, no sé porque he probado con todo, para que me sepa que es menor a 10 y que encienda LEd y escriba Alarma
{
digitalWrite(13,HIGH);
Serial,println ("Alarma");
}
if (joyposVert < 550){ //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);
}
}
Muchas gracias.