15-05-2021, 10:57 AM
Buenas, soy Oscar un estudiante de telecomunicaciones, tengo una duda acerca de las subrutinas
Tengo este primer codigo, que hace funcionar un motor para una puerta con dos finales de carrera, mandando la señal de abrir desde un infrarrojos
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int M1 = 8; //Encoje
int M2 = 9; //Estira
int FCA = 10; //Final de carrera abierto
int FCC = 11; //Final de carrera cerrado
int S1 = 12; //Sensor de barrera
int ReceptorIR = 5;
IRrecv irrecv (ReceptorIR);
decode_results Valor;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
if(irrecv.decode(&Valor)){ // es para averiguar el valor del botón 1 y 2
Serial.print("0x");
Serial.println(Valor.value, HEX); // Mostrar en el monitor
switch(Valor.value){
case 0x86C68877: // boton 1
FCA = digitalRead(10);
while(FCA==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA = digitalRead(10);
digitalWrite(8, HIGH); // Abrir la puerta
}
digitalWrite(8, LOW);
delay(5000);
FCC = digitalRead(11);
S1 = digitalRead(12);
while(FCC==1){ // Mientras el Final de carrera de cerrado no este activado o el sensor de barrera se activa, la puerta se cerrara
FCC = digitalRead(11);
digitalWrite(9, HIGH); // Cerrar la puerta
}
digitalWrite(9, LOW);
digitalWrite(8, LOW);
break;
}
delay(50);
irrecv.resume();
}
}
Al intentar englobarlo en subrutinas el codigo anterior, y añadirle un sensor de barrera, no consigo hacer que la subrutina de "cerrar" entre en funcionamiento.
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int FCA_V, FCC_V, S1_V;
const int M1 = 8; //Encoje
const int M2 = 9; //Estira
const int FCA = 10; //Final de carrera abierto
const int FCC = 11; //Final de carrera cerrado
const int S1 = 12; //Sensor de barrera
const int ReceptorIR = 5;
IRrecv irrecv (ReceptorIR);
decode_results Valor;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}
void parar (){
digitalWrite(M2, LOW);
digitalWrite(M1, LOW);
}
void abrir (){
digitalWrite(M1, HIGH); // Abrir la puerta
digitalWrite(M2, LOW);
}
void cerrar (){
digitalWrite(M2, HIGH); // Cerrar la puerta
digitalWrite(M1, LOW); // Cerrar la puerta
S1_V = digitalRead(S1);
FCC_V = digitalRead(FCC);
if(S1_V = HIGH){
parar();
delay(2000);
while(FCA_V==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA_V = digitalRead(FCA);
abrir();
delay(5000);
}
}
}
void loop() {
if(irrecv.decode(&Valor)){ // es para averiguar el valor del botón 1 y 2
Serial.print("0x");
Serial.println(Valor.value, HEX); // Mostrar en el monitor
switch(Valor.value){
case 0x86C68877: // boton 1
FCA_V = digitalRead(FCA);
while(FCA_V==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA_V = digitalRead(FCA);
abrir();
}
digitalWrite(M1, LOW);
delay(5000);
FCC_V = digitalRead(FCC);
S1_V = digitalRead(S1);
while(FCC_V==1){ // Mientras el Final de carrera de cerrado no este activado o el sensor de barrera se activa, la puerta se cerrara
FCC_V = digitalRead(FCC);
cerrar();
}
parar();
break;
}
delay(50);
irrecv.resume();
}
}
¿Alguien me podria echar una mano porfavor? Llevo ya un par de dias mirando y nada
Tengo este primer codigo, que hace funcionar un motor para una puerta con dos finales de carrera, mandando la señal de abrir desde un infrarrojos
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int M1 = 8; //Encoje
int M2 = 9; //Estira
int FCA = 10; //Final de carrera abierto
int FCC = 11; //Final de carrera cerrado
int S1 = 12; //Sensor de barrera
int ReceptorIR = 5;
IRrecv irrecv (ReceptorIR);
decode_results Valor;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
if(irrecv.decode(&Valor)){ // es para averiguar el valor del botón 1 y 2
Serial.print("0x");
Serial.println(Valor.value, HEX); // Mostrar en el monitor
switch(Valor.value){
case 0x86C68877: // boton 1
FCA = digitalRead(10);
while(FCA==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA = digitalRead(10);
digitalWrite(8, HIGH); // Abrir la puerta
}
digitalWrite(8, LOW);
delay(5000);
FCC = digitalRead(11);
S1 = digitalRead(12);
while(FCC==1){ // Mientras el Final de carrera de cerrado no este activado o el sensor de barrera se activa, la puerta se cerrara
FCC = digitalRead(11);
digitalWrite(9, HIGH); // Cerrar la puerta
}
digitalWrite(9, LOW);
digitalWrite(8, LOW);
break;
}
delay(50);
irrecv.resume();
}
}
Al intentar englobarlo en subrutinas el codigo anterior, y añadirle un sensor de barrera, no consigo hacer que la subrutina de "cerrar" entre en funcionamiento.
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int FCA_V, FCC_V, S1_V;
const int M1 = 8; //Encoje
const int M2 = 9; //Estira
const int FCA = 10; //Final de carrera abierto
const int FCC = 11; //Final de carrera cerrado
const int S1 = 12; //Sensor de barrera
const int ReceptorIR = 5;
IRrecv irrecv (ReceptorIR);
decode_results Valor;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
}
void parar (){
digitalWrite(M2, LOW);
digitalWrite(M1, LOW);
}
void abrir (){
digitalWrite(M1, HIGH); // Abrir la puerta
digitalWrite(M2, LOW);
}
void cerrar (){
digitalWrite(M2, HIGH); // Cerrar la puerta
digitalWrite(M1, LOW); // Cerrar la puerta
S1_V = digitalRead(S1);
FCC_V = digitalRead(FCC);
if(S1_V = HIGH){
parar();
delay(2000);
while(FCA_V==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA_V = digitalRead(FCA);
abrir();
delay(5000);
}
}
}
void loop() {
if(irrecv.decode(&Valor)){ // es para averiguar el valor del botón 1 y 2
Serial.print("0x");
Serial.println(Valor.value, HEX); // Mostrar en el monitor
switch(Valor.value){
case 0x86C68877: // boton 1
FCA_V = digitalRead(FCA);
while(FCA_V==1){ // Mientras el Final de carrera de abierto no este activado, la puerta se abrira
FCA_V = digitalRead(FCA);
abrir();
}
digitalWrite(M1, LOW);
delay(5000);
FCC_V = digitalRead(FCC);
S1_V = digitalRead(S1);
while(FCC_V==1){ // Mientras el Final de carrera de cerrado no este activado o el sensor de barrera se activa, la puerta se cerrara
FCC_V = digitalRead(FCC);
cerrar();
}
parar();
break;
}
delay(50);
irrecv.resume();
}
}
¿Alguien me podria echar una mano porfavor? Llevo ya un par de dias mirando y nada