@docdoc
You are correct, so let's solve the key press beep input at first.
here is the full sketch that didn't work
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Keypad.h>
//#include <ezBuzzer.h>
//#include "HX711.h"
//#define calibration_factor -7050.0 //This value is obtained using the SparkFun_HX711_Calibration sketch
//#define LOADCELL_DOUT_PIN 11
//#define LOADCELL_SCK_PIN 12
//HX711 scale;
int trigPin = 12; // TRIG pin
int echoPin = 11; // ECHO pin
float duration_us, distance_cm, distance1;
LiquidCrystal_I2C lcd_1(0x27, 16, 2);
const int BUZZER_PIN = 10;
const int ROW_NUM = 4; // four rows
const int COLUMN_NUM = 4; // four columns
char keys[ROW_NUM][COLUMN_NUM] = {
{'1','2','3', 'A'},
{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; // connect to the row pinouts of the keypad
byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; // connect to the column pinouts of the keypad
Keypad customKeypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM );
//ezBuzzer buzzer(BUZZER_PIN); // create ezBuzzer object that attach to a pin;
void displayscreen(){ // screen saver
lcd_1.setCursor(4,0);
lcd_1.print("*iScale*");
lcd_1.setCursor(2 ,1);
lcd_1.print("!Your Scale!");
lcd_1.scrollDisplayLeft();
delay(200);
lcd_1.scrollDisplayRight();
}
void setup() {
Serial.begin(4800);
lcd_1.init(); // initialize the lcd
lcd_1.init();
// Print a message to the LCD.
lcd_1.backlight();
displayscreen();
pinMode(trigPin, OUTPUT); // config trigger pin to output mode
pinMode(echoPin, INPUT); // config echo pin to input mode
/*Serial.println("HX711 scale demo"); // load cell module to be activated later
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
Serial.println("Readings:");*/
}
bool KeyPressed() {
static unsigned long lastKeypressTime ;
bool KeyGood = false;
char customKey = 0;
char key = customKeypad.getKey();
if (key) {
lastKeypressTime = millis(); // update the lastKeypressTime variable with the current time
customKey = key;
Serial.print(customKey); // prints key to serial monitor
//buzzer.beep(100); // generates a 100ms beep
tone(BUZZER_PIN, 1000, 100);
KeyGood = true;
}
return KeyGood;
}
void Height(){ // height measurement module
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration_us = pulseIn(echoPin, HIGH);
distance_cm = 0.017 * duration_us;
distance1= 180 - distance_cm ;
lcd_1.clear();
lcd_1.setCursor(0, 1);
lcd_1.print("Height: ");
lcd_1.print(distance1);
Serial.print("Height: ");
Serial.println(distance_cm);
}
/*void weight(){ // weight measurement module to be activated later
Serial.print("Reading: ");
Serial.print(scale.get_units(), 1); //scale.get_units() returns a float
Serial.print(" lbs"); //You can change this to kg but you'll need to refactor the calibration_factor
Serial.println();
delay(1000);
}*/
void loop(){
static unsigned long lastKeypressTime = 0; // initialize the lastKeypressTime variable
char customKey = customKeypad.getKey(); // variable for the input key
if (KeyPressed()) //if there is any input
{
lcd_1.clear();
// lastKeypressTime = millis(); // update the lastKeypressTime variable with the current time
lcd_1.setCursor(0,0);
lcd_1.print("Enter your PhoneNo.:");
Serial.print("Enter your PhoneNo.: ");
class String PhoneString = ""; // Initialize an empty string to hold the user's age
while (millis() - lastKeypressTime <= 10000) { // Wait for the user to enter their Phone (up to 10 seconds)
char PhoneKey = customKeypad.getKey();
if (PhoneKey) {
// Initialize if a key is pressed
lastKeypressTime = millis();
Serial.print(PhoneKey);
PhoneString += PhoneKey; // Append the entered digit to the age string
lcd_1.setCursor(2,1);
lcd_1.print(PhoneString);
//PhoneString += PhoneKey;
if (PhoneString.length() == 11) { // If the age string has two digits, categorize the age
// Print the user's age and age group
lcd_1.clear();
lcd_1.setCursor(1,0);
lcd_1.print("Your Phone is: ");
lcd_1.setCursor(2,1);
lcd_1.print(PhoneString);
//delay(1000);
// Convert the age string to an integer
int Phone = PhoneString.toInt();
//lastKeypressTime = 0;
//if (millis() -lastKeypressTime > 10000) {
PhoneString = "";
delay(1000);
Age3();
}
}
}
}
}
int Age3() {
int iAge;
lcd_1.clear();
lcd_1.print("Enter Your Age :");
lcd_1.setCursor(4, 1);
char Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key > '0' && Key <= '9') iAge = Key - '0';
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.print(Key);
Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key >= '0' && Key <= '9') iAge = iAge * 10 + Key - '0';
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.println(Key);
lcd_1.clear();
lcd_1.setCursor(1, 0);
lcd_1.print("Your Age is: ");
lcd_1.setCursor(8, 1);
lcd_1.print(iAge);
delay(1000);
Gender();
return iAge;
}
int Gender() {
class String iGender;
lcd_1.clear();
lcd_1.print("Choose Gender:");
delay(100);
lcd_1.setCursor(0, 1);
lcd_1.print("*=Male #=Female");
delay(500);
lcd_1.clear();
lcd_1.setCursor(0, 0);
lcd_1.print("Choose Gender:");
lcd_1.setCursor(4, 1);
char Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key == '*') iGender == "Male";
else if (Key =='#') iGender == "Female";
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.print(Key);
Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key == '*') iGender = "Male";
else if (Key == '#') iGender = "Female";
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.println(Key);
lcd_1.clear();
lcd_1.setCursor(1, 0);
lcd_1.print("Your are a ");
lcd_1.setCursor(8, 1);
lcd_1.print(iGender);
delay(1000);
Receipt();
//return iGender;
// Height();
}
int Receipt() {
class String iReceipt;
lcd_1.clear();
lcd_1.print("Print Receipt ?");
delay(100);
lcd_1.setCursor(0, 1);
lcd_1.print("*=Yes #=No");
delay(500);
lcd_1.clear();
lcd_1.setCursor(0, 0);
lcd_1.print("Print Receipt ?");
lcd_1.setCursor(4, 1);
char Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key == '*') iReceipt == "Print Receipt";
else if (Key =='#') iReceipt == "Not to Print Receipt";
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.print(Key);
Key = NO_KEY;
while (Key == NO_KEY) {
Key = customKeypad.getKey();
if (Key == '*') iReceipt = "Print a Receipt";
else if (Key == '#') iReceipt = "Not to Print ";
else Key = NO_KEY;
}
Serial.print(Key);
lcd_1.println(Key);
lcd_1.clear();
lcd_1.setCursor(1, 0);
lcd_1.print("You choosed ");
lcd_1.setCursor(0, 1);
lcd_1.print(iReceipt);
delay(1000);
Height();
//delay(5000);
//lcd_1.clear();
//lcd_1.setCursor(4, 1);
//lcd_1.print("Thank You");
//delay(1000);
//lcd_1.clear();
//displayscreen();
//return iReceipt;
// Height();
}