//Access: https://wokwi.com/projects/361151259376611329
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
}
void loop() {
// Step 1: Display "Please say '1 2 3' for Identity Verification"
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 15);
display.println("Voices Confirmation");
display.setCursor(0, 25);
display.println("for Password and");
display.setCursor(0, 35);
display.println("Identity Verification");
display.display();
delay(3000);
display.clearDisplay();
// Step 2: Display "Step 1 Voice confirmation"
display.setCursor(0, 25);
display.println("Step 1");
display.setCursor(0, 35);
display.println("Voice confirmation:");
display.display();
delay(4000);
display.clearDisplay();
// Step 3: Read mic value
int micvalue = analogRead(A0);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
// Step 4: Check mic value
if (micvalue >= 525 && micvalue <= 545){
// Password is correct
display.clearDisplay();
display.setCursor(0, 30);
display.println("Password is correct");
display.display();
delay(2000);
// Step 5: Display "Step 2 Voice confirmation"
display.clearDisplay();
display.setCursor(0, 25);
display.println("Step 2");
display.setCursor(0, 35);
display.println("Voice confirmation:");
display.display();
delay(4000);
display.clearDisplay();
// Step 6: Read mic value again
micvalue = analogRead(A0);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
// Step 7: Check mic value again
if (micvalue >= 500 && micvalue <= 525) {
// Password is correct
display.clearDisplay();
display.setCursor(0, 30);
display.println("Password is correct");
display.display();
delay(2000);
// Step 8: Display "Step 3 Voice confirmation"
display.clearDisplay();
display.setCursor(0, 25);
display.println("Step 3");
display.setCursor(0, 35);
display.println("Voice confirmation:");
display.display();
delay(4000);
display.clearDisplay();
// Step 9: Read mic value again
micvalue = analogRead(A0);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
delay(200);
Serial.println(micvalue);
// Step 10: Check mic value again
if (micvalue >= 495 && micvalue <= 515) {
// Access granted
display.clearDisplay();
display.setCursor(21, 30);
display.println("Access Granted");
display.display();
delay(10000);
display.clearDisplay();
} else {
// Mic value is incorrect
display.clearDisplay();
display.setCursor(0, 30);
display.println("Try again");
display.display();
delay(3000);
display.clearDisplay();
}
} else {
// Mic value is incorrect
display.clearDisplay();
display.setCursor(0, 30);
display.println("Try again");
display.display();
delay(3000);
display.clearDisplay();
}
} else {
// Mic value is incorrect
display.clearDisplay();
display.setCursor(0, 30);
display.println("Try again");
display.display();
delay(3000);
display.clearDisplay();
}
}