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();
}
]
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
}
}
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
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
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".
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
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);
}
}