Step 5Reading switch state with a microcontroller
Note that the layout below shows a 10K pull-up resistor but for the code I use the 'built-in' pull-up resistor that you can turn on by setting an input pin to HIGH output (it's quite neat!) If you use the internal pull-up you can skip the external one.
/* Better Debouncer - This debouncing circuit is more rugged, and will work with tilt switches! */
/* http://www.ladyada.net/learn/sensor/tilt.html */
int inPin = 2; // the number of the input pin
int outPin = 13; // the number of the output pin
int LEDstate = HIGH; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin
// the follow variables are long's because the time, measured in milliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0; // the last time the output pin was toggled
long debounce = 50; // the debounce time, increase if the output flickers
void setup()
{
pinMode(inPin, INPUT);
digitalWrite(inPin, HIGH); // turn on the built in pull-up resistor
pinMode(outPin, OUTPUT);
}
void loop()
{
int switchstate;
reading = digitalRead(inPin);
// If the switch changed, due to bounce or pressing...
if (reading != previous) {
// reset the debouncing timer
time = millis();
}
if ((millis() - time) > debounce) {
// whatever the switch is at, its been there for a long time
// so lets settle on it!
switchstate = reading;
// Now invert the output on the pin13 LED
if (switchstate == HIGH)
LEDstate = LOW;
else
LEDstate = HIGH;
}
digitalWrite(outPin, LEDstate);
// Save the last reading so we keep a running tally
previous = reading;
}
| « Previous Step | Download PDFView All Steps | Next Step » |











































Off topic: the wave shield video is brilliant.