#include "LiquidCrystal_I2C.h"
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define BUTTON_PIN PA0
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int storedData = 123;
bool dataRevealed = false;
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
// Store data silently
Serial.print("SPI Data Stored: ");
Serial.println(storedData);
// Show waiting screen
lcd.setCursor(0, 0);
lcd.print(" SPI Protocol Demo ");
lcd.setCursor(0, 1);
lcd.print("====================");
lcd.setCursor(0, 2);
lcd.print(" Data stored in STM32");
lcd.setCursor(0, 3);
lcd.print(" Press button to show");
}
void loop() {
// When button pressed
if (digitalRead(BUTTON_PIN) == LOW && !dataRevealed) {
dataRevealed = true;
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SPI DATA RECEIVED ");
lcd.setCursor(0, 1);
lcd.print("====================");
lcd.setCursor(0, 2);
lcd.print(" Stored Value: ");
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.print(storedData);
lcd.print(" ");
Serial.println("Button pressed!");
Serial.print("Displaying stored SPI data: ");
Serial.println(storedData);
}
// Press again to reset
if (digitalRead(BUTTON_PIN) == LOW && dataRevealed) {
dataRevealed = false;
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" SPI Protocol Demo ");
lcd.setCursor(0, 1);
lcd.print("====================");
lcd.setCursor(0, 2);
lcd.print(" Data stored in STM32");
lcd.setCursor(0, 3);
lcd.print(" Press button to show");
Serial.println("Reset! Data hidden again.");
}
}