Go Down

Topic: Reles (Read 3040 times) previous topic - next topic

surbyte

Si tiene problemas con este código imagina con arrays. 
Que domine esto primero y luego puede pensar en cosas mas complicadas.

Lucario448

Si tiene problemas con este código imagina con arrays.
Que domine esto primero y luego puede pensar en cosas mas complicadas.
Una vez más te doy la razón. Un problema a la vez!

santatu, perdóname si te hice creer que te estaba pidiendo demasiado...   :smiley-sweat:

santatu

No tengo nada que disculpar, solo agradecer la ayuda de todos los que se unen a ayudar a los que no sabemos .
No se si lo he entendido bien pero...... esta tarde lo intentaré a ver que me sale.
Gracias.

santatu

Buenas tardes, no se si sera asi lo que me intentaste explicar pero......... no me va enciende y no parpadea.

Code: [Select]
  debouncer7.update();
     
   if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true;
    }

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;
    if (statusBtn7 && intermitentesActivados) {
       digitalWrite(srele4, estadorele);
       
       Serial.println("Todos activados");
       intermitentesActivados = false;
    }
   
    if (!statusBtn7 && intermitentesActivados) {
       digitalWrite(srele4, LOW);
       
       Serial.println("Todos desactivados");
       intermitentesActivados = false;
    }


También lo he hecho de esta manera e igual el rele se activa pero no parpadea, siento dar tanto la lata pero es que no se en que estoy fallando de verdad.

     
Code: [Select]
debouncer7.update();
     
   if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true; {
    }

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;
   
   digitalWrite(srele4, estadorele);
   }

surbyte

#19
May 11, 2016, 09:10 pm Last Edit: May 11, 2016, 09:12 pm by surbyte
Te falta una llave o lo copiaste mal
Prueba esto
Code: [Select]
debouncer7.update();
     
    if (debouncer7.fell()) {
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true; {
    }

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7) {
    tiempoPrevio = tiempoActual; //Guardamos el instante de tiempo
    estadorele = !estadorele; //Si el led esta encendido lo apagamos y //viceversa
    digitalWrite(srele4, estadorele);
    }


En ambos códigos no pones al final la llave

Code: [Select]
if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)

santatu

Ahora me da este error:

error: expected '}' at end of input

 }

 ^

exit status 1
expected '}' at end of input

Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.

Lo pego entero por si copie mal

Code: [Select]

#include <Bounce2.h>

// Variables estáticas
const byte pinBoton1 = 2;      // Declaramos la variable pin del Botón Posicion
const byte pinBoton2 = 3;      // Declaramos la variable pin del Botón Cruce
const byte pinBoton3 = 4;      // Declaramos la variable pin del Botón larga
const byte pinBoton4 = 5;      // Declaramos la variable pin del Botón intermitente derecho
const byte pinBoton5 = 6;      // Declaramos la variable pin del Botón intermitente izquierdo
const byte pinBoton6 = 7;      // Declaramos la variable pin del Botón limpiaparabrisas
const byte pinBoton7 = 8;      // Declaramos la variable pin del Botón Ventiladores
const byte pinBoton8 = 9;      // Declaramos la variable pin del Botón paro limpiaparabrisas
const byte pinBoton9 = 10;     // Declaramos la variable pin del Botón 4 intermitentes

const byte srele1    = 22;     // Declaramos la variable pin para relé posicion
const byte srele2    = 24;     // Declaramos la variable pin para relé cruce
const byte srele3    = 26;     // Declaramos la variable pin para relé larga
const byte srele4    = 28;     // Declaramos la variable pin para relé intermitente derecho
const byte srele5    = 30;     // Declaramos la variable pin para relé intermitente izquierdo
const byte srele6    = 32;     // Declaramos la variable pin para relé limpaparabrisas
const byte srele7    = 34;     // Declaramos la variable pin para relé ventiladores
 

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();

// Variables dinámicas
bool statusBtn1 = false, statusBtn2 = false, statusBtn3 = false, statusBtn4 = false,
     statusBtn5 = false, statusBtn6 = false, statusBtn7 = false, statusBtn8 = false,
     statusBtn9 = false;
