// Schmitt Trigger demonstration
// 
// https://wokwi.com/projects/411421086186465281
// 
// Built from https://wokwi.com/projects/411407134995176449
//
// Using https://github.com/drf5n/Wokwi-Chip-Schmitt-Trigger

const byte analogPin = A0;
const byte digitalPin = 3;
const byte digitalPinUnfiltered = 7;
const double Vcc = 5.0;

#include <Wire.h>
#include <hd44780.h> // #include <hd44780ioClass/hd44780_I2Cexp.h> // i2c LCD i/o class header
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c LCD i/o class header
hd44780_I2Cexp lcd;

void setup()
{
  Serial.begin(115200);
  lcd.begin(20, 4);
  lcd.setCursor(0, 0);
  lcd.print("Schmitt Trigger Test");
  pinMode(analogPin, INPUT);
  pinMode(digitalPin, INPUT);
  pinMode(digitalPinUnfiltered, INPUT);
}

void loop()
{
  int pot = analogRead(analogPin);
  int trigger = digitalRead(digitalPin);
  int unfiltered = digitalRead(digitalPinUnfiltered);
  static int lastPot = -1, lastTrigger = -1;
  static float highvolts, lowvolts;

  if (pot != lastPot) {
    lcd.setCursor(0, 1);
    lcd.print("");
    lcd.print(unfiltered);
    lcd.print("->");
    lcd.print(trigger);
    lcd.print(" ");
    lcd.print(pot);
    lcd.print(" ");
    lastPot = pot;
  }

  if (trigger != lastTrigger) {
    if (trigger == LOW) {
      highvolts = volts(pot);
      lcd.setCursor(0, 3);
      lcd.print("Low:  ");
      lcd.print(pot);
      lcd.print("cnt:");
      lcd.print(highvolts, 3);
      lcd.print("V ");
    } else {
      lowvolts = volts(pot);
      lcd.setCursor(0, 2);
      lcd.print("High: ");
      lcd.print(pot);
      lcd.print("cnt:");
      lcd.print(lowvolts, 3);
      lcd.print("V ");
    }
    lcd.setCursor(13, 1);
    lcd.print((highvolts + lowvolts) / 2, 3);
    lcd.print("V ");
    lastTrigger = trigger;
  }
}

double volts(int pot) {
  return Vcc * (pot + 0.5) / 1024;
}
Loading chip...chip-schmitt