Can help me to combine this two code?

hi guys, I want to combine my code into blynk code, but after combine ,my keypad won’t function anymore
My code

#include<LiquidCrystal.h>  
LiquidCrystal lcd(2,3,4,5,6,7); 
int row[]={A0,A1,A2,A3};// Defining row pins of keypad connected to Arduino pins
int col[]={A4,A5,0,1};//Defining column pins of keypad connected to Arduino
int i,j,lcd_count,count=1,key_id=0,flag,entry=0;// See About the Program 
int col_scan;// Variable to identify a key press
int inPin = 13; //button pin
int rPin = 8; //relay pin
int val = 0;
char temp_press; // Variable to hold value of key press
char check[6],pass[6]; // See About the Program
const int buzzer = 9; //buzzer to arduino pin 9

void setup()
{
pinMode(inPin, INPUT);
pinMode(rPin, OUTPUT);
pinMode(9, OUTPUT);
pinMode(buzzer, OUTPUT); 
lcd.begin(16,2);
for(i=0;i<=3;i++)
{
pinMode(row[i],OUTPUT);
pinMode(col[i],INPUT);
digitalWrite(col[i],HIGH);
}
lcd.print("SET 5 Digit PASS");
}

/* Main Program Begins */

void loop()
{ 

  val = digitalRead(inPin);  // read input value
  if (val == HIGH) {         // check if the input is HIGH (button released)
    digitalWrite(rPin, HIGH);  // turn LED OFF
    lcd.setCursor(0,0);
    lcd.print("UNLOCKED");
    delay(3000);              // wait for a second
    digitalWrite(rPin, LOW);
    lcd.clear();
    lcd.print("LOCKED");   
  } else {
    digitalWrite(rPin, LOW);  // turn LED ON
  }

 while(entry<=4)// Password Setting Loop begins
{
SetPassword();
}
// Password Setting Loop Ends

key_id=0;
keyscan(); // Scan for a Key Press

/* Actions on Key Press begins */

if(key_id==1) // Condition to Check Key is Pressed
{
 check[count]=temp_press;
count++;

/* Condition to Unlock Begins*/

if(temp_press=='A')
{
  checkPassword();
if(flag==0)
{
lcd.setCursor(0,0);
lcd.print("UNLOCKED");
digitalWrite(rPin, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(3000);              // wait for a second
digitalWrite(rPin, LOW);
lcd.clear();
lcd.print("LOCKED");   

}else{ 
lcd.setCursor(0,0);
lcd.print("WRONG PASSWORD");
tone(buzzer, 18); // Send 1KHz sound signal...
delay(500);        // ...for 1 sec
noTone(buzzer);     // Stop sound...
tone(buzzer, 18); // Send 1KHz sound signal...
noTone(buzzer);     // Stop sound...
lcd.clear();
lcd.print("LOCKED");
}
count=1; // Resetting the counter variable
}

/* Condition to Unlock Ends*/

/* Condition to Change Password Begins */

else if(temp_press=='C')
{
checkPassword();
if(flag==0)
{
lcd.setCursor(0,0);
lcd.print("ENTER NEW PASS");
key_id=0;
entry=0;
}else{ 
lcd.setCursor(0,0);
lcd.print("WRONG PASSWORD");
tone(buzzer, 18); // Send 1KHz sound signal...
delay(500);        // ...for 1 sec
noTone(buzzer);     // Stop sound...
tone(buzzer, 18); // Send 1KHz sound signal...
noTone(buzzer);     // Stop sound...
}
count=1; // Resetting the counter variable
}

/* Condition to Change Password Ends */

/* Condition to LOCK Begins*/

else if(temp_press=='B')
{
lcd.setCursor(0,0);
lcd.print("LOCKED");
count=1; // Resetting the counter variable
}
/* Condition to LOCK Ends*/
}

/* Actions on Key Press Ends*/
}

/* Main Program Ends */


void SetPassword() // Subroutine to SET User Defined Password
{
keyscan();
if(key_id==1)
{
if(temp_press=='A'||temp_press=='C'||temp_press=='B') // Condition to Check for an Invalid Keypress 
{
lcd.setCursor(0,0);
lcd.print("INVALID KEYS");
entry=0;
}
else 

{
  pass[entry]=temp_press;

}
}
key_id=0;
if(entry==5)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("PASSWORD SET & LOCKED");
}} // Subroutine to SET Password ENDS

