Prueba de luces vehiculo(Solucionado)

Hola a todos, en mi post anterior no se donde poner (Solucionado),gracias.

Hoy estoy intentando poner un buzzer en este codigo pero no sale lo que quiero hacer

Ahora cuando va hacia atras se enciende el led blanco (luz de marcha atras) y apaga el led rojo (luz de freno) y hacia adelante se apague el led rojo (luz de freno) y no encienda nada, pero que funcionen todo los demas, junto con los intermitentes funcionan muy bien hasta aqui,

Pero cuando intento poner el buzzer es donde me atasco y no puedo seguir con mi proyecto
como modificar el codigo.

Quiero hacer esto, cuando valla hacia atras se encienda el led blanco (fijo) y el buzzer (en intermitencia haciendo un Beep-Beep)

gracias y saludos a todos

P.D. no se si he puesto todo el codigo completo pido disculpa pero soy muy novato aqui

[

long valor1;                        //Variable donde almacenaremos el valor del potenciometro
long valor;                          //Variable donde almacenaremos el valor del potenciometro

int ledPin1 = 2;                       //Declaramos los pins de los LEDs
int ledPin2 = 3;                       //Declaramos los pins de los LEDs
const int ledPin3 = 4;              //Declaramos los pins de los LEDs
const int ledPin4 = 5;              //Declaramos los pins de los LEDs
//int buzzer1 = 6;

//--------Intermitente Izquierdo-----------
int ledState = LOW; 
unsigned long previousMillis = 0;     // almacenará la última vez que se actualizó el LED
const long interval = 400;
//--------Intermitente Derecho-------------
int ledState1 = LOW; 
unsigned long previousMillis1 = 0;    // almacenará la última vez que se actualizó el LED
const long interval1 = 400;


void setup() {
  
  pinMode(ledPin1, OUTPUT);        //marcha atras           led Blanco
  pinMode(ledPin2, OUTPUT);        //freno                       led Rojo
  pinMode(ledPin3, OUTPUT);        //intermitente Derecho   led Ambar
  pinMode(ledPin4, OUTPUT);        //intermitente Izquierdo led Ambar
  //pinMode(buzzer1, OUTPUT);
}

void loop() {

  freno();
  intermitente();
  //buzzer();
}
  ]

buzzer.ino (247 Bytes)

freno.ino (456 Bytes)

intermitente.ino (1.04 KB)

prueba_luces.ino (1.27 KB)

Todo tu código lo debes poner entre las etiquetas code y no como adjunto, si quieres facilitar a que mas gente te ayude ya que es molesto no poder ver el código directamente y tener que descargarlo. Edita tu primer mensaje por favor.

Te falta agregar la condición que me imagino es el pulsador en al pin digital. Por ejemplo bocina.

const byte bocina = 10;
void loop(){
   if (digitalRead(bocina)){
      if (analogRead(A0) >= 512 && analogRead(A0) <=767)
          analogWrite(buzzer1,128);        //emite sonido
          delay(500);                              //espera medio segundo
          digitalWrite(buzzer1, LOW);       //deja de emitir
   }
}

Aca tienes como se usa tone() que es la función que reproduce sonidos en el pin que determines.

Tone Library con una explicación extensa pasando por varios tipos de melodías. Esta en inglés pero usando el google translate no tendrás problemas.

y este Tone Ouput Using an Arduino

Mi unico consejo es que no hagas esto

tone(pinX, 400, 200);

// donde le dices que escucharás un tono de 400Hz en el pinX por 200 mseg y luego... le pongas un delay()

Hola, perdon no sabia como ponerlo, creo que ahora se como se pone
gracias por ensenñarme, ahora probare sus codigos
Saludos a todos

long valor1;                        //Variable donde almacenaremos el valor del potenciometro
long valor;                         //Variable donde almacenaremos el valor del potenciometro

int ledPin1 = 2;                    //Declaramos los pins de los LEDs
int ledPin2 = 3;                    //Declaramos los pins de los LEDs
const int ledPin3 = 4;              //Declaramos los pins de los LEDs
const int ledPin4 = 5;              //Declaramos los pins de los LEDs
int buzzer1 = 6;

