Problema, flashear un led con keypad

hola la verdad no se mucho del keypay y estoy tratando de hacer un programa donde un led flashe dependiendo de que botón presione solo que acepta un digito solamente y lo que quiero hacer es que al presionar 1 y 3 digamos estos se sumen y flashe 4 veces que seria lo que debe, no se que esta mal en mi código si ya lo intente todo y solamente presionas el primer digito y no importa cual sea del 0-9 flashea 1 vez y en el segundo digito si prende las veces que se le seleccionaron aquí les dejo parte de mi código y espero y me ayuden a encontrar mi error

#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns

int n, r, i;
char key, key2;

char keys[ROWS][COLS] =
{
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
}

void loop()
{
  Serial.print("Cuantas veces flashea led: ");
  key = keypad.waitForKey();
  Serial.println(key);

  Serial.print("Cuantas veces flashea led: ");
  key2 = keypad.waitForKey();
  Serial.println(key2);
  Serial.println();

  if (key, key2 != '' && key, key2 != '#' && key, key2 != NO_KEY );
  {
    n = conv_int(key);
    for (i = 0; i < n; i++)
    {
      digitalWrite(13, HIGH);
      delay(200);
      digitalWrite(13, LOW);
      delay(200);
      if (key, key2 != '' && key, key2 != '#' && key, key2 != NO_KEY );
      {
        r = conv_int(key2);
        for (i = 0; i < r; i++)
        {
          digitalWrite(13, HIGH);
          delay(200);
          digitalWrite(13, LOW);
          delay(200);
        }
      }
    }
  }
}
int conv_int(char x)
{
  switch (x)
  {
    case '1': return 1; break;
    case '2': return 2; break;
    case '3': return 3; break;
    case '4': return 4; break;
    case '5': return 5; break;
    case '6': return 6; break;
    case '7': return 7; break;
    case '8': return 8; break;
    case '9': return 9; break;
    case '0': return 0; break;
  }

}

Esto no es correcto

if (key, key2 != '' && key, key2 != '#' && key, key2 != NO_KEY );
{
   ...
}

tu tienes que escribir

if (key != '#') && (key2 != '#') && (key != NO_KEY) && (key2 != NO_KEY) {
  ...
}

(¿Por qué te hiciste esta prueba dos veces?)

Como siempre una rutina que incluye delay() solo detiene lo que se espera que haga.
Debe reemplazarse por millis()

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.