Modulo RF 433Mhz

Buenos días, yo estoy realizando un proyecto con el modulo Rf 433Mhz, este controlara el prendido y el apagado de 4 lámparas. este proyecto debe ser programado por un arduino nano, cuando se oprime el botón, el modulo rf enviara la señal al arduino y después este pasara al relé para asi prender la lámpara, pero cuando trato se demora mucho y a veces no sirve. lo que deseo saber es que si mis conexiones estan bien, la alimentación. Las resistencias son de 10K, el transistor que estoy usando es el BC547 y los relé son de 5V y yo también estoy usando un led para probar que si funciona el circuito al final del relé.
Muchas Gracias


// Led del pin soldado en placa arduino
const byte ledPin = 13;
 
// Conexion de verify tx: (PIN3 --> INT1)
const byte vtRem = 3;
const byte vtRemInt = 1;
 
// Conexion de entradas A B C D
const byte keyB_D = 4;
const byte keyB_C = 5;
const byte keyB_B = 6;
const byte keyB_A = 7;
 
// Conexion de Leds A B C D
const byte ledA = 8;
const byte ledB = 9;
const byte ledC = 10;
const byte ledD = 11;
 
// Estado de cada Led inicializados a OFF.
boolean statusLedA = false;
boolean statusLedB = false;
boolean statusLedC = false;
boolean statusLedD = false;
 
void setup() {
  // Configuracion de Leds como salidas.
  pinMode(ledPin, OUTPUT);
  pinMode(ledA, OUTPUT);
  pinMode(ledB, OUTPUT);
  pinMode(ledC, OUTPUT);
  pinMode(ledD, OUTPUT);
 
  // Configuracion de teclas como entradas.
  pinMode(keyB_A, INPUT);
  pinMode(keyB_B, INPUT);
  pinMode(keyB_C, INPUT);
  pinMode(keyB_D, INPUT);
  // Activamos el PULL-UP de Verify Tx para tener más estabilidad.
  pinMode(vtRem, INPUT_PULLUP);
 
  // Activamos la interrupción (Ya podemos leer el mando)
  attachInterrupt(vtRemInt, keyBRead, RISING);
}
 
void loop() {
  // El Led soldado en placa está apagado mientras no se pulsa ningún botón.
  digitalWrite(ledPin, LOW);
}
 
//Rutina de interrupcion para leer el teclado
void keyBRead() {
 
  // Deshabilitamos las interrupciones para evitar que el usuario vuelva a pulsar antes de que de tiempo a leer el teclado.
  noInterrupts();
  // Encendemos el LED de la placa arduino para mostrar al usuario que se ha recibido algo.
  digitalWrite(ledPin, HIGH);
 
  // Si tenemos estado ALTO en el pin de la tecla A, significa que esta se ha pulsado, si no, pasamos a comprobar B y asi sucesivamente.
  if(digitalRead(keyB_A) == HIGH){
  // En este caso que hemos recibido A, conmutamos el valor del led A
  statusLedA = !statusLedA;
  digitalWrite(ledA, statusLedA);
  }
  
  if(digitalRead(keyB_B)== HIGH){
  statusLedB = !statusLedB;
  digitalWrite(ledB, statusLedB);
  }
 
  if(digitalRead(keyB_C)== HIGH){
  statusLedC = !statusLedC;
  digitalWrite(ledC, statusLedC);
  }
 
  if(digitalRead(keyB_D)== HIGH){
  statusLedD = !statusLedD;
  digitalWrite(ledD, statusLedD);
  }
  
  delay(250);
  interrupts();

}
[/code ]

No puedes usar delay() dentro de una rutina de servicio de interrupción.

La rutina de interrupción tiene que ser lo más corta y rápida posible.

La interrupción tienes que usarla para setear una variable que te avise que se pulsó el botón, todo lo demás se hace en el loop() o en una función a tal fin.

Es más lógico desactivar tu interrupción con detachInterrupt() y luego cuando sea oportuno volver a activarla con attachInterrupt() que deshabilitar/habilitar todas las interrupciones con noInterrupts()/interrupts().

Saludos

Moderador:
Por favor, lee las Normas del foro y edita tu titulo retirando "Necesito ayuda..."
El foro es de ayuda asi que desde el momento que posteas ya implica lo que pides.
Lee el punto 5 de las normas y verás que se trata de un titulo que las normas califican de inútil. Simplifica la idea.

muchas gracias, ahora tengo una inquietud con la alimentación del circuito. yo tengo planeado alimentar el arduino por el Vin con un cargador de 5V 2A y que este también alimentar la parte de los 4 Relé, el modulo Rf quiero alimentarlo con el pin de 5V, eso esta bien?

También tengo una inquietud es que como se puede ver al final hay un led que me indicara cuando esta activado el relé, este funcionara bien cuando se quiera usar en una fuente DC pero si quiere usar una lámpara y que se conecte 110Vac, este led no funcionara? debo cambiar la ubicación del Led?

No. Al menos debes usar 7V.

Eso si. Los relés con 5V. Cuando son mas que dos nunca los alimentas con los 5V del Arduino.

Coloca el led en Paralelo con la bobina del rele. De ese modo accionas la bobina y accionas el LED.
Debes colocar una R de al menos 330 a 470 ohms.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.