//--------Intermitente Izquierdo-----------
int ledState = LOW; 
unsigned long previousMillis = 0;     // almacenará la última vez que se actualizó el LED
const long interval = 400;
//--------Intermitente Derecho-------------
int ledState1 = LOW; 
unsigned long previousMillis1 = 0;    // almacenará la última vez que se actualizó el LED
const long interval1 = 400;


void setup() {
  
  pinMode(ledPin1, OUTPUT);        //marcha atras           led Blanco
  pinMode(ledPin2, OUTPUT);        //freno                  led Rojo
  pinMode(ledPin3, OUTPUT);        //intermitente Derecho   led Ambar
  pinMode(ledPin4, OUTPUT);        //intermitente Izquierdo led Ambar
  pinMode(buzzer1, OUTPUT);
}

void loop() {

//  freno();
 // intermitente();
//  buzzer();
  
  //--------buzzer-----------
  void buzzer();
  {    
  valor = analogRead(A0);
   if(valor >= 512 && valor <=767)
 
    analogWrite(buzzer1,128); //emite sonido
     delay(500); //espera medio segundo
     digitalWrite(buzzer1, LOW); //deja de emitir
     delay(500);
}

void freno();
{
valor = analogRead(A0);         // leemos del pin A0 valor
//------Freno y M.Atras----------
  if(valor >= 512 && valor <=767)
    {
  digitalWrite(ledPin1, HIGH);
  digitalWrite(ledPin2, LOW);     
    }  
  if (valor >= 256 && valor <=511)
    {
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, HIGH);
    }
  if (valor >= 0 && valor <=255) 
    {
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
    }
    
}
void intermitente();
{

valor1 = analogRead(A1);        // leemos del pin A1 valor1  

  if(valor1 >= 451 && valor1 <=549)
  {
     digitalWrite(ledPin3, LOW);
     digitalWrite(ledPin4, LOW);
  }
   
//-----Intermitente Derecho-----
  if (valor1 >= 0 && valor1 <=450)
    {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) 
    {    
    previousMillis = currentMillis;    
  if (ledState == LOW)
    {
      ledState = HIGH;
    } 
  else 
    {
      ledState = LOW;
    }
  digitalWrite(ledPin3, ledState);
    }
  digitalWrite(ledPin4, LOW);
    }
    
//-----Intermitente Izquierdo----
  if (valor1 >= 550 && valor1 <=1023)  
    {
  unsigned long currentMillis1 = millis();
  if (currentMillis1 - previousMillis1 >= interval1)
    {    
    previousMillis1 = currentMillis1;    
  if (ledState1 == LOW) 
    {
      ledState1 = HIGH;
    } 
  else 
    {
      ledState1 = LOW;
    }
  digitalWrite(ledPin4, ledState1);
    }
  digitalWrite(ledPin3 , LOW);
    }
}
}

Hola, antes que nada, creo que también deberías de dar mas datos, como por ejemplo: ¿ porque usas potenciometros para encender las luces?
Yo me imagino que es porque usas un control remoto y tomas las lecturas de los potenciometros de las palancas, ya que en el post anterior me dijiste que tienes camiones a escala, ¿pero las demás personas que lean tu post, como lo adivinaran? por lo tanto debes explicar de donde salen esos valores que pones en las condicionales, supongo que cuando mueves la palanca del control hacia atrás quieres activar la luz blanca, simulando una luz de reversa, cuando giras la otra palanca a los lados enciendes las luces direccionales, etc. es por eso que te pido que seas mas claro, detalla con mas claridad el asunto y a que valores equivale la posición de cada potenciometro dando un panorama mas amplio de lo que deseas lograr, recuerda que no estamos a tu lado viendo lo que tu ves

