Hola, primero dar las gracias de antemano por la ayuda que recibire.
El proyecto, es algo mas de lo que aqui explico, pero para no alargar mucho me centro en el problema.
Estoy usando un arduino mega, y 2 sensores ch-sr04, es mi primer proyecto con arduino y he estado buscando por todo internet toda la informacion que he podido y me he empapado todo lo que he encontrado, con eso he podido resolver varios problemas que me han ido surgiendo, pero con referencia a este no encuentro nada.
Tengo conectado los dos sensores para que en el serial me de la medida de las distancias en cm. Comence conectado un sensor con exito, le añadi control sobre un led RGB que cambia de color segun distancia del sensor, hasta aqui todo correcto.
Primer porblema cuando quiero conectar el segundo sensor este no funciona no da lectura en el serial, despues de mucho leer, lo soluciono con la libreria newping, pero no entiendo nada de nada de librerias y he intentado comprenderla pero no lo consigo se me escapa a mi entendimiento, por lo tanto consigo que funcionen los dos sensores pefctamente pero no se añadir led RGB para que segun distancia ilumine de un cierto color, el problema es que no se como coger los valores del serial para usarlos con los comandos if, he buscado y no he hallado.
Despues lo en intentado sin la libreria y he conseguido que funcionen los dos sensores pero ahora me encuentro con el problema siguiente.
a una distancia de entre 5 y 20 cm los dos sensores funcionan correctamente, pero a partir de esta distancia, el sensor 1 se vuelve un poco mas lento en dar la lectura en el serial, aunque es correcta, pero el sensor 2 deja de dar distancia y solo da un valor 0.
Sketch:
// PINES
#define LEDR1 2
#define LEDG1 3
#define LEDB1 4
#define TIGGER1 5
#define ECHO1 6
//#define TIGGER2 7
#define ECHO2 8
// CONSTANTES
const float umbral1 = 15;
const float umbral2 = 5;
// COMIENZA A MEDIR
void iniciarTigger1()
{
// CAMBIAMOS TIGGER A ALTO
digitalWrite(TIGGER1, HIGH);
delayMicroseconds(10);
// TERMINAMOS CN TIGGER EN BAJO
digitalWrite(TIGGER1, LOW);
}
/*void iniciarTigger2()
{
// INICIAMOS TIGGER BAJO
digitalWrite(TIGGER2, LOW);
delayMicroseconds(5);
// CAMBIAMOS TIGGER A ALTO
digitalWrite(TIGGER2, HIGH);
delayMicroseconds(20);
// COMENZAMOS CON TIGGER EN BAJO
digitalWrite(TIGGER2, LOW);
}*/
//SI POSICION INCORRECTA
void MOTORcorregir() {
LEDrojo();
}
//SI POSICION CORRECTA
void MOTORbajar() {
LEDverde();
}
//SI POSICION BAJA
void MOTORsubir() {
LEDverde();
}
void setup() {
// INICIAR MONITOR SERIE
Serial.begin(9600);
//MODO PINES
pinMode(LEDR1, OUTPUT);
pinMode(LEDG1, OUTPUT);
pinMode(LEDB1, OUTPUT);
pinMode(TIGGER1, OUTPUT);
pinMode(ECHO1, INPUT);
//pinMode(TIGGER2, OUTPUT);
pinMode(ECHO2, INPUT);
//LED EN INICIO COLOR BLANCO
LEDblanco();
// PONEMOS TIGGER EN BAJO
digitalWrite(TIGGER1, LOW);
delayMicroseconds(5);
}
void loop() {
//PREPARAMOS SENSOR
iniciarTigger1();
//iniciarTigger2();
//OBTENEMOS DISTANCA
float distancia1 = calcularDistancia1();
float distancia2 = calcularDistancia2();
//REALIZAMOS LA OPERACION
/*if (distancia1 < umbral1 && distancia1 > umbral2)
{
MOTORcorregir();
}
else if (distancia1 >= umbral1)
{
MOTORbajar();
}
else if (distancia1 <= umbral2)
{
MOTORsubir();
}
delay(100);*/
}
//ENCIENDE LED BLANCO
void LEDblanco()
{
//PONER LED EN BLANCO
analogWrite(LEDR1, 255);
analogWrite(LEDG1, 255);
analogWrite(LEDB1, 255);
}
//ENCIENDE LED VERDE
void LEDverde()
{
//PONER LED EN VERDE
analogWrite(LEDR1, 0);
analogWrite(LEDG1, 250);
analogWrite(LEDB1, 0);
}
//ENCIENDE LED ROJO
void LEDrojo()
{
//PONER LED EN ROJO
analogWrite(LEDR1, 250);
analogWrite(LEDG1, 0);
analogWrite(LEDB1, 0);
}
// CALCULO DE DISTANCIA1
// DEVUELVE UNA VARIABLE FLOAT QUE CONTIENE LA DISTANCIA
float calcularDistancia1()
{
// La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo1 = pulseIn(ECHO1, HIGH);
// Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos
float distancia1 = tiempo1 / 2 / 29;
Serial.print("Sensor1 = ");
Serial.print(distancia1);
Serial.print("cm / ");
}
// CALCULO DE DISTANCIA2
// DEVUELVE UNA VARIABLE FLOAT QUE CONTIENE LA DISTANCIA
float calcularDistancia2()
{
// La función pulseIn obtiene el tiempo que tarda en cambiar entre estados, en este caso a HIGH
unsigned long tiempo2 = pulseIn(ECHO2, HIGH);
// Obtenemos la distancia en cm, hay que convertir el tiempo en segudos ya que está en microsegundos
float distancia2 = tiempo2 / 2 / 29;
Serial.print("Sensor2 = ");
Serial.print(distancia2);
Serial.print("cm");
Serial.println();
delay(500);
}
Hay muchas lineas comentadas, por que son instrucciones que tendre que añadir cuando resuelva el problema que ahora me tiene loco, y algunas por que las he desechado momentaneamente por mejoras del sketch o eso me he creido yo
Bueno espero haberme explicado y si alguien puede guiarme o darme alguna pista de por donde tirar estare muy agradecido, cualquier duda o pregunta do ddeis en comentarme, contestare lo antes posible, gracias y saludos.