bool posicruceActivados = false;
bool intermitentesActivados = false;
int contador = 0;

int estadorele = LOW;
unsigned long tiempoPrevio = 1;       
const long intervalo = 400;
unsigned long tiempoActual = millis();

void setup() {
  // Inicializa el pin del LED como salida:
  pinMode(srele1, OUTPUT);
  pinMode(srele2, OUTPUT);
  pinMode(srele3, OUTPUT);
  pinMode(srele4, OUTPUT);
  pinMode(srele5, OUTPUT);
  pinMode(srele6, OUTPUT);
  pinMode(srele7, OUTPUT);
 
  // Inicializa el pin del botón como entrada:

  pinMode(pinBoton1, INPUT_PULLUP);
  pinMode(pinBoton2, INPUT_PULLUP);
  pinMode(pinBoton3, INPUT_PULLUP);
  pinMode(pinBoton4, INPUT_PULLUP);
  pinMode(pinBoton5, INPUT_PULLUP);
  pinMode(pinBoton6, INPUT_PULLUP);
  pinMode(pinBoton7, INPUT_PULLUP);
  pinMode(pinBoton8, INPUT_PULLUP);
  pinMode(pinBoton9, INPUT_PULLUP);
  digitalWrite( pinBoton1 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton2 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton3 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton4 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton5 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton6 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton7 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton8 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton9 ,HIGH);   // activar PULL UP interno

  Serial.begin(9600);

  // After setting up the button, setup the Bounce instance :
  debouncer1.attach(pinBoton1);
  debouncer1.interval(20); // interval in ms
  debouncer2.attach(pinBoton2);
  debouncer2.interval(20); // interval in ms
  debouncer3.attach(pinBoton3);
  debouncer3.interval(20); // interval in ms
  debouncer4.attach(pinBoton4);
  debouncer4.interval(20); // interval in ms
  debouncer5.attach(pinBoton5);
  debouncer5.interval(20); // interval in ms
  debouncer6.attach(pinBoton6);
  debouncer6.interval(20); // interval in ms
  debouncer7.attach(pinBoton7);
  debouncer7.interval(20); // interval in ms
  debouncer8.attach(pinBoton8);
  debouncer8.interval(20); // interval in ms
  debouncer9.attach(pinBoton9);
  debouncer9.interval(20); // interval in ms
}

