Pause code while keypad value not given

I want to pause the code until the keypad value is not entered throught they key pad. I am using arduino uno and 4*4 mebrane keypad

Do you have any code to share?

Use a flag to indicate if a valid keypad entry was entered.

void loop()
{
  static bool keypadComplete = false;

  keypadComplete = getKeypad();

  if(keypadComplete == true)
  {
    // do whatever needs to be done
  }
}

bool getKeypad()
{
  // read keypad

  // if entry complete, return true
  if(somecondition)
  {
    return true;
  }

  return false;
}

The exact implementation of getKeypad() depends on your needs.

Note:
how does this relate to sensors?

hi i have a code of wending machine and i want to pause the code at several points so that it waits for keypad entry

Do you want to wait for a single keypad entry or a multiple keypad entry ? If the latter then what will signal the end of the entry ?

i want a single keypad entry

Look at the difference between the Keypad getkey() function and the waitForKey() function

Guess what the second one does ?

what should i enter in the bracket
of waitForKey()

Nothing

i want 2 digit entry in one and a single digit entry in one so how should i imply it?

Use getKey() for both entries and signal the end of data entry with a special key value such as '#'

pls can you give an example in code it would be a great help😀

Statemachine sounds like the correct approach; can you describe the steps of your vending machine and where you want to pause for user input?

This doesn't sound like it's related to sensors. Your topic is moved to a more suitable location on the forum.

#include <LiquidCrystal.h>
#include <Keypad.h>
const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int trigPin = 16;
const int echoPin = 17;
long duration;
int d;
int r1 = 18;
int r2 = 19;
char x;
int a = 0;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1', '4', '7', 'A'},
{'2', '5', '8', 'B'},
{'3', '6', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8};
byte colPins[COLS] = {15, 14, 13, 12};
Keypad k = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
String inputString;
long inputInt;
void setup() {
Serial.begin(9600);
inputString.reserve(10);
lcd.begin(16, 2);
lcd.print("Welocme to PWI");
Serial.println("Welocme to panipuri wending machine");
delay(5000);
lcd.clear();
}
void loop() {
char key = k.getKey();
lcd.print("enter puri no");
Serial.println("how many pani puri do you want to eat");
delay(2000);
//i want to stop it once here and want 2 digit value
delay(5000);
lcd.clear();
lcd.print("You have choose to eat ");
lcd.print(x);
while (a <= key)
{
lcd.print("enter the no.");
Serial.println("enter the no");
delay(4000);
//i want to stop it here for a one digit entry that is either '1' or '2'
if (key == '1')
{
lcd.clear();
lcd.print("Spicy water");
Serial.println("You have selected spicy water");
delay(2000);
lcd.clear();
lcd.print("place under nosel");
Serial.println("place the puri under nosel");
d = calculateDistance();
delay(4000);
if (d < 10)
{
lcd.clear();
digitalWrite(r1, HIGH);
delay(5000);
digitalWrite(r1, LOW);
a++;
}
}
else if (key == '2')
{
lcd.clear();
lcd.print("Sweet water");
lcd.print("place the puri under nosel");
delay(4000);
d = calculateDistance();
if (d < 10)
{
lcd.clear();
digitalWrite(r2, HIGH);
delay(5000);
digitalWrite(r2, LOW);
a++;
}
}
}
}

int calculateDistance()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);
d = duration * 0.034 / 2;
return d;
}

thanks

The easier you make it to read and copy the code the more likely it is that you will get help

Please follow the advice given in the link below when posting code

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