Arduino Sketch Input Hysteresis

Summary of Arduino Sketch Input Hysteresis


This Arduino sketch demonstrates a simple single-state hysteretic response using a photoresistor sensor. It reads the ambient light at analog pin A0 and switches the internal state between IS_DARK and IS_LIGHT based on two threshold values (700 for light and 300 for dark). The built-in LED indicates the state, being ON in the dark state and OFF in the light state, with state transitions and readings printed via serial communication at 115200 baud.

Parts used in the Input Hysteresis Project:

  • Arduino board (e.g., Arduino Uno)
  • Photoresistor (light-dependent resistor)
  • Resistor (for photoresistor voltage divider)
  • LED (built-in on Arduino board)
  • Connecting wires

This sketch is used by Exercise: Input Hysteresis.

Full Source Code

The full code is all in one file InputHysteresis.ino.

// InputHysteresis.ino : Arduino program to demonstrate a simple single-state hysteretic response.

// Copyright (c) 2014-2015, Garth Zeglin.  All rights reserved. Licensed under the terms
// of the BSD 3-clause license as included in LICENSE.

// The baud rate is the number of bits per second transmitted over the serial port.
const long BAUD_RATE = 115200;

// This assumes a photoresistor is pulling A0 up and a resistor is pulling A0
// down.  When the input is bright, the voltage increases, when dark, the
// voltage decreases.
const int INPUT_PIN = A0;

/****************************************************************/
// Global variables.

// The state of the system can be captured with only two values, e.g., it is
// represented as a single bit.  The following statement defines two symbolic
// values, one for each possible state.
enum state_t { IS_DARK, IS_LIGHT };

// Declare the state variable as a symbolic value.
enum state_t state = IS_DARK;

// The hysteretic response is defined by using two thresholds.  
const int light_threshold = 700;
const int dark_threshold  = 300;

/****************************************************************/
/**** Standard entry points for Arduino system ******************/
/****************************************************************/

// Standard Arduino initialization function to configure the system.

void setup()
{
  // initialize the Serial port
  Serial.begin( BAUD_RATE );

  // configure our trivial I/O
  pinMode( LED_BUILTIN, OUTPUT );

  // the LED start out ON to match the initial state
  digitalWrite(LED_BUILTIN, HIGH);
}

/****************************************************************/
// Standard Arduino polling function.

void loop()
{
  // Read the ambient light level.
  int input = analogRead(INPUT_PIN);

  if (state == IS_LIGHT) {
    if (input < dark_threshold) {
      Serial.print("Dark observed at input level ");
      Serial.println(input);
      Serial.println("Transitioning to the IS_DARK state.");
      
      state = IS_DARK;
      digitalWrite(LED_BUILTIN, HIGH);
    }

  } else { // state must be IS_DARK
    if (input > light_threshold) {
      Serial.print("Light observed at input level ");
      Serial.println(input);
      Serial.println("Transitioning to the IS_LIGHT state.");
      
      state = IS_LIGHT;
      digitalWrite(LED_BUILTIN, LOW);
    }
  }
}

/****************************************************************/

Source: Arduino Sketch Input Hysteresis


About The Author

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top