Hola RIG, tienes toda la razon ya que uste sabe de que va porque me ayudo en mi primer post
lo que quiero hacer es una radio control con NRF24l01 y dos Arduinos Mega pro mini
estoy haciendo los codigos por separados para luego pasarlos al NRF24 se trata de poner luces a un
camion, los potenciometros en realidad son joystck, direccion,marcha adelante y atras,rampa o porton trasero. La direccion,marchas,rampa con servo,ya lo tengo, las luces de posiccion,cortas,
largas,y varios aux.tambien, las luces de freno,macha atras,intermitentes,strobo,o luces de policia
tambien, motores DC para simular hidraulicos con L293d, pero ahora estoy en ponerle un Beep-Beep en la marcha atras, las luces y motores se encenderan con inteructores ON-OFF-ON con retorno al centro
exepto los que vallan con los joystick.

Referente a los codigos de KIKE_GL los he probado y no me funciona, y he leido los dos enlaces que me a sugerido surbyte (Tone Library y Tone Ouput Using an Arduino) pero no entiendo nada.
gracias seguire probando con (Tone arduino google) haber si encuentro algo que me sirva

saludos:Francisco

Bien, entonces ¿como encenderás la luz de reversa? con un interruptor o con el potenciometro del joystick? aunque eso da igual para el beep-beep, solo mete la parte del código del buzzer donde enciendes la luz de reversa y listo, Ahh! y quita el delay, tienes que usar millis(),

Lo que te dice @ surbyte es que cambies esto:

analogWrite(buzzer1,128);        //emite sonido

por algo como esto:

tone(buzzer1, 400);  //el segundo parámetro es la frecuencia a la cual se escuchara el sonido

,
ya que si usas analogWrite no cambias la frecuencia si no el ancho de pulso

edito:
Opcional en la función tone(); puedes usar el 3er parametro para determinar el tiempo que quieres que dure el tono, es decir si tienes esto:tone(buzzer1, 400, 200); tendrás un tono de 400Hz en el buzzer1 durante 200 milisegundos

Prueba esto:

int valor1;                        //Variable donde almacenaremos el valor del potenciometro
int  valor;                         //Variable donde almacenaremos el valor del potenciometro

const byte ledPin1 = 2,                    //Declaramos los pins de los LEDs
           ledPin2 = 3,                    //Declaramos los pins de los LEDs
           ledPin3 = 4,              //Declaramos los pins de los LEDs
           ledPin4 = 5,              //Declaramos los pins de los LEDs
           buzzer1 = 6;

//--------Intermitentes-----------
unsigned long previousMillis = 0;     // almacenará la última vez que se actualizó el LED
const unsigned long interval = 400;

unsigned long beep;

//PARA MODIFICAR LA FRECUENCIA Y EL TIEMPO DEL TONO
const int frecuencia=2500;  
const int duracion=500;

void setup() {
  
  pinMode(ledPin1, OUTPUT);        //marcha atras           led Blanco
  pinMode(ledPin2, OUTPUT);        //freno                  led Rojob
  pinMode(ledPin3, OUTPUT);        //intermitente Derecho   led Ambar
  pinMode(ledPin4, OUTPUT);        //intermitente Izquierdo led Ambar
  pinMode(buzzer1, OUTPUT);
}

void loop() {

  freno();
  intermitente();
}


  
void intermitente()
{

valor1 = analogRead(A1);        // leemos del pin A1 valor1  

  if(valor1 >= 451 && valor1 <=549)
  {
     digitalWrite(ledPin3, LOW);
     digitalWrite(ledPin4, LOW);
  }
   
//-----Intermitente Derecho-----
  if (valor1 >= 0 && valor1 <=450)
    {
  
  if (millis() - previousMillis >= interval) 
    {    
    	digitalWrite(ledPin3, !digitalRead(ledPin3));
        previousMillis = millis();    
    }

  digitalWrite(ledPin4, LOW);
    }
    
//-----Intermitente Izquierdo----
  if (valor1 >= 550 && valor1 <=1023)  
    {

  if (millis() - previousMillis >= interval)
    {
    digitalWrite(ledPin4, !digitalRead(ledPin4));    
    previousMillis = millis();
    }
    digitalWrite(ledPin3 , LOW);
    
    }
}

