My Keypad Sends something and doesnt stops

I cant send **** symbols to my arduino, i tested my keypad and it working with no problem, i think theres a problem in my code.
`

#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

byte pin_rows[ROWS] = {10, 11, 12, 13}; //connect to the row pinouts of the keypad
byte pin_column[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad

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

void setup() {
pinMode(2, OUTPUT); // set the LED pin as an output
Serial.begin(9600); // initialize serial communication
}

void loop() {
char key = keypad.getKey();
Serial.println(key);

if (key == '*') {
// the user entered the first digit of the code
char secondDigit = keypad.getKey(); // read the second digit

if (secondDigit == '*') {
  // the user entered "1A", so read the third digit
  char thirdDigit = keypad.getKey();
  
  if (thirdDigit == '*') {
    // the user entered "1A5", so read the final digit
    char fourthDigit = keypad.getKey();
    
    if (fourthDigit == '*') {
      // the user entered "1A5D", so turn on the LED

digitalWrite(2,HIGH);
delay(1000);
digitalWrite(2,LOW);
delay(1000);
digitalWrite(2,HIGH);
delay(1000);
digitalWrite(2,LOW);
delay(1000);
digitalWrite(2,HIGH);
delay(1000);
digitalWrite(2,LOW);
delay(1000);
digitalWrite(2,HIGH);
delay(900);
digitalWrite(2,LOW);
delay(900);
digitalWrite(2,HIGH);
delay(900);
digitalWrite(2,LOW);
delay(900);
digitalWrite(2,HIGH);
delay(800);
digitalWrite(2,LOW);
delay(800);
digitalWrite(2,HIGH);
delay(800);
digitalWrite(2,LOW);
delay(800);
digitalWrite(2,HIGH);
delay(700);
digitalWrite(2,LOW);
delay(700);
digitalWrite(2,HIGH);
delay(700);
digitalWrite(2,LOW);
delay(700);
digitalWrite(2,HIGH);
delay(600);
digitalWrite(2,LOW);
delay(600);
digitalWrite(2,HIGH);
delay(600);
digitalWrite(2,LOW);
delay(600);
digitalWrite(2,HIGH);
delay(600);
digitalWrite(2,LOW);
delay(600);
digitalWrite(2,HIGH);
delay(500);
digitalWrite(2,LOW);
delay(500);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(400);
digitalWrite(2,HIGH);
delay(400);
digitalWrite(2,LOW);
delay(300);
digitalWrite(2,HIGH);
delay(300);
digitalWrite(2,LOW);
delay(300);
digitalWrite(2,HIGH);
delay(300);
digitalWrite(2,LOW);
delay(300);
digitalWrite(2,HIGH);
delay(300);
digitalWrite(2,LOW);
delay(300);
digitalWrite(2,HIGH);
delay(200);
digitalWrite(2,LOW);
delay(100);
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(100);
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(100);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(50);
digitalWrite(2,LOW);
delay(50);
digitalWrite(2,HIGH);
delay(30);
digitalWrite(2,LOW);
delay(30);
digitalWrite(2,HIGH);
delay(30);
digitalWrite(2,LOW);
delay(30);
digitalWrite(2,HIGH);
delay(30);
digitalWrite(2,LOW);
delay(30);
digitalWrite(2,HIGH);
delay(30);
digitalWrite(2,LOW);
delay(30);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(20);
digitalWrite(2,LOW);
delay(20);
digitalWrite(2,HIGH);
delay(17);
digitalWrite(2,LOW);
delay(17);
digitalWrite(2,HIGH);
delay(17);
digitalWrite(2,LOW);
delay(17);
digitalWrite(2,HIGH);
delay(500);
}
}
}
}
}
`

Why did you post in the Uncategorised category of the forum when its title very clearly says

DO NOT CREATE TOPICS IN THIS CATEGORY

Your topic has been moved to the Programming category

In addition to posting in the wrong category you have not posted your code as advised

Please follow the advice given in the link below when posting code, in particular the section entitled 'Posting code and common code problems'

Use code tags (the < CODE/ > icon above the compose window) to make it easier to read and copy for examination

char secondDigit = keypad.getKey(); // read the second digit

if (secondDigit == '*') {
  // the user entered "1A", so read the third digit

If the user entered a * as the second digit then they did not enter "1A", neither did they enter 1 as the first digit. Is the code wrong or the comment ?

The call to keypad.getKey() is probably returning NO_KEY (a.k.a: 0). Try "keypad.waitForKey()" to get the next key press.

Where i should use this command

Anywhere that you want to wait for a key as opposed to checking whether a key has been pressed and moving on whether or not a keypress has been detected

Thank you so much, its finished :slight_smile:

if (keypad.getKey() != NO_KEY)
{
// code to run when a key is pressed
}
EDITED... bad code

That doesn't wait for a key.

1 Like

As i can see, you are taking the key and next you are printing it without asking if a key was pressed:

char key = keypad.getKey();
Serial.println(key);
...

must be:

char key = keypad.getKey();
if (key) {
  Serial.println(key);
  ...

and similar with second digit

xakko

and like an old programmer i am, try to work with subrutines or functions. In the void loop just put the main action: wait for a key. once its happend, send to other subrutine:

void loop() {
  char key = keypad.getKey();
  if (key) {
    keypressed(key);
  }
}
void keypressed (char kp) {
  ....
}

it's just a suggestion

xakko

1 Like

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