NewPing

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.

if  ((digitalRead("cm" >= 10)) &&  (digitalRead("cm" <=1"))){

Que has desayunado?

Lo que has puesto es una barbaridad!!!

primero jamás un digitalRead puede tener una operación booleana este bien o no

"cm" > = 10 eso de donde lo has sacado?

Este es tu valor en CM => uS / US_ROUNDTRIP_CM
colocalo en una variable para mas comodiad y entonces si haces la consulta que quieras.

Porque no pruebas con cosas simples en lugar de seguir atascado en un codigo que no terminas de entender.
No quiero ofenderte ni nada por el estilo.

Cuando yo programo tengo dudas, y errores y cuando eso me pasa me detengo y asilo lo que funciona mal y hago otro codigo y lo ensayo hasta entenderlo.

Si tu pruebas lo que has mostrado primero el compilador te da error.
Si te da error es porque esta mal sintácticamente.

Lo mejor que puedes hacer es mejorar tu base de conocimientos.
Ve a Documentación => Indice de temas tutoriales => Clases de Youtube.

Te recomendo que veas algunas para entender mejor esto.
Veras que se te hará mas simple. Incluso creo que hay un ejemplo con un sensor ultrasónico.

Buenas tardes:

En primer lugar, agradecer las orientaciones que me dais de cara a encauzar esta parte del programa. Esta tarde sin falta, me pondré a visualizar los tutoriales y demás consejos que me dais para seguir haciendo pruebas y ver si consigo continuar con este programa.

Por otra parte, decir, que tras varias pruebas y demás, este apartado es el único que me ha mapeado como quiero las cosas que tiene delante el coche eléctrico que realizo.

{
 
    unsigned  int uS  = sonar.ping();   //Enviar ping, obtener tiempo de ping en microsegundos (uS).
    Serial.print  ("Distancia: ");
    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.print    ("cm");
    delay(100);
  }

Como tenia claro en un principio, debajo de esto, va un if, con alguna variable y demás, para que, al acercar el coche a una distancia , se me pare y se me encienda una led de aviso.

Más adelante, y en el apartado que proceda, también sé, porque me lo aclarasteis, que si quiero que con el Joystick en reposos y con esa marca/valor, NO se me mueva el coche debería ser el apartado de la siguiente forma:

if ((joyposVert  < 550)||(MARCA/VARIABLE)){ //en reposo en joyposVer

Gracias y ojala pronto consiga lo que pretendo.

Buenas tardes:

-Necesito asesoramiento, para el proyecto que estoy realizando con mi Arduino. Pretendo que dos señales, pare mis motores del coche eléctrico.
Tengo un If, pero he probado con varias cosas y no me realiza lo que quiero.

if (joyposVert  < 550)||((13,HIGH)o(uS/US_ROUNDTRIP_CM  <=10)o(marca)¿algo mas?¿? { //AQUI NOS QUEDAMOS en reposo en joyposVer
 
      digitalWrite  (in1,LOW);
      digitalWrite  (in2,LOW);

      digitalWrite  (in3,LOW);
      digitalWrite  (in4,LOW);
 
  }

Eso, que cuando esté el Joystick en reposo o algo activado, no me deje actuar con los motores.
Muchas gracias.

Pero no lo habíamos resuelto?

Bueno espero que ahora si.

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() {

	unsigned int distancia;
	joyposVert = analogRead  (joyVert);//estado del joystick
	joyposHori  = analogRead  (joyHori);//estado del joystick
		
	distancia = sonar.ping_cm();
	
	Serial.print("Ping: ");
	Serial.print(distancia);  //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 ( distancia <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");
	}
	else digitalWrite(13,LOW);

	if (joyposVert  < 550)||(distancia  <=10) {//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);
	}
}

Esto lo hice porque quiero que lo resuelvas y entiendas que esta mal pero ahora

Ve a Documentación => Indice de temas tutoriales => Clases de youtube.

Y como vea preguntas de este tipo en el futuro no te las voy a responder.
Quiero decir que espero que estudies y prestes atención a las clases porque tienes dudas DEMASIADO básicas que dicen que estas copiando y pegando sin entender lo que haces.

Asi que deja de hacerlo y si te interesa Arduino tomate un momento para estudiar de qué se trata!!

Buenos días:

-En relación a Post#2, creo que ya lo he solucionado, lo he quitado y listo.
En cuento al último programa, que hace referencia a lo que pretendo, tal cual está, lo he copiado, para verificar que realiza lo que quiero. Lo he comprobado varias veces, y me dá error.
De todas formas, muchas gracias por lo que he aprendido, gracias por el asesorarme que me vea los temarios de Youtube y espero que mas adelante, mis dudas sean más complicadas y no tan básicas.

Lo he comprobado varias veces, y me dá error.

qué error?

Este error de tipeo no pudiste detectar?

Serial,println  ("Alarma");

modificalo por esto

Serial.println("Alarma");

Sin entrar en ninguna tipo de debate, vuelvo a colocar el programa para que alguno, si quiere y puede sería tan amable de ayudarme en concluir mi proyecto. Con joystick en reposo y con Alarma, que no funcione mi coche electrico.

const byte MarchaCa   = 11;  // marcha de carretilla
const byte Paro       = 12;  // paro de carretilla
const byte LEDOpera   = 8;  // objetivo para que funcione esta led encendida
const byte enA        = 9;  //PWM definir las variables de los motores
const byte in1        = 7;
const byte in2        = 6; //PWM
const byte enB        = 10;//PWM
const byte in3        = 5;//PWM
const byte in4        = 4;


#include  <NewPing.h>
#define TRIGGER_PIN  3  //mejor ser PWM
#define ECHO_PIN   2    //mejor ser PWM
#define   MAX_DISTANCE  500   //distancia
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);
     digitalWrite (LEDParoSen,LOW);
     flag = false;
  }
  if (flag)
      control_Joystick();
}

void control_Joystick() {
  unsigned  int distancia;
  joyposVert = analogRead  (joyVert);//estado del joystick
  joyposHori  = analogRead  (joyHori);//estado del joystick

distancia = sonar.ping_cm();

    Serial.println  ("ping:  ");
    Serial.print  (distancia);//convierte el ping a la distancia en cm y el resultado de impresion(0=fuera del ranco de distancia establecido)
    Serial.println    ("cm");

 if (distancia  <10){
  digitalWrite(13,HIGH);
  Serial.println("Alarma");
  }
  else  digitalWrite(13,LOW);
  

  if (joyposVert  < 550) ||(distancia  <=10) { //AQUI NOS QUEDAMOS en reposo en joyposVer AQUI ME DA EL ERROR
 
      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)   { //
      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);
  }
  
}

Gracias de nuevo