Hola soy nuevo en este mundillo que me encanta.
Después de haber hecho varios proyectos con éxito, este se me ha atravesado.
Resulta que hice en el portal de mi garaje una aplicacion para abrir y cerrar el portal desde mi android. Este el el sketch:
int rele =12;
char valor; // variable para indicar que llega una orden
void setup() {
pinMode(rele, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) //si el puerto seria(blutooth) esta disponible
{
valor = Serial.read(); //lee el dato entrante via bluetooth
if (valor =='A') //si el dato que llega es una A
{
digitalWrite(rele,HIGH); // ENCIENDE EL RELE
delay(500);
digitalWrite(rele,LOW);
}
if (valor =='B') //si el dato que llega es una A
{
digitalWrite(rele,LOW); // APAGA EL RELE
}
}
}
Hasta aquí todo bien, pero ahora quiero hacer que pulsando un pulsador, me encienda una luz durante X tiempo y luego que se apague sola. Esto también lo hice y este es el sketch:
int PULSADOR = 5;
int rele2 = 11;
int salidapositivo =13;
void setup() {
pinMode(PULSADOR , INPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele2,LOW);
pinMode(salidapositivo,OUTPUT);
digitalWrite(salidapositivo,HIGH);
}
void loop() {
while(digitalRead(PULSADOR) == LOW);
digitalWrite(rele2, HIGH);
delay(10000); // TIEMPO QUE TARDA EN APAGARSE
digitalWrite(rele2, LOW);
while(digitalRead(PULSADOR) == HIGH);
}
Lo que no doy conseguido es juntar los dos sketch en uno solo, es decir, hacer que los dos corran en el mismo arduino uno.
¿ Es posible ?
Alguien me puede hacer el sketch?
Muchas gracias de antemano.
Lee las normas del foro y edita tu hilo 1. Primero quitando todos los griots. Mayúsculas son gritos en este o cualquier foro. El título también va con minúsculas. 2. Los códigos van con etiquetas, no como texto plano.
Claro solo debes juntar los códigos cada uno en su lugar teniendo en cuenta que solo debe haber un setup() y un solo loop(), algo asi:
int rele = 12;
char valor; //variable para indicar que llega una orden
int PULSADOR = 5;
int rele2 = 11;
int salidapositivo =13;
void setup(){
...
...
}
void loop(){
...
...
}
PD: Tampoco debe haber nombres de variables o pines repetidos entre los dos proyectos.
Hola de nuevo, esto fue lo que hice, pero solo me funciona el pulsador,
lo del movil no:
int rele =12;
int PULSADOR = 5;
int rele2 = 11;
char valor; // variable para indicar que llega una orden
void setup() {
pinMode(rele, OUTPUT);
pinMode(PULSADOR , INPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele2,LOW);
digitalWrite(rele,LOW);
Serial.begin(9600);
}
void loop()
{
while(digitalRead(PULSADOR) == LOW);
digitalWrite(rele2, HIGH);
delay(1000);
digitalWrite(rele2, LOW);
while(digitalRead(PULSADOR) == HIGH);
if (Serial.available()) //si el puerto seria(blutooth) esta disponible
{
valor = Serial.read(); //lee el dato entrante via bluetooth
if (valor =='A') //si el dato que llega es una A
{
digitalWrite(rele,HIGH); // ENCIENDE EL RELE
delay(500);
digitalWrite(rele,LOW);
}
if (valor =='B') //si el dato que llega es una B
{
digitalWrite(rele,LOW); // APAGA EL RELE
{
}
}
}
}
Hola
En realidad no tienes un problema...
Tienes 2. El uso de while() y el uso de delay() que basicamente también es un while()
En esta parte haces un bucle y no sales de ahi
Analiza bien lo que escribiste: básicamente dice mientras el pulsador esta en bajo enciende el relay, espera un segundo sin hacer nada y vuelve a apagar el rele2 y cuando el pulsador esté en alto no hagas nada. Por lo que nunca saldrás de ese bucle y todo lo que esté debajo de ese código nunca se ejecutará.
Y en cuanto a los delay() debes olvidarte de ellos, si quieres que tu código funcione tienes que usar millis(), en la sección se Documentacion encontrarás información sobre ello
Acostumbrate a usar siempre las llaves en lugar correcto:
if (condicion){
.....;
}
while (condicion){
.....;
}
El otro problema es el pulsador produce rebotes. Supongo que el pulsador de pin 5 esta con una resistencia en pullup de 10k verdad ? Si no es asi usa.
pinMode(PULSADOR, INPUT_PULLUP);
Prueba este codigo:
const byte PULSADOR = 5;
const byte rele = 12;
const byte rele2 = 11;
char valor; // variable para indicar que llega una orden
bool actual,anterior;
void setup() {
Serial.begin(9600);
pinMode(PULSADOR, INPUT_PULLUP);
pinMode(rele, OUTPUT);
pinMode(rele2, OUTPUT);
digitalWrite(rele, LOW);
digitalWrite(rele2, LOW);
}
void loop(){
actual = digitalRead(PULSADOR);
if (!actual && anterior){
digitalWrite(rele2, HIGH);
delay(1000);
digitalWrite(rele2, LOW);
}
anterior = actual;
//si el puerto serie (blutooth) recibe algun dato
if (Serial.available()){
valor = Serial.read(); //lee el dato entrante via bluetooth
//si el dato que llega es una A
if (valor == 'A'){
digitalWrite(rele, HIGH); //ENCIENDE EL RELE
delay(500);
digitalWrite(rele, LOW); //APAGA EL RELE
}
//si el dato que llega es una B
if (valor == 'B'){
digitalWrite(rele, LOW); //APAGA EL RELE
}
}
}