char keyscan()// Subroutine to Scan Keypad for a Keypress
{
for(i=0; i<=3; i++)
{
digitalWrite(row[0],HIGH);
digitalWrite(row[1],HIGH);
digitalWrite(row[2],HIGH);
digitalWrite(row[3],HIGH);
digitalWrite(row[i],LOW);
for(j=0; j<=3; j++)
{
col_scan=digitalRead(col[j]);
if(col_scan==LOW)
{
  key_id=1;
  entry++;
temp_press=keypress(i,j);
lcd.setCursor(lcd_count++,1);
lcd.print(temp_press);
if(temp_press=='A'||temp_press=='C'||temp_press=='B')
{
lcd_count=0;
lcd.clear();
}
delay(300);
break;
}}
}}// Subroutine to Scan Keypress Ends

char keypress(int i, int j) // Subroutine to Identify the value of Key pressed
{
if(i==0&&j==0)
{
return('1');
}
if(i==0&&j==1)
{
return('2');
}
if(i==0&&j==2)
{
return('3');
}
if(i==0&&j==3)
{
return('A');
}
if(i==1&&j==0)
{
return('4');
}
if(i==1&&j==1)
{
return('5');
}
if(i==1&&j==2)
{
return('6');
}
if(i==1&&j==3)
{
return('B');
}
if(i==2&&j==0)
{
return('7');
}
if(i==2&&j==1)
{
return('8');
}
if(i==2&&j==2)
{
return('9');
}
if(i==2&&j==3)
{
return('C');
}
if(i==3&&j==0)
{
return('*');
}
if(i==3&&j==1)
{
return('0');
}
if(i==3&&j==2)
{
return('#');
}
if(i==3&&j==3)
{
return('D');
}
} // Subroutine to identify Keypress Ends

void checkPassword() // Subroutine to Check User Input Data with SET Password
{
flag=0;
for(i=1;i<=5&&flag==0;i++)
{
if(check[i]==pass[i])
{
flag=0;
}
else 
{flag=1;
}}} // Subroutine to check password ends

Blynk code

#include <SoftwareSerial.h>
SoftwareSerial DebugSerial(0, 1); // RX, TX

#define BLYNK_PRINT DebugSerial
#include <BlynkSimpleStream.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "my AuthToken";

void setup()
{
  // Debug console
  DebugSerial.begin(9600);

  // Blynk will work through Serial
  // Do not read or write this serial manually in your sketch
  Serial.begin(9600);
  Blynk.begin(Serial, auth);
}

void loop()
{
  Blynk.run();
}

Thanks!

Edit, thanks for editing your code! Much easier to read :slight_smile:

Now, my first impression is that you should know and understand the PushData Blynk example in the IDE before trying to merge these sketches.

You need to understand how to remove all your functions from the loop, and put them behind a SimpleTimer timer.
Your loop should be no more than the following

void loop(){
  Blynk.run();
  timer.run();
}

Im not going to write your code, but i’ll give you a hand.

The top of your loop() contains the following:

val = digitalRead(inPin);  // read input value
  if (val == HIGH) {         // check if the input is HIGH (button released)
    digitalWrite(rPin, HIGH);  // turn LED OFF
    lcd.setCursor(0,0);
    lcd.print("UNLOCKED");
    delay(3000);              // wait for a second
    digitalWrite(rPin, LOW);
    lcd.clear();
    lcd.print("LOCKED");   
  } else {
    digitalWrite(rPin, LOW);  // turn LED ON
  }

You could, instead of putting it in the loop, setup up interupt with a callback function. This wouldn’t need to be on a timer, but you will need to be VERY careful about virtualWrite flooding.

1 Like

sorry about that, already reply with correct format,thanks!

1 Like

For the sake of everyone else, I recommend you edit your first post to reflect the changes, and delete your second post with the duplicate code.

:slight_smile:

1 Like

okok,done:slight_smile:

Sir, can you help me to combine? please, really need help.