3 Simple Ways to
Share What You Make

With Instructables you can share what you make with the world — and tap into an ever-growing community of creative experts.

PhotosPhotos

Share one or more photos of a project, recipe, or whatever you've made, quickly and easily.

Step by StepStep-By-Step

Share your step-by-step photos with text instructions of what you made so others can do it too!

VideoVideo

Share your how-to video. You'll need your embed code from a video site such as YouTube.

Tilt Sensor Tutorial

Step 5Reading switch state with a microcontroller

Reading 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 StepDownload PDFView All StepsNext Step »
2 comments
Jan 16, 2011. 10:46 AMVick Jr says:
Can this internal pull-up resistor trick be used for other sensors, such as the PIR motion sensor?
Nov 30, 2010. 11:35 AMthedod says:
Thanks. Especially for the tip about the internal pull-up resistor.
Off topic: the wave shield video is brilliant.

Pro

Get More Out of Instructables

Already have an Account?

close

All Steps Viewing
View all steps of an Instructable on the same page when you're a Pro Member.

Upgrade to Pro today!
234
Followers
17
Author:adafruit(Adafruit Industries)
All-original DIY electronics kits - Adafruit Industries is a New York City based company that sells kits and parts for original, open source hardware electronics projects featured on www.adafruit.com ...
more »