// LCD1602 and Pi Pico-W!
#include <LiquidCrystal.h>
#include <WiFi.h>
#define GOOD_PIN 2
#define OKAY_PIN 3
#define BAD_PIN 4
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
unsigned long debounce_duration = 50;
unsigned long state_change_time = 0;
byte last_button_state_good = LOW;
byte last_button_state_okay = LOW;
byte last_button_state_bad = LOW;
const char* message_part1 = "How was class";
const char* message_part2 = "today?";
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void print_message_to_lcd()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(message_part1);
lcd.setCursor(0, 1);
lcd.print(message_part2);
}
void print_connecting_sequence()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connecting.");
delay(250);
lcd.setCursor(0,0);
lcd.print("Connecting..");
delay(250);
lcd.setCursor(0,0);
lcd.print("Connecting...");
delay(250);
}
void print_setup_sequence()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Connected!");
lcd.setCursor(0, 1);
lcd.print("IP: ");
lcd.setCursor(5, 1);
lcd.print(WiFi.localIP());
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Setting up pins!");
delay(1000);
}
void print_option_sequence(const char* msg)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(msg);
delay(250);
print_message_to_lcd();
}
void setup() {
lcd.begin(16, 2);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED)
{
print_connecting_sequence();
}
print_setup_sequence();
pinMode(GOOD_PIN, INPUT);
pinMode(OKAY_PIN, INPUT);
pinMode(BAD_PIN, INPUT);
digitalWrite(GOOD_PIN, LOW);
digitalWrite(OKAY_PIN, LOW);
digitalWrite(BAD_PIN, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Pin setup done!");
delay(1000);
print_message_to_lcd();
}
void loop() {
if (millis() - state_change_time > debounce_duration)
{
byte button_state_good = digitalRead(GOOD_PIN);
byte button_state_okay = digitalRead(OKAY_PIN);
byte button_state_bad = digitalRead(BAD_PIN);
if (button_state_good != last_button_state_good)
{
state_change_time = millis();
last_button_state_good = button_state_good;
if (button_state_good == LOW)
{
print_option_sequence("GOOD");
}
}
if (button_state_okay != last_button_state_okay)
{
state_change_time = millis();
last_button_state_okay = button_state_okay;
if (button_state_okay == LOW)
{
print_option_sequence("OKAY");
}
}
if (button_state_bad != last_button_state_bad)
{
state_change_time = millis();
last_button_state_bad = button_state_bad;
if (button_state_bad == LOW)
{
print_option_sequence("BAD");
}
}
}
delay(1); // Adding a delay() here speeds up the simulation
}