IF entra siempre, no me hace caso.

Hola, tengo un problema con un IF

la condición es que el pin 3 esté LOW.
El problema es que entra siempre en el IF no importa el estado del pin 3.

(he añadido unas lineas para que me escriba en pantalla el estado del pin 3 antes de entrar al IF y ahí se ve que la condición a veces la cumple y otras no, pero siempre entra en el bucle)

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
byte bomba[8] = {
  B00000010,
  B00000100,
  B00000100,
  B00001110,
  B00011111,
  B00011111,
  B00011111,
  B00001110,
};
int i;
int time;
const int pin2 = 2;
const int pin3 = 3;
int inicio;
int rapido;

void setup() {
  Serial.begin(9600);
  lcd.createChar(0, bomba);
  lcd.begin(16, 2);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  lcd.setCursor(3, 0);
  lcd.print("PROTOTIPO");
  lcd.setCursor(5, 1);
  lcd.print("BOMBA");

}

void loop() {
  time = 2000;
  inicio = 0;
  inicio = digitalRead(pin2);
  rapido = 0;
  rapido = digitalRead(pin3);

  if (inicio == 1)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.write(byte (0));
    lcd.print(" Cuenta atras");

    for (i = 9; i >= 0; i--)
    {
      lcd.setCursor(0, 1);
      lcd.print(int (i));
      //////////////////////////////////
      ////////// problema ////////////
      /////////////////////////////////
      rapido = digitalRead(pin3);
      Serial.println(rapido);
      if (rapido == 0);
      {
        Serial.println("xxxxx");
        //time = 500;
      }
      delay(time);

    }


    lcd.home();
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.write(byte(0));
    lcd.setCursor(4, 1);
    lcd.print("BOOOOOOM");
    lcd.setCursor(15, 1);
    lcd.write(byte(0));

    delay(2000);
    lcd.clear();
  }
}

Tienes un ";" que no va al final de la línea del if entonces compara pero no hace nada, luego sigue como si ese if no existiera.

Las 3 líneas que comento no tienen sentido, eliminalas

void loop() {
  time = 2000;

//  inicio = 0;   ***** no va porque la cambias abajo

  inicio = digitalRead(pin2);

//  rapido = 0;   ***** no va porque la cambiarías abajo
//   rapido = digitalRead(pin3);     ***** esta la lees después, aca no se usa para nada

  if (inicio == 1)
  {

Un consejo, aunque es lo mismo, te conviene poner

if(inicio == HIGH) {}
o
if(rapido == LOW) {}

Así, si tienes que corregir algo más adelante, de un vistazo te das cuenta que comparas el estado de un pin digital y no cualquier otra variable. Y también es más sencillo para los que leen tu código. :wink:

Muchas gracias Gatul.

Vaya fallo más tonto. Llevo un tiempo sin tocarlo y estoy oxidado. :frowning:

Aunque me debería haber dado fallo de compilación. :roll_eyes:

De nada!

Saludos