// STM32 Nucleo-C031C6 I2C Example
// Simulation: https://wokwi.com/projects/365421666018061313
#include "LiquidCrystal_I2C.h"
#include "Keypad.h"
#include "password.h"
#include "string.h"
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define ROWS 4U
#define COLS 4U
char keys[ROWS][COLS] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
};
byte colPins[COLS] = { D6, D7, D8, D9 }; // Pins connected to C1, C2, C3, C4
byte rowPins[ROWS] = { D2, D3, D4, D5 }; // Pins connected to R1, R2, R3, R4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
User duck("Duck");
void setup() {
Serial.begin(115200);
Serial.println("Hello, STM32!");
lcd.init();
lcd.backlight();
lcd.setCursor(4, 0);
lcd.print("Hello, STM32");
lcd.setCursor(5, 2);
lcd.print("Welcome to");
lcd.setCursor(7, 3);
lcd.print("Wokwi!");
}
void loop() {
char key = keypad.getKey();
std::string message = "";
if (key != NO_KEY) {
Serial.println(key);
}
if (key == '#')
{
int cursor_pos = 0;
lcd.clear();
lcd.setCursor(4,0);
auto name = std::string("Hello, ") + duck.getName();
lcd.print(name.c_str());
Serial.println(name.c_str());
lcd.setCursor(4,2);
lcd.print("Enter password");
while(key!='*')
{
key = keypad.getKey();
if (key != NO_KEY && key != '#' && key != '*') {
Serial.println(key);
message+=key;
if(cursor_pos < LCD_COLUMNS)
{
lcd.setCursor(cursor_pos++,5);
lcd.print("*");
}
else
{
lcd.setCursor(19,5);
lcd.print(">");
}
}
duck.newPassword(std::string(message));
}
lcd.clear();
Serial.println(duck.password.c_str());
}
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6