Go Down

Topic: mi codigo no ejecuta bien el modulo de radio frecuencia para controlar el motor  (Read 169 times) previous topic - next topic

pit_floyd

hola buenas estaba haciendo un motor controlado por radio frecuencia para abrir y cerrar una cerradura pero el codigo no esta bien escrito no se lo que falla aqui esta el codigo

Code: [Select]
#include <RCSwitch.h>



RCSwitch mySwitch = RCSwitch();

const int enPin = 5; // PWM se conecta al pin 1 del puente-H
 
const int in1Pin = 7; // Entrada 2 del puente-H
 
const int in2Pin = 4; // Entrada 7 del puente-H
 
 
 
void setup() {
 
 
 
 
pinMode(in1Pin, OUTPUT);
 
pinMode(in2Pin, OUTPUT);
 
mySwitch.enableReceive(0);
 
}
 
 
 
void loop() {
  if (mySwitch.available(){
    long  int value = mySwitch.getReceivedValue();
    int speed = 255;
    analogWrite(enPin, speed);
   if( value == 8069800 || 7133592 || 13189800 || 11397288)
        {
          digitalWrite(in1Pin,HIGH);
          digitalWrite(in2Pin,LOW);
          delay(6500);
     mySwitch.resetAvailable();

          
 
    }
  
    
 
     if( value == 8069796 || 7133588 || 13189796  || 11397284) {
 
      digitalWrite(in1Pin,LOW);
      digitalWrite(in2Pin,HIGH);
      delay(6000);
    mySwitch.resetAvailable();
 
    }
  }
          
      

 
  }
 

pues el codigo queda como en bucle y el motro empieza a hacerlo pero pasandose el if por los cojones
PD:el motor esta controlado por un l293d

ayuda porfavor

surbyte

Porque una simple consulta de Software la postean en la Sección Proyectos?

Hay que leer las normas del cada foro antes de postear, no solo llegar y que me evacúen la duda!!

Movido a Software.

arduin01

El fallo está en el modo en el que has usado el operador || en las condiciones de los condicionales if, en estas líneas:
Code: [Select]
if( value == 8069800 || 7133592 || 13189800 || 11397288) {
if( value == 8069796 || 7133588 || 13189796  || 11397284) {

Para explicarlo mejor, lo simplifico. Si tienes este código:
Code: [Select]
if (value == 1 || 2) { ... }
No estás diciendo que quieres que se ejecute cuando "value" sea igual a 1 o a 2, sino que o bien la variable "value" es igual a 1, o bien el número 2 es verdadero (o sea, igual a "true"). Y cualquier número mayor que 0 se interpreta como verdadero, ¡por lo que la condición siempre es verdadera! Así pues, para arreglar tu código, tienes que poner "value ==" en todas las condiciones:
Code: [Select]
if (value == 8069800 || value == 7133592 || value == 13189800 || value == 11397288)
if (value == 8069796 || value == 7133588 || value == 13189796 || value == 11397284)
"Hay 10 tipos de personas en el mundo: las que saben binario y las que no." -- Anónimo
"There are 10 types of people in the world: those who know binary and those who don't." -- Anonymous


surbyte

Seguramente entra en bucle pero cuando se le da la gana mira esto

Code: [Select]
delay(6500);

con estas cosas tu debes esperar 6.5 segundos cada vez que se permite una entrada.
Aprende a  no usar delay() porque solo te complica la vida.
Usa millis(). La transición puede no ser fácil pero es el modo de programar bien.

pit_floyd

okey, apartir de ahora lo tendre en cuenta aver si asi ya no entra en bucle

Go Up