void freno(){
 valor = analogRead(A0);         // leemos del pin A0 valor
//------Freno y M.Atras----------
  if(valor >= 512 && valor <=767){

       if( millis()- beep >= duracion*2){  //multiplico duracion por 2 para que dure el mismo tiempo el tono encendido que apagado
       tone(buzzer1, frecuencia, duracion);
               beep=millis();
        }
      digitalWrite(ledPin1, HIGH);
      digitalWrite(ledPin2, LOW);     
    }

  if (valor >= 256 && valor <=511)
    {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    }
  if (valor >= 0 && valor <=255) 
    {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    }
}

Hice unos cambios a tu código, creo que debe funcionar, mira las modificaciones para que comprendas como funciona, no solo hagas copy-paste y si algo no entiendes solo dilo

Hola RIG, funciona bien el cambio que hizo, pero no me vale, porque el pitido(tono) no hace intermitencia se queda fijo por el tiempo estabecido (duracion = 500) o cambiarlo por 2500 o +
y no se mantiene todo el tiempo que duraria la marcha atras, Me explico cuando yo le de al joystick hacia atras se tiene que encender la luz (led blanco) y encender tambien al mismo tiempo Beep-Beep(tono) la luz
tiene que quedar fija (led blanco) y el Beep-Beep (tono) sonar tipo intermitente por (400)ms encendido y (400)ms apagado, durante todo el tiempo que dure el movimiento de la marcha atras. y cuando el joystck
vuelva al centro (90º) se apague el (led blanco) y el Beep-Beep (tono) y se encienda el freno (led rojo) y hacia adelante tiene que quedar todo apagado, porque las luces frontales (cortas y largas las encendere con interructor ON-OFF-ON con retorno al centro) tipo momentaneo pero se quedaran fijas hasta que yo
vuelva a pulsar el interructor otra vez (encender led y apagar con el mismo boton) pero lo hare con interructores. todas las luces funcionaran con leds del color que pertenezcan Rojo,Blanco,Ambar o Naranja
los servos "G90" y "3003", los motores DC con "L293d" y el motor de potencia del camion con "ESC".

Gracias y saludos

Hola RIG, funciona bien el cambio que hizo, pero no me vale, porque el pitido(tono) no hace intermitencia se queda fijo por el tiempo estabecido (duracion = 500) o cambiarlo por 2500 o +

Acabo de probar la parte del código donde se activa la reversa y funciona sin problema,se escucha bien el beep-beep, incluso como coincidencia se está escuchando en la calle en este momento un camión en reversa y se escucha casi igual.
Esta es la parte del código que acabo de probar:

int valor;
unsigned long beep;
const int duracion=400;    //si quieres que el tono sea mas corto baja este valor
const int frecuencia=2000; //si quieres que se escuche mas agudo sube este valor 
 byte ledPin1=13;       //uso el led del arduino como si fuera la luz blanca de reversa
byte buzzer1=6;
unsigned long impresion;

void setup()
{   Serial.begin(9600);
	pinMode(ledPin1, OUTPUT);
}
void loop()
{    //// PARA VER EN MONITOR SERIAL EL VALOR DEL POTENCIOMETRO////
	if(millis() - impresion >= 500UL){
	    Serial.println(String("el valor del pote es: ") + valor);
	    impresion=millis();
	}
	/////////////////////////////////////////////////////////////


 valor = analogRead(A0);         // leemos del pin A0 valor
//------Freno y M.Atras----------
  if(valor >= 512 && valor <=767){

       if( millis()- beep >= duracion*2){  //multiplico duracion por 2 para que dure el mismo tiempo el tono encendido que apagado
       tone(buzzer1, frecuencia, duracion);
               
               beep=millis();
        }
      digitalWrite(ledPin1, HIGH);
      //digitalWrite(ledPin2, LOW);     
    }
      else 
      digitalWrite(ledPin1,LOW);
}

