5.4. InputHysteresis Arduino Sketch¶
This sketch is used by Exercise: Input Hysteresis.
5.4.1. Full Source Code¶
The full code is all in one file InputHysteresis.ino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | // 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.
#define 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.
#define INPUT_PIN A0
// Some version of the Arduino IDE don't correctly define this symbol for an
// Arduino Uno.
#ifndef LED_BUILTIN
#define LED_BUILTIN 13
#endif
/****************************************************************/
// 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);
}
}
}
/****************************************************************/
|