void loop(){

    // Update the Bounce instance :
    debouncer1.update();

    // Chequea si el botón está pulsado:
    if (debouncer1.fell()) {
       
       statusBtn1 = !statusBtn1;
       Serial.print("Status Btn1:");
       Serial.print(statusBtn1);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn1 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn1 && posicruceActivados) {
       digitalWrite(srele1, LOW);
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }

   // Update the Bounce instance :
    debouncer2.update();

    // Chequea si el botón está pulsado:
    if (debouncer2.fell()) {
       
       statusBtn2 = !statusBtn2;
       Serial.print("Status Btn2:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn2 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn2 && posicruceActivados) {
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }
 // Update the Bounce instance :
    debouncer3.update();

    // Chequea si el botón está pulsado:
    if (debouncer3.fell()) {
       
       statusBtn3 = !statusBtn3;
       Serial.print("Status Btn3:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn3 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       digitalWrite(srele3, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn3 && posicruceActivados) {
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }
   
   
    debouncer4.update();
    // Chequea si el botón está pulsado:
    if (debouncer4.fell()) {
       statusBtn4 = !statusBtn4;
       Serial.print("Status Btn4:");
       Serial.println(statusBtn4);

       if (statusBtn4)
          digitalWrite(srele4, HIGH);
       else
          digitalWrite(srele4, LOW);
          estadorele = !estadorele;
    }
   
    debouncer5.update();
    // Chequea si el botón está pulsado:
    if (debouncer5.fell()) {
       statusBtn5 = !statusBtn5;
       Serial.print("Status Btn5:");
       Serial.println(statusBtn5);

       if (statusBtn5)
          digitalWrite(srele5, HIGH);
       else
          digitalWrite(srele5, LOW);
    }
    debouncer6.update();
    // Chequea si el botón está pulsado:
    if (debouncer6.fell()) {
       statusBtn6 = !statusBtn6;
       Serial.print("Status Btn6:");
       Serial.println(statusBtn6);

       if (statusBtn6)
          digitalWrite(srele6, HIGH);
       else
          digitalWrite(srele6, LOW);
    }

     debouncer7.update();
     
   if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true; {
    }

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;
   
   digitalWrite(srele4, estadorele);
   }

}

surbyte

#21
May 11, 2016, 09:29 pm Last Edit: May 11, 2016, 09:39 pm by surbyte
Lo que tu copiaste, yo lo pegué en mi IDE y compila.
0 error

Tu posible error
Code: [Select]

    if (debouncer7.fell()) {
      
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true; {  // <===== ERROR LLAVE DE MAS
    }

Este código compila, te he emprolijado algunas cosas mínimas
Code: [Select]

#include <Bounce2.h>

// Variables estáticas
const byte pinBoton1 = 2;      // Declaramos la variable pin del Botón Posicion
const byte pinBoton2 = 3;      // Declaramos la variable pin del Botón Cruce
const byte pinBoton3 = 4;      // Declaramos la variable pin del Botón larga
const byte pinBoton4 = 5;      // Declaramos la variable pin del Botón intermitente derecho
const byte pinBoton5 = 6;      // Declaramos la variable pin del Botón intermitente izquierdo
const byte pinBoton6 = 7;      // Declaramos la variable pin del Botón limpiaparabrisas
const byte pinBoton7 = 8;      // Declaramos la variable pin del Botón Ventiladores
const byte pinBoton8 = 9;      // Declaramos la variable pin del Botón paro limpiaparabrisas
const byte pinBoton9 = 10;     // Declaramos la variable pin del Botón 4 intermitentes

const byte srele1    = 22;     // Declaramos la variable pin para relé posicion
const byte srele2    = 24;     // Declaramos la variable pin para relé cruce
const byte srele3    = 26;     // Declaramos la variable pin para relé larga
const byte srele4    = 28;     // Declaramos la variable pin para relé intermitente derecho
const byte srele5    = 30;     // Declaramos la variable pin para relé intermitente izquierdo
const byte srele6    = 32;     // Declaramos la variable pin para relé limpaparabrisas
const byte srele7    = 34;     // Declaramos la variable pin para relé ventiladores
 

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();

// Variables dinámicas
bool statusBtn1 = false, statusBtn2 = false, statusBtn3 = false, statusBtn4 = false,
     statusBtn5 = false, statusBtn6 = false, statusBtn7 = false, statusBtn8 = false,
     statusBtn9 = false;
bool posicruceActivados = false;
bool intermitentesActivados = false;
int contador = 0;

int estadorele = LOW;
unsigned long tiempoPrevio = 1;       
const long intervalo = 400;
unsigned long tiempoActual = millis();

void setup() {
  // Inicializa el pin del LED como salida:
  pinMode(srele1, OUTPUT);
  pinMode(srele2, OUTPUT);
  pinMode(srele3, OUTPUT);
  pinMode(srele4, OUTPUT);
  pinMode(srele5, OUTPUT);
  pinMode(srele6, OUTPUT);
  pinMode(srele7, OUTPUT);
 
  // Inicializa el pin del botón como entrada:

  pinMode(pinBoton1, INPUT_PULLUP);
  pinMode(pinBoton2, INPUT_PULLUP);
  pinMode(pinBoton3, INPUT_PULLUP);
  pinMode(pinBoton4, INPUT_PULLUP);
  pinMode(pinBoton5, INPUT_PULLUP);
  pinMode(pinBoton6, INPUT_PULLUP);
  pinMode(pinBoton7, INPUT_PULLUP);
  pinMode(pinBoton8, INPUT_PULLUP);
  pinMode(pinBoton9, INPUT_PULLUP);
  digitalWrite( pinBoton1 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton2 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton3 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton4 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton5 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton6 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton7 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton8 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton9 ,HIGH);   // activar PULL UP interno

  Serial.begin(9600);

  // After setting up the button, setup the Bounce instance :
  debouncer1.attach(pinBoton1);
  debouncer1.interval(20); // interval in ms
  debouncer2.attach(pinBoton2);
  debouncer2.interval(20); // interval in ms
  debouncer3.attach(pinBoton3);
  debouncer3.interval(20); // interval in ms
  debouncer4.attach(pinBoton4);
  debouncer4.interval(20); // interval in ms
  debouncer5.attach(pinBoton5);
  debouncer5.interval(20); // interval in ms
  debouncer6.attach(pinBoton6);
  debouncer6.interval(20); // interval in ms
  debouncer7.attach(pinBoton7);
  debouncer7.interval(20); // interval in ms
  debouncer8.attach(pinBoton8);
  debouncer8.interval(20); // interval in ms
  debouncer9.attach(pinBoton9);
  debouncer9.interval(20); // interval in ms
}

void loop(){

    // Update the Bounce instance :
    debouncer1.update();

    // Chequea si el botón está pulsado:
    if (debouncer1.fell()) {
       
       statusBtn1 = !statusBtn1;
       Serial.print("Status Btn1:");
       Serial.print(statusBtn1);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
    if (posicruceActivados) {
        if (statusBtn1 ) {
           digitalWrite(srele1, HIGH);
           Serial.println("Todos activados");         
        }
        else {
           digitalWrite(srele1, LOW);
           digitalWrite(srele2, LOW);
           digitalWrite(srele3, LOW);         
           Serial.println("Todos desactivados");
        }
        posicruceActivados = false;
    }

   // Update the Bounce instance :
    debouncer2.update();

    // Chequea si el botón está pulsado:
    if (debouncer2.fell()) {
       
       statusBtn2 = !statusBtn2;
       Serial.print("Status Btn2:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
    if (posicruceActivados) {
        if (statusBtn2 ) {
           digitalWrite(srele1, HIGH);
           digitalWrite(srele2, HIGH);
           Serial.println("Todos activados");
        }
        else {
           digitalWrite(srele2, LOW);
           digitalWrite(srele3, LOW);
           Serial.println("Todos desactivados");
           posicruceActivados = false;
        }
    }

    // Update the Bounce instance :
    debouncer3.update();

    // Chequea si el botón está pulsado:
    if (debouncer3.fell()) {
       
       statusBtn3 = !statusBtn3;
       Serial.print("Status Btn3:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
    if (posicruceActivados) {
        if (statusBtn3 ) {
           digitalWrite(srele1, HIGH);
           digitalWrite(srele2, HIGH);
           digitalWrite(srele3, HIGH);
           
           Serial.println("Todos activados");
        }
        else {
           digitalWrite(srele3, LOW);
           Serial.println("Todos desactivados");
        }
       posicruceActivados = false;
    }
   
   
    debouncer4.update();
    // Chequea si el botón está pulsado:
    if (debouncer4.fell()) {
       statusBtn4 = !statusBtn4;
       Serial.print("Status Btn4:");
       Serial.println(statusBtn4);

       if (statusBtn4)
          digitalWrite(srele4, HIGH);
       else
          digitalWrite(srele4, LOW);
          estadorele = !estadorele;
    }
   
    debouncer5.update();
    // Chequea si el botón está pulsado:
    if (debouncer5.fell()) {
       statusBtn5 = !statusBtn5;
       Serial.print("Status Btn5:");
       Serial.println(statusBtn5);

       if (statusBtn5)
          digitalWrite(srele5, HIGH);
       else
          digitalWrite(srele5, LOW);
    }
    debouncer6.update();
    // Chequea si el botón está pulsado:
    if (debouncer6.fell()) {
       statusBtn6 = !statusBtn6;
       Serial.print("Status Btn6:");
       Serial.println(statusBtn6);

       if (statusBtn6)
          digitalWrite(srele6, HIGH);
       else
          digitalWrite(srele6, LOW);
    }

    debouncer7.update();
     
    if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       intermitentesActivados = true;
    }

    // Si la diferencia es mayor que el intervalo de
    // tiempo de parpadeo es cuando actualizamos el //estado del led
    if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7) {
        //Guardamos el instante de tiempo
        tiempoPrevio = tiempoActual;
        //Si el led esta encendido lo apagamos y //viceversa
        estadorele = !estadorele;
       
        digitalWrite(srele4, estadorele);
    }
}


Esta mas claro asi. Al menos para mi.

Lucario448

#22
May 11, 2016, 09:41 pm Last Edit: May 11, 2016, 09:42 pm by Lucario448
Estos son los errores que he encontrado hasta ahora:
Code: [Select]

if (debouncer7.fell()) {

    statusBtn7 = !statusBtn7;
    Serial.print("Status Btn7:");
    Serial.print(statusBtn7);
    Serial.print("cuenta:");
    Serial.println(contador++);
    intermitentesActivados = true; // { <---- Esto no debe ir aquí
    }

    //Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
    if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7) { // Faltaba esta "llave"
      //Guardamos el instante de tiempo
      tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;

    digitalWrite(srele4, estadorele);
  }


Deberas esto no provoca error de compilación?
Code: [Select]

if (statusBtn6)
      digitalWrite(srele6, HIGH);
    else
      digitalWrite(srele6, LOW);

Digo, no se supone que le faltan las "llaves"?

santatu

Creo haber hecho lo que me han dicho no da ningún error todo es correcto, pero el botón 7 activa el rele 4 igual sin parpadeo.


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

// Variables estáticas
const byte pinBoton1 = 2;      // Declaramos la variable pin del Botón Posicion
const byte pinBoton2 = 3;      // Declaramos la variable pin del Botón Cruce
const byte pinBoton3 = 4;      // Declaramos la variable pin del Botón larga
const byte pinBoton4 = 5;      // Declaramos la variable pin del Botón intermitente derecho
const byte pinBoton5 = 6;      // Declaramos la variable pin del Botón intermitente izquierdo
const byte pinBoton6 = 7;      // Declaramos la variable pin del Botón limpiaparabrisas
const byte pinBoton7 = 8;      // Declaramos la variable pin del Botón Ventiladores
const byte pinBoton8 = 9;      // Declaramos la variable pin del Botón paro limpiaparabrisas
const byte pinBoton9 = 10;     // Declaramos la variable pin del Botón 4 intermitentes

const byte srele1    = 22;     // Declaramos la variable pin para relé posicion
const byte srele2    = 24;     // Declaramos la variable pin para relé cruce
const byte srele3    = 26;     // Declaramos la variable pin para relé larga
const byte srele4    = 28;     // Declaramos la variable pin para relé intermitente derecho
const byte srele5    = 30;     // Declaramos la variable pin para relé intermitente izquierdo
const byte srele6    = 32;     // Declaramos la variable pin para relé limpaparabrisas
const byte srele7    = 34;     // Declaramos la variable pin para relé ventiladores
 

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
Bounce debouncer4 = Bounce();
Bounce debouncer5 = Bounce();
Bounce debouncer6 = Bounce();
Bounce debouncer7 = Bounce();
Bounce debouncer8 = Bounce();
Bounce debouncer9 = Bounce();

// Variables dinámicas
bool statusBtn1 = false, statusBtn2 = false, statusBtn3 = false, statusBtn4 = false,
     statusBtn5 = false, statusBtn6 = false, statusBtn7 = false, statusBtn8 = false,
     statusBtn9 = false;
bool posicruceActivados = false;
bool intermitentesActivados = false;
int contador = 0;

int estadorele = LOW;
unsigned long tiempoPrevio = 1;       
const long intervalo = 400;
unsigned long tiempoActual = millis();

void setup() {
  // Inicializa el pin del LED como salida:
  pinMode(srele1, OUTPUT);
  pinMode(srele2, OUTPUT);
  pinMode(srele3, OUTPUT);
  pinMode(srele4, OUTPUT);
  pinMode(srele5, OUTPUT);
  pinMode(srele6, OUTPUT);
  pinMode(srele7, OUTPUT);
 
  // Inicializa el pin del botón como entrada:

  pinMode(pinBoton1, INPUT_PULLUP);
  pinMode(pinBoton2, INPUT_PULLUP);
  pinMode(pinBoton3, INPUT_PULLUP);
  pinMode(pinBoton4, INPUT_PULLUP);
  pinMode(pinBoton5, INPUT_PULLUP);
  pinMode(pinBoton6, INPUT_PULLUP);
  pinMode(pinBoton7, INPUT_PULLUP);
  pinMode(pinBoton8, INPUT_PULLUP);
  pinMode(pinBoton9, INPUT_PULLUP);
  digitalWrite( pinBoton1 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton2 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton3 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton4 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton5 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton6 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton7 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton8 ,HIGH);   // activar PULL UP interno
  digitalWrite( pinBoton9 ,HIGH);   // activar PULL UP interno

  Serial.begin(9600);

  // After setting up the button, setup the Bounce instance :
  debouncer1.attach(pinBoton1);
  debouncer1.interval(20); // interval in ms
  debouncer2.attach(pinBoton2);
  debouncer2.interval(20); // interval in ms
  debouncer3.attach(pinBoton3);
  debouncer3.interval(20); // interval in ms
  debouncer4.attach(pinBoton4);
  debouncer4.interval(20); // interval in ms
  debouncer5.attach(pinBoton5);
  debouncer5.interval(20); // interval in ms
  debouncer6.attach(pinBoton6);
  debouncer6.interval(20); // interval in ms
  debouncer7.attach(pinBoton7);
  debouncer7.interval(20); // interval in ms
  debouncer8.attach(pinBoton8);
  debouncer8.interval(20); // interval in ms
  debouncer9.attach(pinBoton9);
  debouncer9.interval(20); // interval in ms
}

void loop(){

    // Update the Bounce instance :
    debouncer1.update();

    // Chequea si el botón está pulsado:
    if (debouncer1.fell()) {
       
       statusBtn1 = !statusBtn1;
       Serial.print("Status Btn1:");
       Serial.print(statusBtn1);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn1 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn1 && posicruceActivados) {
       digitalWrite(srele1, LOW);
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }

   // Update the Bounce instance :
    debouncer2.update();

    // Chequea si el botón está pulsado:
    if (debouncer2.fell()) {
       
       statusBtn2 = !statusBtn2;
       Serial.print("Status Btn2:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn2 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn2 && posicruceActivados) {
       digitalWrite(srele2, LOW);
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }
 // Update the Bounce instance :
    debouncer3.update();

    // Chequea si el botón está pulsado:
    if (debouncer3.fell()) {
       
       statusBtn3 = !statusBtn3;
       Serial.print("Status Btn3:");
       Serial.print(statusBtn2);
       Serial.print("cuenta:");
       Serial.println(contador++);
       posicruceActivados = true;   
    }
   
   
    if (statusBtn3 && posicruceActivados) {
       digitalWrite(srele1, HIGH);
       digitalWrite(srele2, HIGH);
       digitalWrite(srele3, HIGH);
       
       Serial.println("Todos activados");
       posicruceActivados = false;
    }
   
    if (!statusBtn3 && posicruceActivados) {
       digitalWrite(srele3, LOW);
       
       Serial.println("Todos desactivados");
       posicruceActivados = false;
    }
   
   
    debouncer4.update();
    // Chequea si el botón está pulsado:
    if (debouncer4.fell()) {
       statusBtn4 = !statusBtn4;
       Serial.print("Status Btn4:");
       Serial.println(statusBtn4);

       if (statusBtn4)
          digitalWrite(srele4, HIGH);
       else
          digitalWrite(srele4, LOW);
          estadorele = !estadorele;
    }
   
    debouncer5.update();
    // Chequea si el botón está pulsado:
    if (debouncer5.fell()) {
       statusBtn5 = !statusBtn5;
       Serial.print("Status Btn5:");
       Serial.println(statusBtn5);

       if (statusBtn5)
          digitalWrite(srele5, HIGH);
       else
          digitalWrite(srele5, LOW);
    }
    debouncer6.update();
    // Chequea si el botón está pulsado:
    if (debouncer6.fell()) {
       statusBtn6 = !statusBtn6;
       Serial.print("Status Btn6:");
       Serial.println(statusBtn6);

       if (statusBtn6)
          digitalWrite(srele6, HIGH);
       else
          digitalWrite(srele6, LOW);
    }

     debouncer7.update();
     
   if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;
   
   digitalWrite(srele4, estadorele);
   }
}

santatu

De ninguna manera lo consigo.
y un cosa que al igual tiene algo que ver antes lo cargaba así y el rele parpadeaba siempre

Code: [Select]
debouncer7.update();
     
   if (debouncer7.fell()) {
       
       statusBtn7 = !statusBtn7;
       Serial.print("Status Btn7:");
       Serial.print(statusBtn7);
       Serial.print("cuenta:");
       Serial.println(contador++);
       

//Si la diferencia es mayor que el intervalo de //tiempo de parpadeo es cuando actualizamos el //estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;
   
   }
    digitalWrite(srele4, estadorele);


ahora ni eso.

Lucario448

Primero, no es buena idea inicializar una variable global con una función (eso se hace sólo en el setup o a menos de que sea un "objeto")
Code: [Select]

// Corrección en la línea 44
unsigned long tiempoActual = millis(); // Mal
unsigned long tiempoActual = 0; // Bien


Segundo: olvidaste actualizar tiempoActual
Code: [Select]

tiempoActual = millis(); // Esto faltó
//Si la diferencia es mayor que el intervalo de tiempo de parpadeo es cuando actualizamos el
//estado del led
    if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7) {
      //Guardamos el instante de tiempo
      tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;

    digitalWrite(srele4, estadorele);
    }


Tercero: separa el chequeo del botón 7 con la parte del parpadeo y agrega algo más:
Code: [Select]

if (debouncer7.fell()) {

    statusBtn7 = !statusBtn7;
    Serial.print("Status Btn7:");
    Serial.print(statusBtn7);
    Serial.print("cuenta:");
    Serial.println(contador++);
    if (!statusBtn7) { // Si el "statusBtn7" debería apagar
      estadorele = false; // Reportar a "estadorele" que este está apagado
      digitalWrite(srele4, LOW); // Apagarlo de una vez
    }
    // Esta parte se agrega para evitar que el aparato quede fijamente encendido cuando no debiera
  }

  tiempoActual = millis();
//Si la diferencia es mayor que el intervalo de tiempo de parpadeo es cuando actualizamos el
//estado del led
  if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7) {
    //Guardamos el instante de tiempo
    tiempoPrevio = tiempoActual;
    //Si el led esta encendido lo apagamos y //viceversa
    estadorele = !estadorele;

    digitalWrite(srele4, estadorele);
  }

surbyte

Porque copias y copias y copias el mismo código MALO
esto esta mal, porque le falta la llave al final

Code: [Select]
if ((tiempoActual - tiempoPrevio >= intervalo) && statusBtn7)
solo ejecuta 

Code: [Select]
 tiempoPrevio = tiempoActual;
cada vez que se cumple el intervalo.
Entonces debes sumar una llave al final y cerrarla como yo te indiqué. 
AHora LUcario te muestra el mismo error.


santatu

Ahora si entiendo ok.
Gracias a los dos por la ayuda prestada de verdad.
pero aprovecho para hacer una pregunta ya que busco por internet y lo que he encontrado son tutoriales y tutoriales en los que por lo menos yo no aprendo, lo poco que se (que no es mucho) lo he ido pillando a trozos.
Donde vivo no hay absolutamente nada relacionado con esta programación, hay algun curso, clase..... que pueda comprar y donde aprenda de verdad?
Saludos.

surbyte

Pero mira los cursos que hay en Documentación. Los dos primeros hilos.

santatu

Gracias a todos por vuestra ayuda.
Ya esta probado y funciona todo genial.
Encantado de haber pasado por este foro.
Saludos.

Por si alguien necesita algo parecido debajo lo dejo.

He realizado este trabajo porque mi coche el mando de luces es por CAN BUS y cuesta una pasta, ahora colocaré una pequeña placa con unos botones para activar la luces, intermitentes, limpiaparabrisas.......


Go Up