Puedes ver que agregue la parte para imprimir en el monitor serial el valor del potenciometro, pruebalo, solo ten en cuenta que yo use el pin 13 para representar la luz blanca de reversa y el pin 6 para el buzzer, cambia los pines si es necesario, yo pienso que el problema esta en los valores que tienes en ésta linea   if(valor >= 512 && valor <=767) mira en el monitor serial el valor que te esta dando al mover el joystick hasta reversa para ver si coincide con los valores que tienes en la condicional

Hola RIG, ya funciona como yo quiero,

pero he eliminado estas lineas
//else
//digitalWrite(ledPin2, LOW);

y modificado
if(valor >= 512 && valor <=1023)

antes, if(valor >= 512 && valor <=767)

Todo funciona como yo quiero los intermitentes y macha atras.

Tenias razon en el valor final,
pues al poner el joystick hacia atras a tope me pasaba del valor y no funcionaba, solo funcionaba (hasta 767) y pasado este valor dejaba de funcionar al llevar el valor su tope.

Muchas gracias sr.RIG por su gran ayuda y saludos a todos
(SOLUCIONADO)

El codigo completo ha quedado asin, esto es para futuros interesados.

int valor1;                           //Variable donde almacenaremos el valor del potenciometro
int valor;                             //Variable donde almacenaremos el valor del potenciometro
unsigned long beep;
const int duracion=400;       //si quieres que el tono sea mas corto baja este valor
const int frecuencia=2000;   //si quieres que se escuche mas agudo sube este valor 
const byte ledPin1 = 2,        //Declaramos los pins de los LEDs
           ledPin2 = 3,             //Declaramos los pins de los LEDs
           ledPin3 = 4,             //Declaramos los pins de los LEDs
           ledPin4 = 5,             //Declaramos los pins de los LEDs
           buzzer1 = 6;            //Declaramos el pin del buzzer
unsigned long impresion;

//--------Intermitentes-----------
unsigned long previousMillis = 0;       // almacenará la última vez que se actualizó el LED
const unsigned long interval = 400;   // intervalo de los intermitentes

void setup() {
  
  pinMode(ledPin1, OUTPUT);        //marcha atras           led Blanco
  pinMode(ledPin2, OUTPUT);        //freno                  led Rojob
  pinMode(ledPin3, OUTPUT);        //intermitente Derecho   led Ambar
  pinMode(ledPin4, OUTPUT);        //intermitente Izquierdo led Ambar
  pinMode(buzzer1, OUTPUT);       //buzzer 5v
}

void loop() {

  freno();
  intermitente();
}


  
void intermitente()
{

valor1 = analogRead(A1);             // leemos del pin A1 valor1  

  if(valor1 >= 451 && valor1 <=549)
  {
     digitalWrite(ledPin3, LOW);
     digitalWrite(ledPin4, LOW);
  }
   
//-----Intermitente Derecho-----
  if (valor1 >= 0 && valor1 <=450)
    {
  
  if (millis() - previousMillis >= interval) 
    {    
      digitalWrite(ledPin3, !digitalRead(ledPin3));
        previousMillis = millis();    
    }

  digitalWrite(ledPin4, LOW);
    }
    
//-----Intermitente Izquierdo----
  if (valor1 >= 550 && valor1 <=1023)  
    {

  if (millis() - previousMillis >= interval)
    {
    digitalWrite(ledPin4, !digitalRead(ledPin4));    
    previousMillis = millis();
    }
    digitalWrite(ledPin3 , LOW);
    
    }
}

void freno(){
 
  if(millis() - impresion >= 500UL){
      
      impresion=millis();

  
 valor = analogRead(A0);         // leemos del pin A0 valor
//------Freno y M.Atras----------
  if(valor >= 512 && valor <=1023)
  {

       if( millis()- beep >= duracion*2){  //multiplico duracion por 2 para que dure el mismo tiempo el tono encendido que apagado
       tone(buzzer1, frecuencia, duracion);
               beep=millis();
        }
      digitalWrite(ledPin1, HIGH);
      digitalWrite(ledPin2, LOW);     
    }
     
  }
  if (valor >= 256 && valor <=511)
    {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    }
  if (valor >= 0 && valor <=255) 
    {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    }
}

Muy bien! Me da gusto :slight_smile:

Saludos